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

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

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

Я пробовал:

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

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

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

  4. Определение заголовка "From" вручную в коде, как предлагается здесь

  5. Пробовал @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);
}
Другие вопросы по тегам