我正在尝试使用带有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发送电子邮件。您的服务器可能未配置为使用此方法发送邮件。
答案 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管理员转到“管理员 - >电子邮件配置”并设置以下内容:
说明:一旦您拥有SES 已验证的发件人电子邮件地址且您已获得对Amazon SES的生产访问(两者都需要要通过亚马逊的SES管理控制台完成,您可以通过SES管理控制台创建具有SMTP凭据的AWS账户。在此过程中,Amazon SES将为您提供自己的凭据。
例如应该看起来像这样(使用古怪的用户名和密码):
要通过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;