Mandrill通过Laravel / PHP发送电子邮件

时间:2013-12-30 22:25:38

标签: php laravel mandrill

我想知道是否有人可以帮助我解决问题我通过Mandrill研究与Laravel和入站电子邮件处理相关的问题。 基本上我希望能够通过Mandrill接收电子邮件并将它们存储在我的Laravel数据库中。现在我不确定我是否用错误的眼睛阅读文档,但Mandrill说它处理入站电子邮件和出站,但我开始认为Mandrill处理入站电子邮件详细信息而不是到实际的入站电子邮件,例如邮件是否已发送等。

我创建了一个新的Mandrill帐户,创建了一个API密钥,创建了一个入站域和我网站的相应子域(例如inboundmail.myproject.co.uk),设置MX记录并且MX记录显示为有效。从那里我已经设置了一条路线(例如queries@inboundmail.myproject.co.uk)和相应的webhook(myproject.co.uk/inboundmail.php),并在此webhook中尝试了API中给出的各种示例(https://mandrillapp.com/api/docs/inbound.php.html),例如添加新路由,检查路由以及尝试添加新域。他们都工作并产生了正确的结果,因此我对Mandrill的身份验证没有问题,但我真正的问题是是否有一个特定的webhook来处理接收传入的邮件消息?

我无法帮助但感觉自己是一个绝对的白痴问这个问题因为我确定答案要么是盯着我,要么是通过Mandrill不可能。

提前致谢。

2 个答案:

答案 0 :(得分:6)

感谢duellsy和debest的帮助,最后我找到了一个脚本并对其进行了扩展,将邮件添加到我自己的数据库中并相应地设置样式/显示它。希望这可以帮助可能遇到同样麻烦的人:

<?php

require 'mandrill.php';

define('API_KEY', 'Your API Key');
define('TO_EMAIL', 'user@example.com');
define('TO_NAME', 'Foo Bar');

if(!isset($_POST['mandrill_events'])) {
    echo 'A mandrill error occurred: Invalid mandrill_events';
    exit;
}
$mail = array_pop(json_decode($_POST['mandrill_events']));

$attachments = array();
foreach ($mail->msg->attachments as $attachment) {
    $attachments[] = array(
        'type' => $attachment->type,
        'name' => $attachment->name,
        'content' => $attachment->content,
    );
}

$headers = array();
// Support only Reply-to header
if(isset($mail->msg->headers->{'Reply-to'})) {
    $headers[] = array('Reply-to' => $mail->msg->headers->{'Reply-to'});
}

try {
    $mandrill = new Mandrill(API_KEY);
    $message = array(
        'html' => $mail->msg->html,
        'text' => $mail->msg->text,
        'subject' => $mail->msg->subject,
        'from_email' => $mail->msg->from_email,
        'from_name' => $mail->msg->from_name,
        'to' => array(
            array(
                'email' => TO_EMAIL,
                'name' => TO_NAME,
            )
        ),
        'attachments' => $attachments,
        'headers' => $headers,
    );
    $async = false;
    $result = $mandrill->messages->send($message, $async);
    print_r($result);
} catch(Mandrill_Error $e) {
    // Mandrill errors are thrown as exceptions
    echo 'A mandrill error occurred: ' . get_class($e) . ' - ' . $e->getMessage();
    // A mandrill error occurred: Mandrill_PaymentRequired - This feature is only available for accounts with a positive balance.
    throw $e;
}
?>

答案 1 :(得分:1)

与使用其他邮件解析服务中的webhooks一样,您需要使用

file_get_contents("php://input")

这将为您提供来自webhook的原始数据,然后您可以json_decode使用结果。