Smtp и отпарвка писем нескольким пользователям

Здесь вам помогут решить проблемы, возникающие в процессе использования модуля TSVshop
John
Сообщения: 14
Зарегистрирован: 02 фев 2016, 10:10

Smtp и отпарвка писем нескольким пользователям

Сообщение John » 04 фев 2016, 07:33

1. Пробовал отправку по Smtp - не работает, настройки вбивал рабочие, т.к. проверял заранее. При заказе долго думает, после чего пишет сообщение об успешной отправке, однако письма не приходят.
2. Еще вопрос, как отправлять письма нескольким менеджерам, пробовал вставлять через запятую, письма тогда совсем не приходят.
3.Чем отличаются E-mail отправителя от E-mail для ответа? Если в них задавать разные адреса, то письма не приходят.
4.Т.к. адреса E-mail отправителя от E-mail для ответа одинаковые, то письма в Gmail почте приходят с заголовком Я, вместо заголовка в настройках.

admin
Администратор
Сообщения: 148
Зарегистрирован: 08 фев 2013, 13:53

Re: Smtp и отпарвка писем нескольким пользователям

Сообщение admin » 04 фев 2016, 10:55

Да, вопрос о письмах актуален из-за того, что в новых сборках MODx немного поменялся способ подключения phpmailer. Это обнаружилось совсем недавно, поэтому обновление только подготовлено, но не выпущено. Они будут доступны в версии 5.4., а пока я приведу код, который нужно вставить вместо старых функций.

Эти изменения решат вопросы 1,2,4

Итак, код следующий:1

1) В файле /assets/snippets/tsvshop/include/cart.inc.php вместо

Код: Выделить всё

if (!function_exists("tsv_sendMail")) {
    function tsv_sendMail($emails, $subject = '', $body, $isHTML = false)
    {
        global $modx, $session, $tsvshop, $shop_lang, $mail;
        $mail->ClearAddresses();
        $mail->ClearAttachments();
        $mail->Body = $body;
        $mail->isHTML($isHTML);
        $mail->CharSet  = $modx->config['modx_charset'];
        $mail->From     = $tsvshop['SmtpFromEmail'];
        $mail->FromName = $tsvshop['SmtpFromName'];
        $mail->Subject  = $subject;
       
        if ($tsvshop['MailMode'] == "smtp") {
            $mail->IsSMTP();
            $mail->Host     = $tsvshop['SmtpHost'];
            //$mail->SMTPDebug  = $__smtp['debug'];
            $mail->SMTPAuth = $tsvshop['SmtpAuth'];
            $mail->Port     = $tsvshop['SmtpPort'];
            $mail->Username = $tsvshop['SmtpUser'];
            $mail->Password = $tsvshop['SmtpPass'];
        } else {
            $mail->IsMail();
        }
       
        if (is_array($emails)) {
            foreach ($emails as $name => $email) {
                $name = (is_string($name)) ? $name : '';
                $mail->AddAddress($email, $name);
            }
        } elseif (is_string($emails)) {
            $mail->AddAddress($emails);
        }
        $mail->AddReplyTo($tsvshop['SmtpReplyEmail'], $tsvshop['SmtpFromName']);
        return ($mail->Send() ? true : false);
    }
}


нужно вставить

Код: Выделить всё

if (!function_exists("tsv_sendMail")) {
    function tsv_sendMail($emails, $subject = '', $body, $isHTML = false)
    {
        global $modx, $session, $tsvshop, $shop_lang, $mail;
          $modx->loadExtension('MODxMailer');
        $modx->mail->ClearAllRecipients();
        $modx->mail->ClearAttachments();
        $modx->mail->Body = $body;
        $modx->mail->isHTML($isHTML);
        $modx->mail->CharSet  = $modx->config['modx_charset'];
        $modx->mail->From     = $tsvshop['SmtpFromEmail'];
        $modx->mail->FromName = $tsvshop['SmtpFromName'];
        $modx->mail->Subject  = $subject;
       
        $emails = explode(",",$emails);
       
        if (is_array($emails)) {
            foreach ($emails as $name => $email) {
                $name = (is_string($name)) ? $name : '';
                $modx->mail->AddAddress($email, $name);
            }
        } elseif (is_string($emails)) {
            $modx->mail->AddAddress($emails);
        }
        $modx->mail->AddReplyTo($tsvshop['SmtpReplyEmail'], $tsvshop['SmtpFromName']);
        return ($modx->mail->Send() ? true : false);
    }
}


2) Файл /assets/snippets/tsvshop/admin/includes/core.inc.php

полностью удалить функцию send_mail - код начинается так:

Код: Выделить всё

if(!function_exists("send_mail")) {


и заменить ее этой:

Код: Выделить всё

if(!function_exists("send_mail"))
{
function send_mail($to, $subject, $content, $attach=false) {
   global $modx, $session, $tsvshop, $shop_lang, $mail;
   $modx->loadExtension('MODxMailer');
   $modx->mail->ClearAllRecipients();
     $modx->mail->ClearAttachments();
     $modx->mail->CharSet = $modx->config['modx_charset'];
   $modx->mail->IsHTML(true);

   try {
          $modx->mail->AddAddress($to); //кому письмо
      $modx->mail->From     = $tsvshop['SmtpFromEmail'];
            $modx->mail->FromName = $tsvshop['SmtpFromName'];
      
        $modx->mail->AddReplyTo($tsvshop['SmtpReplyEmail'], $tsvshop['SmtpFromName']);
        $modx->mail->Subject = htmlspecialchars($subject);
        $modx->mail->MsgHTML($content);
      if($attach) { 
        // проверяем, является ли переменная с именами прикрепляемых файлов массивом. Если да, то прикрепляем все файлы, иначе - один
        if (is_array($attach)) {
              foreach ($attach as $a) {
                  $modx->mail->AddAttachment($a);
              }
        } else {
          $modx->mail->AddAttachment($attach);
        }
        }
      return ($modx->mail->Send() ? true : false);
   } catch (phpmailerException $e) {
   } catch (Exception $e) {
   }
}


3) В файле /assets/snippets/tsvshop/addons/sales/includes/function.inc.php

полностью удалить функцию sendMailUpdate - она начинается так:

Код: Выделить всё

function sendMailUpdate($emails, $subject='', $body, $isHTML=false)


и заменить ее этой:

Код: Выделить всё

function sendMailUpdate($emails, $subject='', $body, $isHTML=false)
   {
    global $modx, $session, $tsvshop, $shop_lang, $mail;
    $modx->loadExtension('MODxMailer');
      $modx->mail->ClearAllRecipients();
    $modx->mail->ClearAttachments();
      $modx->mail->Body = $body;
      $modx->mail->isHTML($isHTML);
      $modx->mail->CharSet = $modx->config['modx_charset'];
      $modx->mail->From = $tsvshop['SmtpFromEmail'];
      $modx->mail->FromName = $tsvshop['SmtpFromName'];
      $modx->mail->Subject = $subject;
   
          $emails = explode(",",$emails);
      if(is_array($emails))
      {
         foreach($emails as $name => $email)
         {
            $name = (is_string($name)) ? $name : '';
            $modx->mail->AddAddress($email, $name);
         }
      }
      elseif(is_string($emails)) {
        $modx->mail->AddAddress($emails);
    }
     $modx->mail->AddReplyTo($tsvshop['SmtpReplyEmail'], $tsvshop['SmtpFromName']);
      
      return ($modx->mail->Send() ? true : false);
   }


Как уже сказал, эти изменения решат ваши вопросы 1,2,4.

Теперь все настройки почты беруться из конфигурации МОДх. Проигнорируйте настройки почты, которые идут в конфигурации модуля TSVshop (я имею ввиду настройки SMTP и т.д.) Все изменения вносите именно в конфиге МОДх. Все остальные поля для настройки почты актуальны (темы писем, адреса и т.д.).


Вопрос 3.
E-mail отправителя - это почта менеджера, которому приходит почта о новых заказах. Можно указывать несколько адресов через запятую (без пробелов). E-mail для ответа - это почта, которая будет фигурировать в качестве почты для ответа (если покупатель захочет написать ответ на письмо с заказом). Как правило, это одно и то же, но иногда могут указывать разные адреса. Это уже на усмотрение.

admin
Администратор
Сообщения: 148
Зарегистрирован: 08 фев 2013, 13:53

Re: Smtp и отпарвка писем нескольким пользователям

Сообщение admin » 04 фев 2016, 10:57

Еще раз хотел сказать, что эти изменения будут доступны в версии 5.4. Там также более корректно будет названо поле E-mail отправителя, а также удалены из конфига модуля все поля для настройки почты, которые теперь неактуальны.

John
Сообщения: 14
Зарегистрирован: 02 фев 2016, 10:10

Re: Smtp и отпарвка писем нескольким пользователям

Сообщение John » 04 фев 2016, 11:20

Спасибо

admin
Администратор
Сообщения: 148
Зарегистрирован: 08 фев 2013, 13:53

Re: Smtp и отпарвка писем нескольким пользователям

Сообщение admin » 04 фев 2016, 11:58

Пожалуйста :) По-возможности отпишите о результатах. Это поможет еще раз все протестировать.


Вернуться в «Решение проблем»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость