Symfony2,Swiftmailer,Mandrill得到回应

时间:2016-06-01 15:42:14

标签: symfony swiftmailer mandrill

我们使用Swiftmailer和Mandrill构建了一个电子邮件系统。它的效果非常好,但现在我们希望整合webhook来触发跳出/失败的警报/ ......

此时我们会为每封发送的电子邮件添加一个带有唯一ID的自定义标头,并在webhook触发时找回我们的路。

它运作良好但是mandrill已经使用了我们可以使用的_id,因此我们不会添加另一个'最重要的唯一ID。

Mandrill回应如下:

[
    {
        "email": "recipient.email@example.com",
        "status": "sent",
        "reject_reason": "hard-bounce",
        "_id": "abc123abc123abc123abc123abc123"
    }
]

Swiftmailer有没有办法让这个回复回Symfony? (这样我们就可以阅读并存储_id供以后使用)

我知道我们可以使用Mandrill php SDK,但我们最好继续使用Swiftmailer。

修改 我们正在使用带有基本Swiftmailer实例的SMTP传输,如here

所述
<?php

include_once "swift_required.php";

$subject = 'Hello from Mandrill, PHP!';
$from = array('you@yourdomain.com' =>'Your Name');
$to = array(
 'recipient1@example.com'  => 'Recipient1 Name',
 'recipient2@example2.com' => '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);
}

?>

1 个答案:

答案 0 :(得分: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.

您可以使用accord/mandrill-swiftmailer-bundle将其与Symfonu集成,之后您可以执行以下操作:

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