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