Yii2 Mandrill电子邮件软验证

时间:2018-06-29 11:59:46

标签: php yii2 mandrill email-delivery

我正在使用yii2插件 nickcv ,我想知道电子​​邮件状态,就像软件验证或电子邮件是否传递一样。谁能帮我吗?

谢谢。

inner-component

3 个答案:

答案 0 :(得分:1)

Mandrill会根据每个邮件跟踪电子邮件,因此将跟踪通过您的帐户发送的单个电子邮件的打开,点击和传递数据。您可以添加标签和元数据,以便为您发送的电子邮件提供更多背景信息。

Messages API

Mandrill自动为许多字段建立索引,可用于搜索或查找与发送相关的有趣趋势。可在Web应用程序中和通过Messages-API进行搜索。

因此,您需要研究Messages API /messages/info.json,该API检索最近发送的一条消息的信息。当您发送消息时,使用

进行山d响应
Array
(
    [0] => Array
        (
            [email] => recipient.email@example.com
            [status] => sent
            [reject_reason] => hard-bounce
            [_id] => abc123abc123abc123abc123abc123
        )

)

_id=>abc123abc123abc123abc123abc123可用于通过向messages/info.json发送呼叫来检查电子邮件的状态,提供了可轻松转换为Yii2的php示例代码。见下文

<?php
try {
    $mandrill = new Mandrill('YOUR_API_KEY');
    $id = 'abc123abc123abc123abc123';
    $result = $mandrill->messages->info($id);
    print_r($result);
    /*
    Array
    (
        [ts] => 1365190000
        [_id] => abc123abc123abc123abc123
        [sender] => sender@example.com
        [template] => example-template
        [subject] => example subject
        [email] => recipient.email@example.com
        [tags] => Array
            (
                [0] => password-reset
            )

        [opens] => 42
        [opens_detail] => Array
            (
                [0] => Array
                    (
                        [ts] => 1365190001
                        [ip] => 55.55.55.55
                        [location] => Georgia, US
                        [ua] => Linux/Ubuntu/Chrome/Chrome 28.0.1500.53
                    )

            )

        [clicks] => 42
        [clicks_detail] => Array
            (
                [0] => Array
                    (
                        [ts] => 1365190001
                        [url] => http://www.example.com
                        [ip] => 55.55.55.55
                        [location] => Georgia, US
                        [ua] => Linux/Ubuntu/Chrome/Chrome 28.0.1500.53
                    )

            )

        [state] => sent
        [metadata] => Array
            (
                [user_id] => 123
                [website] => www.example.com
            )

        [smtp_events] => Array
            (
                [0] => Array
                    (
                        [ts] => 1365190001
                        [type] => sent
                        [diag] => 250 OK
                    )

            )

    )
    */
} 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_Unknown_Message - No message exists with the id 'McyuzyCS5M3bubeGPP-XVA'
    throw $e;
}
?>

Webhooks

您还可以在mandrill帐户上设置WebHooks并将其指向服务器页面,例如yoursite.com/mandrill-webhook,并在创建Webhook时可以指定触发该Webhook的事件,依次选择send,{{1 }},open并立即保存,只要这些事件中的任何一个触发,它就会发布一个带有click的数组,以告知哪一个事件甚至被触发了。首次设置网络挂钩时,​​您可以向您的网址发送一个测试调用,该调用将在下面发布所有这三个事件。

json

答案 1 :(得分:0)

这可以通过在发送之前设置标头来实现。

您要查找的标题为:X-MC-Track

阅读文档here

您将可以通过以下方式进行设置

$message = Yii::$app->mailer->compose(...);
$message->getSwiftMessage()->getHeaders()->addTextHeader('X-MC-Track', 'opens,clicks');

也许它需要一些测试和调整,您应该使用像https://mailcatcher.me/这样的本地测试smtp服务器,它将帮助您检查是否设置了这些标头。

答案 2 :(得分:0)

可以尝试一下。它对我有用..!

    echo "<pre>";
    print_r(Yii::$app->mailer->getLastTransaction());die;

输出将是:-

Array
(
    [0] => Array
        (
            [email] => tets.test@gmail.comm
            [status] => rejected
            [_id] => abcabcabacbac
            [reject_reason] => soft-bounce
        )

)