0

我有一个在提交表单时发送电子邮件的功能。此函数包含以下 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

4

2 回答 2

1

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

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

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

尝试类似的东西

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

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

于 2012-08-22T16:19:18.980 回答
1

_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..
}
于 2012-08-22T16:40:48.693 回答