PHP mail()没有发送,但没有抛出异常

时间:2012-02-23 09:02:48

标签: cakephp smtp cakephp-2.0 php

我正在使用CakePHP发送电子邮件。我的控制器代码如下:

        if ($this->User->save($this->request->data)) {
            $email = new CakeEmail();
            $email->from(array('noreply@mydomain.com' => 'My Domain'));
            $email->to($this->request->data['User']['email']);
            $email->subject('My Domain Confirmation');
            $email->replyTo('noreply@mydomain.com');
            $email->sender('noreply@mydomain.com', 'My Domain');
            $email->emailFormat('html');
            $email->template('confirmation');
            $email->send();
            $email->viewVars(array(
                'name' => $this->request->data['User']['username'],
                'id' => $this->User->getLastInsertID(),
                'code' => $this->request->data['User']['confirm_code']));
        }

我还包含在此控制器的顶部: App::uses('CakeEmail', 'Network/Email');

如果我在$ email-> send()上打印__,我得到:

Array
(
    [headers] => From: My Domain
Reply-To: noreply@mydomain.com
X-Mailer: CakePHP Email
Date: Thu, 23 Feb 2012 00:40:00 -0800
Message-ID: <4f45fb60a0fc46cd926f305a32396397@mydomain.com>
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit
    [message] => 



    Hi there,


Welcome to my site! While you can now vote on submissions and leave comments, your own submissions will be screened and not appear to the public until you click on the confirmation link below:

Click here to confirm your account

We hope to see you around and thanks for joining the community!

所以它显然是使用我的HTML电子邮件模板并将正确的变量传递给它,并且没有抛出异常。所以我决定在我的一个视图文件中进行基本的mail()测试,例如:

$to = "mytestemail@example.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "someonelse@example.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>

其中回复了“Mail Sent。”,但实际上没有任何内容进入我的邮箱。我在/var/spool/mail/root检查了我的文件,发送的最后一封电子邮件是在2012年1月9日发送到同一台服务器上的。所以它之前肯定有效。我刚刚升级到Cake 2.0,但这并不能解释为什么普通的'mail()无效。

我可以检查哪些其他调试方法以确保不是我的服务器阻止发送电子邮件?

3 个答案:

答案 0 :(得分:1)

PHP的mail()不会抛出任何异常。您需要检查返回状态。如果这是错误的,那么您的MTA不接受邮件。即使它返回true,that doesn't actually mean much of anything

查看/ var / log /中的邮件日志。希望这些可以帮助你找到更多。

答案 1 :(得分:0)

还要检查防火墙设置。有时,如果不是来自特定来源,它会停止所有传出的smtp请求。

答案 2 :(得分:0)

运行Cake应用程序的服务器可能需要(SMTP)身份验证,然后才允许您发送任何内容,这是一种非常常见的配置。

app/Config/email.php.default文件复制到app/Config/email.php并进行调整以匹配您的设置(通常只是本地主机,您可以使用其中一个邮箱登录进行身份验证)。

另请参阅the book有关此主题的内容。