2016-11-30 95 views
-1

偶尔发送邮件失败,PrestaShop的Mail::send功能。我使用外部邮件服务器,那里的负责人告诉我,没有收到发送任何邮件的请求(但我觉得这很奇怪)。所以,我做了一个小记录器执行以下操作:在PrestaShop 1.6调试Swift邮件程序1.6

if (!Mail::send()) 
    // logging details here here.. 

Mail::send回报false正确。现在我想知道原因。因此我想在SwiftMailer中记录关于连接的信息。有人能给我任何线索如何以简单的庄园解决这个问题(如果可能的话,不要使用SwiftMailer插件)。

斯威夫特梅勒版本:3.3.2

回答

2

如果设置$die参数去true你将导致脚本停止,并为客户带来不良的体验,而购买和管理,同时改变订单状态,等您应检查以下内容:

  1. 检查电子邮件发送特定电子邮件模板失败。如果属实,则可能会遇到模板结构,传递的参数,HTML呈现等问题。
  2. 在Prestashop日志中记录Mail::Send函数中的每个错误。所以你应该在那里检查它。你可以知道每一个可能的错误identifyng这种代码内部功能Mail::SendTools::dieOrLog(Tools::displayError('Error: invalid SMTP server or SMTP port'), $die);
  3. 具体斯威夫特异常记录,此代码:PrestaShopLogger::addLog('Swift Error: ' . $e->getMessage(), 3, null, 'Swift_Message');所以它应该出现在的Prestashop日志了。
  4. 无论如何,Swift有他自己的登录类Swift_Log_DefaultLog。你可以在\tools\swift\Swift\Log\DefaultLog.php找到它。您可以修改adddump函数以将日志保存到特定文件或类似文件。

祝你好运。

1

设置$die参数真正显示错误。您将需要_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和搜索结果。不能保证它只会显示你的电子邮件错误,但它会缩小很多。

1

不可能告诉你Mail :: send()函数失败的原因。可能有多种原因导致失败。

有12行代码在Mail :: send()函数中返回false,每个代码都有不同的条件。您需要调试该函数才能找到确切的原因。

您可以在/classes/Mail.php

找到邮件发送::()函数Mail.php文件

提示:您可以添加日志,每一个“返回false;”函数中的语句来检查它们中的哪一个正在执行。