2012-02-23 73 views
0

我正在使用CakePHP发送电子邮件。我的控制器代码如下所示:PHP邮件()不发送,但不会抛出异常

 if ($this->User->save($this->request->data)) { 
      $email = new CakeEmail(); 
      $email->from(array('[email protected]' => 'My Domain')); 
      $email->to($this->request->data['User']['email']); 
      $email->subject('My Domain Confirmation'); 
      $email->replyTo('[email protected]'); 
      $email->sender('[email protected]', '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');

如果我的print_r对$的电子邮件 - >发送(),我得到:

Array 
(
    [headers] => From: My Domain 
Reply-To: [email protected] 
X-Mailer: CakePHP Email 
Date: Thu, 23 Feb 2012 00:40:00 -0800 
Message-ID: <[email protected]> 
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电子邮件模板并将正确的变量传递给它,并且不会抛出异常。所以我决定只是做我的视图文件例如为:

$to = "myte[email protected]"; 
$subject = "Test mail"; 
$message = "Hello! This is a simple email message."; 
$from = "[email protected]"; 
$headers = "From:" . $from; 
mail($to,$subject,$message,$headers); 
echo "Mail Sent."; 
?> 

哪一个呼应内的基本的邮件()测试“已发送邮件”,但没有实际来我的邮箱。我在/var/spool/mail/root中检查了我的文件,并且2012年1月9日发送的最后一封电子邮件在同一台服务器上。所以它绝对有效。我刚刚升级到Cake 2.0,但这并不能解释为什么普通ol'mail()不起作用。

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

+0

您的MTA是否正在运行?如果没有,你会看到这种行为(和所有的邮件发送,当你启动它) – 2012-02-23 09:08:05

+0

有一个在Apache错误日志(但如果它在那里你应该看到它),并在邮件错误日志 – Mike 2012-02-23 09:09:45

+1

检查你的apache日志,也让你添加在你的PHP文件的顶部'ini_set('display_errors','On'); error_reporting(E_ALL);'以确保你也得到通知和警告。 – 2012-02-23 09:17:14

回答

1

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

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

0

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

0

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

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

另请参阅the book关于此主题。

+0

奇怪的是,这台服务器一直在发送来自其他文件夹的邮件(这是一个承载多个网站的VPS)。我只是检查,看看其他网站是否仍然可以发送邮件,而不是任何东西。很奇怪。这就像它关闭或什么。我认为这个问题源于MTA未被设置(即使我认为它是)。 – 2012-02-24 00:03:40