亚马逊SES STARTTLS SMTP& ExpressionEngine

时间:2013-05-31 09:34:18

标签: php smtp expressionengine amazon-ses

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

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


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

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

250-8BITMIME

250-SIZE 10485760

250 STARTTLS

250-AUTH PLAIN LOGIN

250好

无法发送AUTH LOGIN命令。错误:530必须首先发出STARTTLS命令

来自:530需要验证

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

to:503错误:需要MAIL命令

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

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

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

500错误:命令未实现

遇到以下SMTP错误:500错误:命令未实现

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

2 个答案:

答案 0 :(得分: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要求)。第二行将电子邮件换行符从Expression Engine默认值“\ 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的生产访问(两者都需要要通过亚马逊的SES管理控制台完成,您可以通过SES管理控制台创建具有SMTP凭据的AWS账户。在此过程中,Amazon SES将为您提供自己的凭据。

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

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

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

答案 1 :(得分:1)

这是我的修复。我没有时间弄清楚它为什么会起作用,但如果你有时间的话就分享。

在您的EE配置文件中添加以下设置(两个设置,因为有多个工作示例???):

/* 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;