PHP邮件没有';删除调试代码时不发送电子邮件


PHP mailer doesn't send emails when debug code is removed

我有一个函数,可以在提交表单时发送电子邮件。此函数包含以下if语句:

if ($guestDetails) 
{
  $mailer->addRecipient($guestDetails->email);
  $mailer->addCC( $config->get('emails_admin_email'));
  $mailer->setSubject( $subject );
  $mailer->setBody($template_layout);
  $mailer->IsHTML($mode);          
  $mailer->setSender(array( $mailfrom, $fromname ));
  $sent = $mailer->send();
}

最近,此功能已停止工作(即不再发送电子邮件)。为了调查发生了什么,我修改了代码来记录一些变量,因为PHP错误日志中没有记录任何内容。下面是if语句现在的样子:

$testArr = array();
ClassName::_log_r("guestdetails", $guestDetails);
if ($guestDetails) 
{
  ClassName::_log_r("got into if", $testArr);
  $mailer->addRecipient($guestDetails->email);
  $mailer->addCC( $config->get('emails_admin_email'));
  $mailer->setSubject( $subject );
  $mailer->setBody($template_layout);
  $mailer->IsHTML($mode);          
  $mailer->setSender(array( $mailfrom, $fromname ));
  $sent = $mailer->send();
  ClassName::_log_r("mailer", $mailer);
  ClassName::_log_r("sent", $sent);
} else
  ClassName::_log_r("got into else", $testArr);

_log_r只是一个将给定变量的内容写入文本文件的函数。一旦我添加了这个"调试"代码,电子邮件就开始再次发送,日志正确地记录了"进入if"。删除前面提到的调试代码会阻止电子邮件再次发送。

我对这里可能发生的事情感到困惑。有人遇到过这样的事情吗?为什么删除调试代码时不发送电子邮件?如果需要更多信息,请告诉我。谢谢

PS代码是用PHP编写的,服务器运行PHP 5.3.10

脑海中唯一可能的答案是,无论出于何种原因,$guestDetails都不再定义(例如,它在其他地方被重命名为$guestDetail)。

如果参数不存在,这还需要_log_r函数来重新定义参数。

如果你只检查发送到CC:的邮件,它们就会到达——无效的$guestDetails可能不会阻止这个过程的完成。实际上,只会生成给管理员的电子邮件。

试试之类的东西

if (!defined($guestDetails))
    ClassName::_log_r("mailer", "Not defined");
if (empty($guestDetails))
    ClassName::_log_r("mailer", "empty");

看看是否可以担心更多的细节。

不要使用_log_r进行日志记录,而是尝试捕获邮件异常,并检查是否能获得有关正在发生的事情的更好信息:

if ($guestDetails) 
{
    try
    {
        $mailer->addRecipient($guestDetails->email);
        $mailer->addCC( $config->get('emails_admin_email'));
        $mailer->setSubject( $subject );
        $mailer->setBody($template_layout);
        $mailer->IsHTML($mode);          
        $mailer->setSender(array( $mailfrom, $fromname ));
        $sent = $mailer->send();
    } 
    catch (phpmailerException $e) 
    {
        echo $e->errorMessage(); //you could do a _log_r here..
    } 
    catch (Exception $e) 
    {
        echo $e->getMessage(); //or here..
    } 
}
else
{
    echo "guestDetails empty!"; //or here..
}