2016-06-01 3 views
0

Мы создали систему электронной почты с использованием Swiftmailer и Mandrill. Он отлично работает, но теперь мы хотим интегрировать веб-камеры для запуска предупреждений об ошибках/сбоях/...Symfony2, Swiftmailer, Mandrill получить ответ

В этот момент мы добавляем пользовательский заголовок с уникальным идентификатором для каждого отправленного сообщения и находим наш путь назад, когда триггеры webhook.

Он работает хорошо, но mandrill уже использует _id, который мы могли бы использовать, чтобы мы не добавляли «другой» уникальный идентификатор поверх этого.

Mandrill отвечает что-то вроде:

[ 
    { 
     "email": "[email protected]", 
     "status": "sent", 
     "reject_reason": "hard-bounce", 
     "_id": "abc123abc123abc123abc123abc123" 
    } 
] 

Есть ли способ в Swiftmailer, чтобы получить этот ответ обратно в Symfony? (Чтобы мы могли читать и хранить это _id для последующего использования)

Я знаю, что мы могли бы использовать Mandrill php SDK, но желательно, чтобы мы продолжали использовать Swiftmailer.

EDIT Мы используем SMTP Транспорт с основным экземпляром SwiftMailer, как описаны here

<?php 

include_once "swift_required.php"; 

$subject = 'Hello from Mandrill, PHP!'; 
$from = array('[email protected]' =>'Your Name'); 
$to = array(
'[email protected]' => 'Recipient1 Name', 
'[email protected]' => 'Recipient2 Name' 
); 

$text = "Mandrill speaks plaintext"; 
$html = "<em>Mandrill speaks <strong>HTML</strong></em>"; 

$transport = Swift_SmtpTransport::newInstance('smtp.mandrillapp.com', 587); 
$transport->setUsername('MANDRILL_USERNAME'); 
$transport->setPassword('MANDRILL_PASSWORD'); 
$swift = Swift_Mailer::newInstance($transport); 

$message = new Swift_Message($subject); 
$message->setFrom($from); 
$message->setBody($html, 'text/html'); 
$message->setTo($to); 
$message->addPart($text, 'text/plain'); 

if ($recipients = $swift->send($message, $failures)) 
{ 
echo 'Message successfully sent!'; 
} else { 
echo "There was an error:\n"; 
print_r($failures); 
} 

?> 
+0

Следует упомянуть, что вы используете для отправки сообщений от swiftmailer с использованием Mand rill, так как ответ, вероятно, лежит где-то в этом пакете. –

ответ

1

Я не думаю, что Mandrill поддерживает прохождение этого ответа через SMTP, вы должны будете использовать API для этого ,

Например, в accord/mandrill-swiftmailer есть метод, который возвращает ответ от Mandrill: https://github.com/AccordGroup/MandrillSwiftMailer/blob/master/SwiftMailer/MandrillTransport.php#L215

Вы можете получить ответ Mandrill, используя следующий код:

$transport = new MandrillTransport($dispatcher); 
$transport->setApiKey('ABCDEFG12345'); 
$transport->setAsync(true); # Optional 
$response = $transport->getMandrillMessage($message); 
// $response now contains array with Mandrill's response. 

Вы можете интегрировать его с Symfonu использованием accord/mandrill-swiftmailer-bundle и после что вы можете сделать:

$response = $mailer->getTransport()->getMandrillMessage($message);