Получение идентификатора сообщения с помощью CakeEmail на Amazon SES через SMTP

Я использую 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 переписывает идентификатор сообщения, я не могу приписывать жалобы и отказов конкретному сообщению электронной почты. Согласно их документам, Amazon SES возвращает идентификатор сообщения в окончательном SMTP-ответе. То есть(250 Ok <Message ID>)

Как я могу получить этот код ответа?

2

Решение

В строке 316 ./vendor/cakephp/cakephp/lib/Cake/Network/Email/SmtpTransport.php, если вы добавляете третий элемент в массив, возвращаемый после отправки письма со стандартным транспортом CakePHP Smtp, вы можете принудительно выполнить последний ответ от SES, которая будет возвращена, тем самым предоставляя вам идентификационную ссылку для атрибутов уведомлений о доставке, отказов или жалоб AWS SNS.

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

«ответ» затем обеспечивает …

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).

Из самой электронной почты:

Message-ID:
<0000015137aa362a-f53a549b-9420-4056-8623-c24ecf8785de-000000@eu-west-1.amazonses.com>

Получить фактический идентификатор сообщения с этим:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]