Приветствую! Сегодня я хочу рассказать о ошибках почты и как с ними бороться. Но сразу надо уточнить что ошибки эти актуальны для smtp а не для функции php mail(); Я думаю что нормальные магазины работают только с smtp - это безусловно лучше чем слать письма с сайта через стандартную функцию в php.
Для отправки почты в Opencart используется библиотека system/library/mail.php - и мы поговорим об ошибках которые могут возникать и способы их решения.
Все ошибки, которые могут быть при отправки почты
- Error: E-Mail to required
- Error: E-Mail from required
- Error: E-Mail sender required
- Error: E-Mail subject required
- Error: E-Mail message required
- Error: EHLO not accepted from server
- Error: STARTTLS not accepted from server
- Error: AUTH LOGIN not accepted from server
- Error: Username not accepted from server
- Error: Password not accepted from server
- Error: HELO not accepted from server
- Error: MAIL FROM not accepted from server
Error: E-Mail to required - это ошибка будет тогда, когда нет данных куда отправлять письмо, попросту либо почта не настроена в админке, либо форма не передает данные в библиотеку для отправки. Для исправления убедитесь что в скрипте отправки есть строка $mail->setTo где и должна быть переменная куда слать почту. Как правило это админ сайта.
Error: E-Mail from required - ошибка возникает когда пытаются отправить почту, но не указали от какого адреса отправлять. Это может быть из-за того что либо не указали почту, а нет валидации, либо скрипт неправильно настроен. Строка $mail->setFrom как раз отвечает за то от кого идет письмо.
Error: E-Mail sender required - все просто, не указано от кого отправка. Не путать с email from. Как раз от кого это и высвечивается на почте, сюда идет либо почта человека, либо его имя. Задать можно через $mail->setSender('От кого почта');
Error: E-Mail message required - пустое письмо. Для решения проблемы необходимо указать через $mail->setText или $mail->setHtml тело письма.
Error: EHLO not accepted from server - эта ошибка возникает при неправильных настройках почтового сервера. Часто надо просто указать перед почтовым сервером ssl:// или tls:// - это переводит отправку почты по защищенному протоколу. Также надо указать порт 465 иначе будет эта ошибка. Эти настройки есть в админке в настройка - вкладка почта.
Error: STARTTLS not accepted from server - ошибка tls -соединения. В таком случае надо смотреть на настройки и узнавать какой порт и настройки нужны для корректной работы через tls на почтовом сервере.
Error: AUTH LOGIN not accepted from server - неправильный логин. Смотрите настройки почты и почтового сервера.
Error: Username not accepted from server - неправильное ммя пользователя.
Error: Password not accepted from server - ошибка может быть из-за либо неправильного пароля, либо из-за не существующей почты. Это часто из-за того что на сервере почта еще не создана и письмо пытаемся отправить, либо пароль надо проверить с логином.
Error: HELO not accepted from server - некоторые хостинги блокирую работу по защищенному протоколу почты ssl по-этому либо надо разблокировать, либо перейти на 25 порт и без ssl:// или tls:// в начале smtp сервера
Error: MAIL FROM not accepted from server - самая частая ошибка возникающая при отправке почты с формы обратной связи. Лечится очень просто. Идем в файл catalog/controller/information/contact.php и строки
$mail->setTo($this->config->get('config_email'));
$mail->setFrom($this->request->post['email']);
$mail->setSender($this->request->post['name']);
меняем на эти
$mail->setTo($this->config->get('config_email')); //почта куда, как правило админ магазина
$mail->setFrom($this->config->get('config_mail_smtp_username')); //почта от кого, сюда идет логин в smtp
$mail->setSender(html_entity_decode($this->request->post['email'], ENT_QUOTES, 'UTF-8')); //это почта от кого придет письмо
$mail->setReplyTo($this->request->post['email']); //почта куда будет идти ответ в случае ответа на письмо
После правильной настройки smtp у нас почта как правило пойдет не в спам - а куда надо, мало того, когда мы нажмем ответить - ответ пойдет отправителю.