OpenCart - не отправлять электронные письма (уведомления или контактную страницу)
Насколько я могу судить, мои почтовые настройки настроены правильно, но я не получаю никаких писем, ни через контактную форму, ни для новых клиентов, ни для любых размещенных заказов.
Вот мои текущие настройки:
Я пробовал:
При переходе на SMTP я получаю сообщение об ошибке, и мой хост (IXWebHosting) говорит, что мне нужно отключить авторизацию в приложении, и я не вижу опции для этого
Добавление -f и -F перед электронным письмом, как предлагается здесь
Добавление различных писем в поле "также отправить" внизу страницы почты
Определение заголовка "From" вручную в коде, как предлагается здесь
Пробовал @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();
Выводы это:
От: =?UTF-8?B?Tmljaw==?=
5 ответов
Не совсем уверен, почему кодировка 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;
Попробуйте добавить несколько адресов электронной почты в меню настроек вашего сайта. (администрация сайта).
У нас это работало, в OpenCart версии 1.5.5.3.
У меня было очень большое разочарование по этому поводу..
Проблема действительно в вашем сервере... Если вы используете опцию mail, то вам нужно настроить почтовый сервер на вашем локальном хосте. Но вопрос в том, поддерживает ли ваш провайдер 25 портов для SMTP. Если нет, то у вас есть проблемы.
Второй вариант - использовать gmail smtp или hotmail smtp. Я пытался и с треском провалился.. Я не знаю, почему у меня не работает gmail, но я погуглил весь интернет и обнаружил, что у людей случайно возникают проблемы с gmail.
Я искал и пытался в крайнем случае.. SMTP из моего ISP. Я использовал SMTP моего провайдера и установил опцию на SMTP, выяснил, что все работает.
Я позвонил своему провайдеру, и они не знали, почему не работает gmail, но сказали, что закрыли 25 портов, чтобы спаммеры не могли отправлять почту с вашим именем пользователя.
TL, DR: попробуйте собственный ISP SMTP, если вы работаете на localhost, если нет, то попросите своего хостинг-провайдера исправить ситуацию для вас:)
PS: Вы не можете отключить авторизацию. Предыдущие версии opencart не имели авторизации, что забавно, почему они не добавили возможность выбора с авторизацией или без нее.
Если вы знаете кодирование, вы можете редактировать почтовый класс в opencart, если нет, то ваше единственное решение - использовать ваш провайдер smtp или перейти на хостинг, на котором почтовый сервер настроен с авторизацией smtp (что нетрудно настроить даже для вашего текущего хостинг).
Решение для меня заключалось в том, что мой сервер не мог отправлять электронные письма, когда у них был домен в "от", который отличался от хоста.
Это было ясно, потому что, когда я заполнил 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']);
Это решило это для меня.
Я перепробовал все возможные исправления, но ни один из них не работал для меня (я размещен на 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);
}