使用 Mandrill 发送电子邮件模板给我错误

Posted

技术标签:

【中文标题】使用 Mandrill 发送电子邮件模板给我错误【英文标题】:Sending an email template with Mandrill gives me errors 【发布时间】:2015-05-09 23:39:12 【问题描述】:

我正在尝试将我的网站切换到 Mandrill,但是我在使用 php API 时遇到了一些问题。

有两个问题:

首先,它发送了两次电子邮件。底部的代码是我拥有的所有代码(PHP 开始和结束标签除外),我无法弄清楚为什么它每次都会发送两次电子邮件。 其次,我从 cURL 收到一条错误消息,指出 URL 未设置。正在发送电子邮件,因此显然设置了一个 URL。错误如下。

这是我的代码:

require_once './libraries/Mandrill.php';

try 
    $mandrill = new Mandrill('myapikey');
    $template_name = 'my-template-slug';
    $template_content = '';
    $message = array(
        'to' => array(
            array(
                'email' => 'a_test@emailaddress.com',
                'name' => 'RecipientsName',
                'type' => 'to'
            )
        ),
        'auto_text' => true,
        'merge_vars' => array(
            array(
                'rcpt' => 'a_test@emailaddress.com',
                'vars' => array(
                    array(
                        'name' => 'USERNAME',
                        'content' => 'user1234'
                    ),
                    array(
                        'name' => 'CONFIRM_CODE',
                        'content' => '19874lahg62378hwsi'
                    )
                )
            )
        )
    );
    $result = $mandrill->messages->sendTemplate($template_name, $template_content, $message);
 catch(Mandrill_Error $e) 
    echo 'A mandrill error occurred: ' . get_class($e) . ' - ' . $e->getMessage();
    throw $e;

这是错误:

发生山魈错误:Mandrill_HttpError - API 调用 消息/发送模板失败:未设置 URL!致命错误:未捕获 异常 'Mandrill_HttpError' 与消息 'API 调用 消息/发送模板失败:未设置 URL!在 /Users/Gavin/Desktop/Web/mandrill-test/libraries/Mandrill.php:126 堆栈跟踪:#0 /Users/Gavin/Desktop/Web/mandrill-test/libraries/Mandrill/Messages.php(160): Mandrill->call('messages/send-t...', Array) #1 /Users/Gavin/Desktop/Web/mandrill-test/index.php(70): Mandrill_Messages->sendTemplate('my-template-slug', Array, Array) #2 /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/php/setup.php(131): require('/Users/Gavin/De...') #3 main 抛出 /Users/Gavin/Desktop/Web/mandrill-test/libraries/Mandrill.php 上线 126

【问题讨论】:

是否抛出异常并同时发送两次电子邮件?还是在多次调用后发生这种情况?我会尝试调试/打印以查看您的方法是否以某种方式被调用了两次。另外,在这里:***.com/questions/22647687/… 他们建议使用 send 而不是 sendTemplate 上面的代码是唯一使用的代码。是的,它抛出异常并发送电子邮件两次。 我还应该补充一点,因为这个问题正在发生,我转而使用 Mandrill 的 SMTP 服务器而不是 API(我自己的模板托管在我的 Web 服务器上)并且它只发送一次。 在这种情况下,这似乎是他们 API 中的一个错误。我仍然会尝试***.com/questions/22647687/… 中的建议 请查看此链接:- ***.com/questions/19222562/… 【参考方案1】:

Mandrill 劫持链接并注入自己的 URL,以便通过其服务器重新路由链接。这导致用户在转到正确的页面之前在浏览器中看到山魈 URL

您帐户的Sending Defaults 页面上有一个用于点击跟踪的选项(应该是一个下拉菜单,靠近顶部,就在打开的跟踪复选框下方)。您在此处选择的默认选项将应用于所有消息,除非您为点击跟踪提供不同的每条消息设置。使用 SMTP,您可以使用自定义 SMTP 标头在每条消息的基础上设置点击跟踪。有关使用 SMTP 标头进行自定义的更多信息,请参阅Mandrill KB here。

【讨论】:

【参考方案2】:
<?php
require_once 'Mandrill.php';

$mandrill = new Mandrill('MY API KEY IS USUALLY HERE');
$message = array(
    'subject' => 'Test message',
    'from_email' => 'jwjody@yahoo.com',
    'from_name' => 'Sender person',
    'html' => '<p>this is a test message with Mandrill\'s PHP wrapper!.</p>',
    'to' => array(array('email' => 'jwjody@yahoo.com', 'name' => 'Recipient 1')),
    'merge_vars' => array(array(
        'rcpt' => 'recipient1@domain.com',
        'vars' =>
        array(
            array(
                'name' => 'FIRSTNAME',
                'content' => 'Recipient 1 first name'),
            array(
                'name' => 'LASTNAME',
                'content' => 'Last name')
    ))));

//print_r($mandrill->messages->sendTemplate($template_name, $template_content, $message));
echo ("hello");

?>

并发送消息

$mandrill->messages->send($message, $async=false, $ip_pool=null, $send_at=null);

【讨论】:

尝试新的当前源文件删除新的地方。 packagist.org/packages/mandrill/mandrill

以上是关于使用 Mandrill 发送电子邮件模板给我错误的主要内容,如果未能解决你的问题,请参考以下文章

创建 Mandrill html 模板

向 nauta.cu 发送电子邮件时,Mandrill 给我“发件人地址被拒绝:找不到域”

在 Mandrill 中使用模板发送电子邮件

使用模板发送电子邮件 (Mandrill PHP)

使用 Mandrill 为批量电子邮件设置 Message-Id

在模板中找不到发送到 mandrill