1

我正在尝试使用 Amazon SES SMTP 和 ExpressionEngine 中的 STARTTLS 发送邮件。我遇到以下错误。

我不确定为什么它抱怨它不能在 STARTTLS 命令之前发送 AUTH LOGIN 命令 - 显然已经发送了 STARTTLS。我已经尝试了我能想到的一切,如果有人能指出我正确的方向,我将不胜感激。


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

你好:250-email-smtp.amazonaws.com

250-8BITMIME

250 尺寸 10485760

250-STARTTLS

250-AUTH 普通登录

250 好的

发送 AUTH LOGIN 命令失败。错误:530 必须先发出 STARTTLS 命令

来自:530 需要身份验证

遇到以下 SMTP 错误:530 需要身份验证

至:503 错误:需要 MAIL 命令

遇到以下 SMTP 错误:503 错误:需要 MAIL 命令

数据:503 错误:需要 MAIL 命令

遇到以下 SMTP 错误:503 错误:需要 MAIL 命令

500 错误:命令未执行

遇到以下 SMTP 错误:500 错误:未执行命令

无法使用 PHP SMTP 发送电子邮件。您的服务器可能未配置为使用此方法发送邮件。

4

2 回答 2

4

这是一个适当的修复。

这是两个步骤(如果需要,您可以放心地忽略说明)并且不涉及编辑任何非配置表达式引擎文件,因此您不会破坏升级路径。

它已经在两个 Expression Engine 安装(每个 v2.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”更改为符合RFC 822的“\r\n”(SES 也需要)。

第 2 步(共 2 步):通过您的 EE 管理员,转到“管理员 -> 电子邮件配置”并设置以下内容:

  • 电子邮件协议:SMTP
  • SMTP 服务器地址:tls://YOUR-SES-SMTP-SERVER:YOUR-SES-SMTP-PORT (非常重要的部分是地址前面的 tls://)
  • SMTP 用户名:您的 SES SMTP 用户名
  • SMTP 密码:您的 SES SMTP 密码

说明:一旦您拥有经过 SES验证的发件人电子邮件地址并且您已被授予对 Amazon SES 的生产访问权限(这两者都需要通过 Amazon 的 SES 管理控制台完成),您可以通过 SES 管理控制台创建一个具有 SMTP 凭证的 AWS 账户. 在此过程中,Amazon SES 将为您提供您自己的凭证。

例如,它应该看起来像这样(带有古怪的用户名和密码):

  • 示例 SMTP 服务器地址:tls://email-smtp.us-east-1.amazonaws.com:465
  • 示例 SMTP 用户名:QSKHFTQMSQAKIAIJ6GFY
  • 示例 SMTP 密码:PeNqC2be3IAbNyhHddTbujwekIKoQE2dAhwr3FVzObjH

要通过您的 EE 管理员进行测试,请转到“工具 -> 通信”并发送电子邮件。

于 2013-08-11T16:28:28.510 回答
1

这是我的解决方法。我还没有时间弄清楚它为什么会起作用,但如果你有时间,请分享。

在您的 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;
于 2013-06-03T00:58:34.397 回答