为什么wp_mail()函数没有发送任何电子邮件并在Chrome“网络”响应中显示“0”

时间:2015-02-27 10:52:12

标签: php wordpress

我尝试使用wp_mail()函数通过wordpress发送电子邮件,但它似乎无法正常工作。

它在Chrome'网络'中显示0响应 与

Status Code:200 OK

enter image description here

这是我的代码部分:

// Contact form  Ajax 

add_action('wp_ajax_nopriv_submit_contact_form', 'submit_contact_form'); 

function submit_contact_form(){

    if(isset($_POST['email'])) {

        $email = $_POST['email'];       
        $email_to = "info@company.com";

        $host = "ssl://smtp.gmail.com:465";
        $username = 'myEmail@company.pro';
        $password = 'passpass';

        $email_subject = "You have a new email from $email via company.com website";
        $message = $_POST['text']; 

        $headers = array ('From' => $email, 'To' => $email_to,'Subject' => $email_subject);
        /*$smtp = Mail::factory('smtp',
          array ('host' => $host,
            'auth' => true,
            'username' => $username,
            'password' => $password));*/

        //$mail = $smtp->send($email_to, $headers, $message);

        wp_mail( $email_to, $email_subject, $message );

        /*if (PEAR::isError($mail)) {
          echo($mail->getMessage());
        } else {
          echo("Message successfully sent!\n");
        }*/
    }
}





error_reporting(E_ALL);
ini_set("display_errors", 1);

哪个部分可能出错?

1 个答案:

答案 0 :(得分:1)

我会将此作为正式答案发布:

你应该检查两件事:

1)响应为0,因为您没有返回任何内容。你应该返回一个ajax响应,通常json_encoding你的请求这样有帮助:

 if(wp_mail($email_to,$email_subject,$message)) {
   echo json_encode(array("result"=>"complete"));
 } else {
   echo json_encode(array("result"=>"mail_error"));
 }
 wp_die();`

2)并非所有wordpress / server配置都允许默认的Wordpress wp_mail函数发送邮件。当然,当在本地(主机)服务器上进行测试时,许多ISP会阻止默认的外发邮件流量(在另一个问题中,我注意到你正在使用SMTP邮件功能)。有时阻塞会继续进行,因此看起来一切正常,但邮件永远不会被发送。有助于安装WP Mail SMTP plugin(或类似),以便您可以配置外发SMTP服务器(使用或不使用身份验证)。