【问题标题】:Retrieving Message-Id using CakeEmail on Amazon SES via SMTP通过 SMTP 在 Amazon SES 上使用 CakeEmail 检索 Message-Id
【发布时间】:2015-02-24 19:45:30
【问题描述】:

我正在使用 CakePHP 2.6 并使用 CakeEmail 向用户发送验证电子邮件。

$Email = new CakeEmail('smtp');
                $Email->to($this->request->data['Account']['account_email']);
                $Email->subject('Verify your account before you continue');
                $Email->send('http://localhost/Accounts/verify/'.$this->request->data['Account']['account_verificationhash']);

由于 Amazon SES 重写了 message-id,我无法将投诉和退回归因于特定电子邮件。根据他们的文档,Amazon SES 在最终的 SMTP 响应中返回消息 ID。即(250 Ok <Message ID>)

如何检索该响应代码?

【问题讨论】:

  • 您的意思是:我无法将投诉和退回邮件归咎于特定的电子邮件?具体是什么“投诉”?您是否尝试使用响应代码来确定电子邮件是否已成功发送?
  • 我无法将投诉和退回邮件归因于特定的电子邮件?具体是什么“投诉”?电子邮件反馈投诉,尤其是垃圾邮件投诉。您是否尝试使用响应代码来确定电子邮件是否已成功发送?不,我正在尝试从响应消息中提取消息 ID。 Amazon 采用 CakeEmail 生成的 message-id 并重写它。这是为了他们的内部跟踪目的。他们在响应消息“250 Ok ****message ID****”中将该 ID 返回给您。然后 SES 使用该消息 ID 报告任何投诉或退回。
  • send方法的返回值是否有250响应码——即$result = $Email->send();
  • 我试过了。它传递标头和消息的数组。传递的 message-id 标头是 SES 重写之前的 message-id。
  • 您是否尝试过使用 sns 通知?

标签: php cakephp amazon-web-services cakephp-2.3 amazon-ses


【解决方案1】:

./vendor/cakephp/cakephp/lib/Cake/Network/Email/SmtpTransport.php 的第 316 行,如果您将第三个元素添加到使用标准 CakePHP Smtp 传输发送邮件后返回的数组中,您可以强制SES 要返回的最后一个响应,从而为您提供 ID 链接,以将 AWS SNS 传递通知、退回或投诉归因于。

$this->_content = array('headers' => $headers, 'message' => $message, 'response' => $this->_lastResponse);

'response' 然后提供...

Array(
    [code] => 250
    [message] => Ok 00000151379549a4-6e36766f-849e-4e3c-9ac9-6ac1c6ad5434-000000
)

建议您复制/模仿 Smtp 传输,以避免在更新 CakePHP (http://book.cakephp.org/2.0/en/core-utility-libraries/email.html#creating-custom-transports) 时覆盖该 hack。

来自电子邮件本身:

消息 ID:

用这个获取实际的消息 ID:

$message['Email']['message_id'] = preg_replace('/Ok /', '', $response['response'][0]['message']);

【讨论】:

    猜你喜欢
    • 2018-10-03
    • 2012-02-23
    • 2018-10-12
    • 1970-01-01
    • 2019-04-16
    • 2012-01-24
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多