如何在我的Zend_Mail_Transport_Smtp适配器中使用Amazon SES密钥,secret + smtp地址?

时间:2012-06-15 09:05:43

标签: php zend-framework amazon-ec2 zend-mail amazon-ses

如何在Zend_Mail_Transport_Smtp中使用Amazon SES密钥,密码+ smtp地址? 它会在尝试跟踪时说Must issue a STARTTLS command first

  /*
    Reference in C#: http://sesblog.amazon.com/

    String username = "SMTP-USERNAME";  // Replace with your SMTP username.
    String password = "SMTP-PASSWORD";  // Replace with your SMTP password.
    String host = "email-smtp.us-east-1.amazonaws.com";
    int port = 25;

  */
  public static function sendEmail($to, $subject, $body) {
    $config = array(
        'aws_key' => 'yourkey',
        'aws_secret' => 'yourkeysecret',
    ));

    //
    //echo 0 > /selinux/enforce
    //$tr = new Zend_Mail_Transport_Smtp('smtp.belgacom.be');// works - for local
    //$tr = new Zend_Mail_Transport_Smtp('out.telenet.be' ); // works - for office
    //
    $tr = new Zend_Mail_Transport_Smtp(
                      'email-smtp.us-east-1.amazonaws.com'); // DOES not work
    Zend_Mail::setDefaultTransport($tr);

    $mail = new Zend_Mail();
    $html = self::setupEmail($body);
    $mail->setBodyHtml($html); 
    $mail->setFrom('support@memy.com', 'memy.com');
    $mail->addTo($to, 'EXAMPLE');
    $mail->setSubject($subject);
    $mail->send();
  }

跟进:

// Wild guess
$config = array(
  'aws_key' => 'yourkey',
  'aws_secret' => 'yourkeysecret',
));
$tr = new Zend_Mail_Transport_Smtp('email-smtp.us-east-1.amazonaws.com', 
                                   $config);

最后的跟进:

步骤1)要使用Amazon SES SMTP界面发送电子邮件,您需要具备以下条件:

  • AWS账户。

  • Amazon SES生产访问权限,如果您要发送大量电子邮件。有关更多信息,请参阅请求生产访问。

    - 完成后,他们允许send 10000 emails per 24 hour period

    - 这可以快速启动,就像不到24小时一样

    - 5封电子邮件/秒

  • 您已通过Amazon SES验证的电子邮件地址。有关更多信息,请参阅验证电子邮件地址。

    - 这需要一段时间才能验证

    - 这仍然是24小时后尚未确认

  • SMTP接口主机名和端口号。主机名是email-smtp.us-east-1.amazonaws.com。端口号因连接方法而异。有关详细信息,请参阅连接到SMTP端点。

    - 非常重要的是,它失败了

  • 从AWS管理控制台获取的SMTP用户名和密码。有关详细信息,请参阅SMTP凭据。

  • 可以使用TLS(传输层安全性)进行通信的客户端软件。

第2步)我已经完成了上述工作,在管理控制台中显示:

Status:
pending verification (resend)
Please check your inbox for an email to this address, and click on the link provided to complete verification. If you did not receive this email, please click resend.

Domain verification in AWS:

Status:
pending verification (resend)
Please check your inbox for an email to this address, and click on the link provided to complete verification. If you did not receive this email, please click resend.

这意味着,他们将在72小时内完成某项工作

步骤3)修改$ config而不使用外部适配器(未通过ZF转移)

$config = array(
  'auth' => 'login',
  'username' => 'SES key',
  'password' => 'SES secret',
));
$tr = new Zend_Mail_Transport_Smtp('email-smtp.us-east-1.amazonaws.com', 
                                   $config);

3 个答案:

答案 0 :(得分:5)

我想最简单的方法就是使用这个加载项:Amazon-SES-Zend-Mail-Transport。另一方面,如果你通过Zend_Mail_Transport挖掘自己,你可以自己编写。

修改

Response: 530 Must issue a STARTTLS command first表示您需要在进行身份验证之前启用安全连接。

通过SMTP连接时,请确保使用SES SMTP credentials。这些凭据与您的AWS凭据不同。从您发布的代码中,您可能正在使用AWS凭据。

并查看github上提供的自述文件;)

编辑2

尝试将此添加到您的配置中:

$config = array('ssl' => 'tls','port' => 25);

编辑3

即使地址已经过验证,也会出现

554 Message rejected: Email address is not verified。一些想法为什么它不起作用:

1。)经过验证的地址区分大小写,因此如果您使用的地址与您验证的地址不同,则会遇到问题。这归结为对rfc的严格解释。的 - >检查

2.)我认为亚马逊不喜欢基于角色的地址,例如admin@yourdomain.com - >检查

答案 1 :(得分:1)

我收到'554邮件被拒绝:电子邮件地址未经过验证',但是/etc/php.ini的编辑为我修复了它:

sendmail_path = / usr / sbin / sendmail -t -i -f someone@yourdomain.com

信用:http://www.petermac.com/php-mail-function-with-postfix/

答案 2 :(得分:1)

另一个跟进。

为了帮助其他人解决同样的问题,以下是我最近用来使其正常工作的确切程序。

首先使用此https://github.com/christophervalles/Amazon-SES-Zend-Mail-Transport

然后这个:

$mail = new Zend_Mail('utf-8');
$transport = new App_Mail_Transport_AmazonSES(
    array(
       'accessKey' => 'YOUR_ACCESS_KEY',
       'privateKey' => 'YOUR_PRIVATE_KEY'
    )
);
$mail->addTo('destination@example.com', 'Recipient')
    ->setFrom('your.verified.email@gmail.com', 'Webmaster')
    ->setSubject('Email subject line')
    ->setBodyText('Email body')
    ->send($transport);

有关详细信息和可能的错误: http://shakyshane.com/blog/amazon_ses_zend_framework.html