偶尔使用PrestaShop的Mail::send
功能发送邮件失败。我使用外部邮件服务器,那里的负责人告诉我没有收到发送任何邮件的请求(我发现这很奇怪)。所以,我做了一个小记录器,做了以下事情:
if ( !Mail::send() )
// logging details here here..
Mail::send
正确返回false
。现在我想知道原因。因此,我想在SwiftMailer中记录有关连接的信息。有人可以给我一些线索如何在一个简单的庄园中解决这个问题(如果可能的话,不要使用SwiftMailer插件)。
Swift Mailer版本:3.3.2
答案 0 :(得分:2)
如果您将$die
param设置为true
,那么在更改订单状态等时,您将导致该脚本停止并在购买或管理时为客户带来糟糕的体验。您应该检查以下内容:
Mail::Send
功能中的每个错误。所以你应该在那里检查一下。您可以知道在函数Mail::Send
中识别此类代码的每个可能错误:Tools::dieOrLog(Tools::displayError('Error: invalid SMTP server or SMTP port'), $die);
PrestaShopLogger::addLog('Swift Error: ' . $e->getMessage(), 3, null, 'Swift_Message');
因此它也应出现在Prestashop日志中。Swift_Log_DefaultLog
。您可以在\tools\swift\Swift\Log\DefaultLog.php
找到它。您可以修改add
或dump
函数以将日志保存到特定文件或类似文件。答案 1 :(得分:1)
将$die
参数设置为true以显示错误。您需要_PS_MODE_DEV_
设置为true
才能看到它。
/**
* Send Email
*
* @param int $id_lang Language ID of the email (to translate the template)
* @param string $template Template: the name of template not be a var but a string !
* @param string $subject Subject of the email
* @param string $template_vars Template variables for the email
* @param string $to To email
* @param string $to_name To name
* @param string $from From email
* @param string $from_name To email
* @param array $file_attachment Array with three parameters (content, mime and name). You can use an array of array to attach multiple files
* @param bool $mode_smtp SMTP mode (deprecated)
* @param string $template_path Template path
* @param bool $die Die after error
* @param string $bcc Bcc recipient
* @return bool|int Whether sending was successful. If not at all, false, otherwise amount of recipients succeeded.
*/
public static function Send($id_lang, $template, $subject, $template_vars, $to,
$to_name = null, $from = null, $from_name = null, $file_attachment = null, $mode_smtp = null,
$template_path = _PS_MAIL_DIR_, $die = false, $id_shop = null, $bcc = null, $reply_to = null)
或者,您可以转到后台和菜单Advanced Parameters -> Logs
,输入消息过滤器:error
并搜索结果。它不能保证它只会向您显示电子邮件错误,但它会将其缩小很多。
答案 2 :(得分:0)
无法告诉您Mail :: send()函数失败的原因。失败可能有多种原因。
有12行代码在Mail :: send()函数中返回false,每行都有不同的条件。您需要调试函数以找到确切的原因。
你可以在/classes/Mail.php的Mail.php文件中找到Mail :: send()函数
提示:您可以添加每个'返回false的日志;'函数中的语句,用于检查哪些语句正在执行。