2016-11-30 3 views
-1

Иногда отправка писем происходит с функцией Mail::send PrestaShop. Я использую внешний почтовый сервер, и ответственный человек там сказал мне, что никакой запрос не был получен для отправки каких-либо писем (я нахожу это странным, хотя). Таким образом, я сделал небольшой регистратор, выполнив следующие действия:Отладка Swift Mailer в PrestaShop 1.6

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

The Mail::send возвращается false правильно. Теперь я хотел бы знать причину. Поэтому я хотел бы записать информацию о соединении в SwiftMailer. Может ли кто-нибудь дать мне какие-либо подсказки, как решить это в простой усадьбе (если не плагины SwiftMailer, если это возможно).

версия Swift Mailer: 3.3.2

ответ

2

Если вы установите $die параметров в true ты вызовешь, что остановка сценария и плохой опыт для клиента при покупке или администратора при изменении статуса заказа, и т.д. Вы должны проверить следующее:

  1. Проверьте, отправки электронной почты сбой по конкретному шаблону электронной почты. Если это правда, у вас может возникнуть проблема с структурой шаблона, переданными параметрами, рендерингом html и т. Д.
  2. Каждая ошибка внутри Mail::Send funtion зарегистрирована в журналах Prestashop. Поэтому вы должны проверить это там. Вы можете знать все возможные ошибки identifyng этого типа кода внутри функции Mail::Send: Tools::dieOrLog(Tools::displayError('Error: invalid SMTP server or SMTP port'), $die);
  3. Специфические исключения Swift регистрируются с помощью этого кода: PrestaShopLogger::addLog('Swift Error: ' . $e->getMessage(), 3, null, 'Swift_Message');, чтобы он также отображался в журналах Prestashop.
  4. Во всяком случае, Swift имеет свой собственный вход в систему Swift_Log_DefaultLog. Вы можете найти его на \tools\swift\Swift\Log\DefaultLog.php. Вы можете изменить функцию add или dump, чтобы сохранить журналы в определенном файле или аналогичном.

Удачи.

1

Set $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) 

В качестве альтернативы вы можете пойти в BackOffice и меню Advanced Parameters -> Logs, тип в фильтре сообщений: error и поиск результатов. Не гарантируется, что он покажет вам только ошибки электронной почты, но это сужает многое.

1

Невозможно сообщить причину отказа функции Mail :: send(). Это может быть несколько причин для отказа.

Есть 12 строк кода, в которых возвращается значение false в функции Mail :: send(), каждая из которых имеет другое условие. Вам нужно отладить функцию, чтобы найти точную причину.

Вы можете найти почту :: Send() функции в файле mail.php на /classes/Mail.php

Совет: Вы можете добавить журнал с каждым «вернуться ложным;» в функции, чтобы проверить, какая из них выполняется.

Смежные вопросы