Перейти к содержимому


Фото
* * * - - 1 голосов

проблема с e-mail оповещением о состоянии заказа


  • Чтобы отвечать, сперва войдите на форум
24 ответов в теме

#21 koteyka

koteyka

    Фрилансер

  • Пользователь
  • 1 345 сообщений
  • Программирование
  • Версия CMS:2.x
  • Откуда:Днепропетровск

Опубликовано 02.07.2017 - 09:14

Сейчас очень многие хосты закрывают отправку почты через функцию mail. Возникает необходимость перенастраивать отправку почты сайта через smtp. Это можно делать, как отдельными скриптами, так и редактируя MX и А записи в настройках сайта на хосте.

Не мешало бы и Пикусову реализовать возможность отправки почты через SMTP, учитывая, что хосты стали закрывать отправки по mail.



#22 Maksclub

Maksclub
  • Фрилансер
  • 1 397 сообщений
  • Дизайн, Программирование, Верстка, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 02.07.2017 - 13:52

Странно, что никто (в т.ч. я) не скинул готовые решения проблемы :)

http://forum.simplac...сторонний-smtp/

http://forum.simplac...ыла-через-stmp/



#23 ikurtov

ikurtov
  • Пользователь
  • 59 сообщений

Опубликовано 05.10.2017 - 10:36

По инструкциям выше - не получилось сделать, выдает ошибку! Может есть другие методы?



#24 voron

voron
  • Пользователь
  • 5 сообщений
  • Пользователь
  • Откуда:Москва

Опубликовано 28.05.2019 - 13:49

1. На сервере обязательно включите DKIM для почты.

2. В api/Notify.php нужно допилить функции отправки. Я уже много чего там докрутил, поэтому приложу сами функции.

Системы антиспама блокируют письма, адрес которых не совпадает с доменом отправки. Поэтому в функции email добавляем reply_to чтобы ответное письмо от клиента пришло на ящик, указанный в настройках:

public function email($to, $subject, $message, $from = '', $reply_to = '') {
        $headers = "MIME-Version: 1.0\n" ;
        $headers .= "Content-type: text/html; charset=utf-8; \r\n";
        $headers .= "From: $from\r\n";
        if(!empty($reply_to)) {
            $headers .= "reply-to: $reply_to\r\n";
        } else {
            $headers .= "reply-to: $from\r\n";
        }
        $subject = "=?utf-8?B?".base64_encode($subject)."?=";
        @mail($to, $subject, $message, $headers);
    }

Функции отправки письма клиенту должны указывать доменную почту независимо от того существует она или нет. Указываем ящик noreply@ваш домен. Для этого делаем замену блоков кода, начинающихся с комментария // Отправляем письмо

// Отправляем письмо админу
$email_template не трогаем
$subject не трогаем
$from = ($this->settings->notify_from_name ? $this->settings->notify_from_name. "<noreply@".$_SERVER['HTTP_HOST'].">" : "<noreply@".$_SERVER['HTTP_HOST'].">");
$reply_to = $order->email;
$this->email($this->settings->order_email, $subject, $email_template, $from, $reply_to);

Остальное по аналогии.

Эти манипуляции нужно также сделать в файле api/Callback для форм обратного звонка.


Изменено: voron, 28.05.2019 - 13:53


#25 ABSORBER

ABSORBER
  • Модератор
  • 491 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Хабаровск

Опубликовано 28.05.2019 - 16:27

1. На сервере обязательно включите DKIM для почты.

2. В api/Notify.php нужно допилить функции отправки. Я уже много чего там докрутил, поэтому приложу сами функции.

Системы антиспама блокируют письма, адрес которых не совпадает с доменом отправки. Поэтому в функции email добавляем reply_to чтобы ответное письмо от клиента пришло на ящик, указанный в настройках:

public function email($to, $subject, $message, $from = '', $reply_to = '') {
        $headers = "MIME-Version: 1.0\n" ;
        $headers .= "Content-type: text/html; charset=utf-8; \r\n";
        $headers .= "From: $from\r\n";
        if(!empty($reply_to)) {
            $headers .= "reply-to: $reply_to\r\n";
        } else {
            $headers .= "reply-to: $from\r\n";
        }
        $subject = "=?utf-8?B?".base64_encode($subject)."?=";
        @mail($to, $subject, $message, $headers);
    }

Функции отправки письма клиенту должны указывать доменную почту независимо от того существует она или нет. Указываем ящик noreply@ваш домен. Для этого делаем замену блоков кода, начинающихся с комментария // Отправляем письмо

// Отправляем письмо админу
$email_template не трогаем
$subject не трогаем
$from = ($this->settings->notify_from_name ? $this->settings->notify_from_name. "<noreply@".$_SERVER['HTTP_HOST'].">" : "<noreply@".$_SERVER['HTTP_HOST'].">");
$reply_to = $order->email;
$this->email($this->settings->order_email, $subject, $email_template, $from, $reply_to);

Остальное по аналогии.

Эти манипуляции нужно также сделать в файле api/Callback для форм обратного звонка.

Гораздо проще использовать SMTP






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых