OpenCart – не отправлять электронные письма (уведомления или контактную страницу)

Насколько я могу судить, настройки почты настроены правильно, но я не получаю никаких писем, а не через контактную форму, а также для новых клиентов или любых размещенных заказов.

Вот мои текущие настройки:

введите описание изображения здесь

Я пробовал:

  1. Переходя к SMTP, я получаю сообщение об ошибке, и мой хост (IXWebHosting) говорит, что мне нужно отключить авторизацию в приложении, и я не вижу возможности для этого

  2. Добавление -f и -F перед адресом электронной почты, как предлагается здесь

  3. Добавление разных писем в поле «также отправить» в нижней части страницы «Почта»

  4. Ручное определение заголовка «From» в коде, как предлагается здесь.

  5. Tried @ gmail.com, @ googlemail.com и @ arabel.co.uk

И, к сожалению, я все еще не получаю никаких писем от OpenCart. Я связался с моим хостом и запускал тестовые скрипты – нет проблем с почтовой функцией или настройкой на сервере, и я только что загрузил последнюю версию mail.php из OpenCart (хотя это шесть месяцев и тот, который я использовал)

благодаря

ОБНОВИТЬ:

Похоже, что base64_encode не работает, потому что этот код:

echo $header = 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline; die(); 

Вывод:

From: =? UTF-8? B? Tmljaw ==? =

Не совсем уверен, почему кодировка base 64 должна быть честной. Откройте system/library/mail.php и измените эту строку

 echo $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline; 

в

 $header .= 'From: ' . $this->sender . ' <' . $this->from . '>' . $this->newline; 

У меня было действительно большое расстройство с этим.

Проблема на самом деле с вашим сервером … Если вы используете почтовый вариант, вам нужно настроить почтовый сервер на своем локальном хосте. Но вопрос в том, что ваш интернет-провайдер поддерживает 25 портов для smtp. Если нет, то у вас проблемы.

Второй вариант – использовать gmail smtp или hotmail smtp. Я пробовал и терпел неудачу. Я не знаю, почему gmail не работает для меня, но я googled весь интернет, и выяснил, что у людей случайным образом есть проблемы с gmail.

Я искал и пробовал последнее средство .. smtp от моего isp. Я использовал SMTP моего провайдера и установил опцию на SMTP, узнал, что работает.

Я позвонил своему интернет-провайдеру, и они не знали, почему gmail не работает, но они сказали мне, что они закрыли 25 портов, чтобы спамеры не могли отправлять почту с вашим именем пользователя.

TL, DR: Попробуйте свой собственный isp smtp, если вы работаете на localhost, если не попросите своего хостинг-провайдера исправить что-то для вас 🙂

PS: Вы не можете отключить авторизацию. У превентивных версий opencart не было разрешения, что смешно, почему они не добавили опции для выбора с авторизацией или без нее.

Если вы знаете кодирование, вы можете редактировать класс почты в opencart, если это не так, ваше единственное решение – использовать ваш SMTP-провайдер или перейти на хостинг, на котором установлен его почтовый сервер с авторизацией smtp (которую нетрудно настроить даже для вашего текущего хостинг).

Попробуйте добавить несколько адресов электронной почты в меню настроек вашего сайта. (администрирование сайта).

Это сработало для нас, в OpenCart версии 1.5.5.3.

введите описание изображения здесь

Я пробовал все возможные исправления, бит не работал для меня (я размещен на Site5, на Webfaction он работал). Я закончил переписывать функцию send () в файле system / library / mail.php, используя SwiftMailer. Я установил каталог system / library / swiftmailer. Мой код не является полным, потому что он предполагает, что аутентификация всегда необходима, но это должно быть легко исправить.

 public function send() { require_once(DIR_SYSTEM . 'library/swiftmailer/swift_required.php'); if (!$this->to) { trigger_error('Error: E-Mail to required!'); exit(); } if (!$this->from) { trigger_error('Error: E-Mail from required!'); exit(); } if (!$this->sender) { trigger_error('Error: E-Mail sender required!'); exit(); } if (!$this->subject) { trigger_error('Error: E-Mail subject required!'); exit(); } if ((!$this->text) && (!$this->html)) { trigger_error('Error: E-Mail message required!'); exit(); } if (is_array($this->to)) { $to = implode(',', $this->to); } else { $to = $this->to; } $message = Swift_Message::newInstance() ->setSubject($this->subject) ->setFrom(array($this->from => $this->sender)) ->setTo(array($to)) ->setBody($this->text); if($this->html){ $message->addPart($this->html, 'text/html'); } foreach ($this->attachments as $attachment) { if (file_exists($attachment)) { $message->attach(Swift_Attachment::fromPath($attachment)); } } $transport = Swift_SmtpTransport::newInstance('localhost', 25) ->setUsername($this->username) ->setPassword($this->password); $mailer = Swift_Mailer::newInstance($transport); $mailer->send($message); } 

Решение для меня состояло в том, что сообщения электронной почты не могли быть отправлены моим сервером, когда у них был домен в «от», который был не таким же, как у хоста.

Это было ясно, потому что, когда я заполнил test@mydomain.com в контактной форме, он работает, а также регулярно поступают электронные письма.

Чтобы заставить почту отправляться с моего собственного хоста вместо заполненного адреса электронной почты, я редактировал контроллер контакта.

Не продолжайте это, если вы не знаете, как редактировать исходный код, я оставляю несколько простых шагов. Если вы не знаете этих шагов, не спрашивайте, а попросите профессионала посмотреть это. (Только для вашей собственной защиты)

Файл: catalog/controller/information/contact.php

Индекс функции, для меня в строке 21:

ОРИГИНАЛ:

 $mail->setFrom($this->request->post['email']); 

NEW:

 $mail->setFrom($this->config->get('config_email')); $mail->setReplyTo($this->request->post['email']); 

Это решило это для меня.