1

如何在我的中使用 Amazon SES 密钥、密钥 + smtp 地址Zend_Mail_Transport_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);
4

3 回答 3

4

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

编辑

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

还请确保您在通过 SMTP 连接时使用的是SES SMTP 凭据。这些凭证不同于您的 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 这样的基于角色的地址-> 检查这个

于 2012-06-15T10:20:56.867 回答
0

另一个跟进。

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

首先使用这个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

于 2013-03-07T14:16:56.150 回答
0

我收到“554 消息被拒绝:电子邮件地址未验证”,但对 /etc/php.ini 的编辑为我修复了它:

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

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

于 2012-12-23T20:04:38.107 回答