wp_mail not sending emails

时间:2016-06-30 作者:Rahul Bali

我用过WP-Mail-SMTP 在我的WordPress安装中设置邮件程序。我通过向我的私人邮件发送电子邮件来测试它。

我现在正在尝试使用wp\\u mail()函数[wp]发送表单数据。

下面是代码。

<?php
if(isset($_POST["button_pressed"])){
// Checking For Blank Fields..
if($_POST["dname"]==""){
echo "Fill All Fields..";
}
else {
$email=$_POST[\'email\'];
$message = $_POST[\'dname\'];
$headers = \'From:\' . "\\r\\n"; // Sender\'s Email
$headers .= \'Cc:\' . "\\r\\n"; // Carbon copy to Sender

// Message lines should not exceed 70 characters (PHP rule), so wrap it
// $message = wordwrap($message, 70);    

wp_mail("PRIVATE-EMAIL-ADDRESS", $subject, $message, $headers)

echo "Your mail has been sent successfully ! Thank you for your feedback";
}
?>
HTML表单

<form>
<div class="row">
<div class="form-group">
<div class="col-sm-6"><input class="form-control" type="text" placeholder="ENTER DOG\'S NAME" id="dname" /></div>
<div class="col-sm-6"><input class="form-control" type="text" placeholder="ENTER OWNER\'S NAME" id="name" /></div>
</div>
</div>


<input type="submit" value="SUBMIT" />
<input type="hidden" name="button_pressed" value="1" />

</form>
我试过很多教程,但都没用。你的意见和建议对我很有帮助。谢谢你的时间。

3 个回复
最合适的回答,由SO网友:Rahul Bali 整理而成

在闲逛了几个小时后,我发现了问题。

这是表单而不是PHP。

<div class="col-sm-6">
<input class="form-control" type="text" placeholder="ENTER DOG\'S NAME" id="dname" /></div>
<div class="col-sm-6">
<input class="form-control" type="text" placeholder="ENTER OWNER\'S NAME" id="name" /></div>
id 属性需要为name.

Corrected

<div class="col-sm-6">
<input class="form-control" type="text" placeholder="ENTER DOG\'S NAME" name="dname" /></div>
<div class="col-sm-6">
<input class="form-control" type="text" placeholder="ENTER OWNER\'S NAME" name="name" /></div>
</div>

SO网友:Tyler Burden

是的。有很多事情不对。

您必须清理$\\u POST数据,否则会发生非常糟糕的事情。。。

WordPress中字符串最好使用单引号

间距和缩进不符合最佳做法。

  • 你没有用$\\u POST[\'name\']做任何事???

  • 您的呼叫$\\u POST[“email”]但未通过示例表单传递,这将导致未定义的变量错误(使用WP DEBUG!!!使其成为真)

    检查所有$\\u POST值非常重要,而不仅仅是1,因为有人可以操纵表单,或者垃圾邮件发送者可以发送电子邮件,而表单不会丢失POST值,从而再次导致未定义的变量错误。

    wp\\U邮件的结尾应该有分号

    如果缺少一个右括号,PHP将永远无法工作。

    不需要else

    如果存在表单篡改,最好使用wp\\u die。如果您不希望用户使用糟糕的UX,那么只需在输入字段中使用所需的HTML标记即可。

    输入字段后无需关闭div

    最好使用css和本机引导来处理大写字母。

  • php

    <?php 
    
    if ( isset( $_POST["button_pressed"] ) ) {
      // Checking For Blank Fields..
      if ( empty( $_POST[\'dname\'] ) || empty( $_POST[\'name\'] ) ) {
        wp_die( __( \'Please fill out all the fields next time.\', \'your-text-domain\' ) );
      }
      $message  = sanitize_text_field( $_POST[\'dname\'] );
      // $email    = sanitize_email( $_POST["email"] );
      $name     = sanitize_text_field( $_POST[\'name\'] );
      $headers  = \'From:\' . "\\r\\n"; // Sender\'s Email
      $headers .= \'Cc:\' . "\\r\\n"; // Carbon copy to Sender
      // Send mail
      wp_mail( \'PRIVATE-EMAIL-ADDRESS\', $subject, $message, $headers );
      // Show Message and hide the form
      _e( \'Your mail has been sent successfully ! Thank you for your feedback.\', \'your-text-domain\' ); 
      echo \'<style>#contact-form{ display: none; }</style>\';
    }
    
    ?>
    
    和html标记

    <form action="" id="contact-form" method="post">
      <div class="row">
        <div class="form-group">
          <div class="col-sm-6">
            <input class="form-control text-uppercase" type="text" placeholder="<?php _e( \'Enter dogs\\\'S name\', \'your-text-domain\' ); ?>" name="dname" required>
          <div class="col-sm-6">
            <input class="form-control text-uppercase" type="text" placeholder="<?php _e( \'Enter owner\\\'s name\', \'your-text-domain\' ); ?>" name="name" required>
          </div>
        </div>
      </div>
      <input type="submit" value="SUBMIT" />
      <input type="hidden" name="button_pressed" value="1" />
    </form>
    

    SO网友:Syed Fakhar Abbas

    我已经检查了你的代码。我认为标题定义不正确。请检查以下代码:

    $current_user  = wp_get_current_user();
    $name          = sanitize_text_field($_POST["name"]);
    $email_address = sanitize_email($_POST["email_address"]);
    $detail        = esc_textarea($_POST["detail"]);
    $message       = "Name : " . $name . "\\n";
    $message .= "Email Address : " . $email_address . "\\n";
    $message .= "Detail : " . $detail . "\\n";
    $send_to = \'[email protected]\';
    
    $headers = \'From: \' . $current_user->user_firstname . \' \' . $current_user->user_lastname . \' <[email protected]>\' . "\\r\\n";
    
    if (wp_mail($send_to, $email_subject, $message, $headers)) {
    
      wp_redirect(admin_url(\'admin.php?page=contact-page&msg=success\'));
    
      exit();
    } else {
    
      wp_redirect(admin_url(\'admin.php?page=contact-page&msg=failed\'));
    
      exit();
    }
    

    相关推荐

    在AWS实例上使用SMTP发送邮件(PHPMailer)?

    我将我的一个wordpress站点移动到了一个AWS实例。但一旦我开始工作,我注意到没有任何通知或联系电子邮件被发送。在研究这个问题时,我发现如果我将SMTP服务器设置为外部SMTP(我的AWS实例没有),它应该可以工作。我不需要从我的网站发送会员电子邮件,只需要联系表格。所以我尝试了两种不同的方法使用Configure SMTP 插件并将其配置为通过SMTP帐户路由所有电子邮件使用Custom Contact Forms 插件,指定SMTP设置,以便使用PHPMailer中的SMTP设置发送电子邮件这些