Amazon SES ЗАПУСКАЕТ SMTP и ExpressionEngine

Я пытаюсь отправить почту, используя Amazon SES SMTP с STARTTLS в ExpressionEngine. Я сталкиваюсь с ошибкой ниже.

Я не уверен, почему он жалуется, что не может отправить команду AUTH LOGIN до команды STARTTLS — STARTTLS явно уже отправлен. Я пробовал все, что мог придумать, и был бы признателен, если бы кто-нибудь указал мне правильное направление.


220 email-smtp.amazonaws.com ESMTP SimpleEmailService-376766033

привет: 250-email-smtp.amazonaws.com

250-8БИТИМИМ

250-РАЗМЕР 10485760

250-STARTTLS

250-AUTH ОБЫЧНЫЙ ВХОД

250 Ok

Не удалось отправить команду AUTH LOGIN. Ошибка: 530 Сначала необходимо выполнить команду STARTTLS

от: 530 Требуется аутентификация

Обнаружена следующая ошибка SMTP: 530 Требуется аутентификация.

to: 503 Ошибка: нужна команда MAIL

Обнаружена следующая ошибка SMTP: 503 Ошибка: нужна команда MAIL.

данные: 503 Ошибка: нужна команда MAIL

Обнаружена следующая ошибка SMTP: 503 Ошибка: нужна команда MAIL.

500 Ошибка: команда не реализована

Обнаружена следующая ошибка SMTP: 500 Ошибка: команда не реализована

Невозможно отправить электронную почту с помощью PHP SMTP. Возможно, ваш сервер не настроен для отправки почты с использованием этого метода.


person Lemon    schedule 31.05.2013    source источник


Ответы (2)


Вот правильное исправление.

Это два шага (вы можете смело игнорировать объяснения, если хотите) и не требует редактирования каких-либо файлов Expression Engine, не относящихся к конфигурации, поэтому вы не нарушаете путь обновления.

Он был протестирован на двух установках Expression Engine (каждая версия 2.5.3 — дата сборки: 20120911), и он работает отлично.

ШАГ 1 из 2. Вручную отредактируйте файл {INSTALLDIR}/expressionengine/config/config.php и добавьте в конце следующие три строки:

/* These email configuration variables are required for Amazon SES */
$config['email_smtp_crypto'] = 'tls'; // TLS protocol
$config['email_newline'] = "\r\n"; // SES hangs with just \n

Объяснение. В первой строке для шифрования электронной почты по умолчанию задается TLS (требуется SES). Вторая строка изменяет символ новой строки электронной почты с "\n" по умолчанию в Expression Engine на RFC 822 соответствует "\r\n" (что также требуется для SES).

ШАГ 2 из 2. Через администратора EE перейдите в «Администратор -> Конфигурация электронной почты» и установите следующие параметры:

  • Протокол электронной почты: SMTP
  • Адрес SMTP-сервера: tls://YOUR-SES-SMTP-SERVER:YOUR-SES-SMTP-PORT (крайне важной частью является tls:// перед адресом)
  • Имя пользователя SMTP: ваше имя пользователя SES SMTP.
  • Пароль SMTP: ваш пароль SMTP SES.

Объяснение. Если у вас есть подтвержденный адрес электронной почты отправителя SES и вам предоставлен производственный доступ к Amazon SES (оба действия необходимо выполнить через консоль управления Amazon SES), вы можете создать учетную запись AWS с учетными данными SMTP через консоль управления SES. При этом Amazon SES предоставит вам собственные учетные данные.

Например, это должно выглядеть так (с дурацкими именами пользователей и паролями):

  • ПРИМЕР Адрес SMTP-сервера: tls://email-smtp.us-east-1.amazonaws.com:465
  • ПРИМЕР Имя пользователя SMTP: QSKHFTQMSQAKIAIJ6GFY
  • ПРИМЕР Пароль SMTP: PeNqC2be3IAbNyhHddTbujwekIKoQE2dAhwr3FVzObjH

Чтобы проверить это через администратора EE, перейдите в «Инструменты» -> «Общение» и отправьте электронное письмо.

person Matt Pavelle    schedule 11.08.2013

Вот мое исправление. У меня не было времени понять, почему это работает, но поделитесь, если у вас есть время.

В вашем конфигурационном файле EE добавьте следующие настройки (две настройки tls, так как есть несколько примеров работы???):

/* SMTP mail settings
-------------------------------------------------------------------*/
$config['mail_protocol'] = "smtp";
$config['email_smtp_crypto'] = "tls";
$config['smtp_crypto'] = "tls";
$config['smtp_server'] = "AWS-SMTP-ADDRESS";
$config['smtp_username'] = "AWS-SMTP-USERNAME";
$config['smtp_password'] = "AWS-SMTP-PASSWORD";
$config['smtp_port'] = "465";
$config['smtp_timeout'] = 30;
$config['email_crlf'] = "\r\n"; 
$config['email_newline'] = "\r\n";

Затем измените класс Codeigniter Email.php, как в этом сообщении: http://ellislab.com/forums/viewthread/158882/

Единственный вариант, который я сделал, это установить $starttls = TRUE по умолчанию.

var $starttls       = TRUE;
person Seb    schedule 03.06.2013
comment
Вам действительно не следует жестко программировать и переопределять параметры конфигурации, доступные через администратора, такие как $ config ['smtp_server'], $ config ['smtp_username'] и т. д. Также мне не повезло сделать эту работу с помощью жесткого кодирования переменная $starttls - на самом деле grep источника нигде не показывал, что переменная starttls используется. - person Matt Pavelle; 11.08.2013