ModX & внешний SMTP сервер (Yandex)

Решил отказаться от почтового сервера на своем VDS в пользу внешнего от yandex.
Проблема в следующем. Есть сайт на modx, на котором нужно связать форму обратной связи (eForm) с smtp сервером yandex.
Каким образом это реализовать?

1 ответов


modx для отправки писем использует phpMailer.
Насколько я помню, в данном классе есть подобная реализация отправки через smtp.
Смотрим файл
assets/snippets/eform/eform.inc.php

Там есть строки


        # send abuse alert
          $mail = new PHPMailer();
          $mail->IsMail();
          $mail->IsHTML($isHtml);
          $mail->From    = $modx->config['emailsender'];
          $mail->FromName  = $modx->config['site_name'];
          $mail->Subject  = $_lang['ef_mail_abuse_subject'];
          $mail->Body    = $body;
          AddAddressToMailer($mail,"to",$modx->config['emailsender']);
          $mail->send(); //ignore mail errors in this case
 



Потом идем по ссылке http://phpmailer.worxware.com/index.php?pg=exampleasmtp и смотрим пример smtp авторизации в phpMailer.

Проще некуда :)
Заменить строку
$mail->IsMail();
на
$mail->IsSMTP();
и передаем все необходимые параметры для smtp

  $mail->SMTPAuth   = true;                  // enable SMTP authentication

  $mail->Host       = "mail.yourdomain.com"; // sets the SMTP server
  $mail->Port       = 26;                    // set the SMTP port for the GMAIL server
  $mail->Username   = "yourname@yourdomain"; // SMTP account username
  $mail->Password   = "yourpassword";        // SMTP account password

 

Не вышло. Ошибка:
"SMTP Error: Could not authenticate. Main mail: Программа не смогла отправить почтуSMTP Error: Could not authenticate."

вписал в новый class.phpmailer.php настройки своего SMTP сервера



public $Mailer = 'smtp';
public $Host = 'smtp.yandex.ru';
public $Port = 587;
public $SMTPSecure = 'tls';
public $SMTPAuth = true;
public $Username = 'no-reply@domen.ru';
public $Password = '----------';
 

далее нашёл в assets\snippets\eform\eform.inc.php строку

$mail->IsMail();
 
и заменил на

$mail->IsSMTP();
 
всего их там 5 штук.

После этих действий вылетала ошибка на строчке в class.smtp.php


// Begin encrypted connection
//if(!stream_socket_enable_crypto($this->smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
// return false;
// }
return true;
 

закоментил и собственно ошибка при отправке
"SMTP Error: Could not authenticate. Main mail: Программа не смогла отправить почтуSMTP Error: Could not authenticate."

Куда копать?


проблема решилась добавлением модуля php_openssl.dll.