我们使用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);
}
?>
答案 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);