Mandrill API 电子邮件使用模板排队

Posted

技术标签:

【中文标题】Mandrill API 电子邮件使用模板排队【英文标题】:Mandrill API email getting Queued with use of Template 【发布时间】:2015-03-15 23:00:40 【问题描述】:

我正在尝试使用 mandrill api 发送带有模板的电子邮件。我正在研究这里记录的方法:https://mandrillapp.com/api/docs/messages.php.html#method=send-template 代码在 URL 中实现:http://ezaccom.com/mxl.php 我的问题是我所有的电子邮件都在排队,而不是像他们应该的那样快速发送。这是代码(注意 %TEMPLATE CODE% 是我的电子邮件模板所在的位置):

 try 
$mandrill = new Mandrill('API_KEY_REDACTED');
$template_name = 'Welcome mail on email /FB sign-up to very email id';
$template_content = array(
    array(
        'name' => 'Welcome mail on email /FB sign-up to very email id',
        'content' => 'sign-up'
    )
);
$message = array(
    'html' => '%TEMPLATE CODE%',
    'text' => 'Example text content',
    'subject' => 'Welcome to Easyaccom',
    'from_email' => 'hello@easyaccom.com',
    'from_name' => 'Easyaccom',
    'to' => array(
        array(
            'email' => 'RECIPIENT@gmail.com',
            'name' => 'Jordan Belfort',
            'type' => 'to'
        )
    ),
    'headers' => array('Reply-To' => 'message.reply@example.com'),
    'important' => false,
    'track_opens' => null,
    'track_clicks' => null,
    'auto_text' => null,
    'auto_html' => null,
    'inline_css' => null,
    'url_strip_qs' => null,
    'preserve_recipients' => null,
    'view_content_link' => null,
    'bcc_address' => 'message.bcc_address@example.com',
    'tracking_domain' => null,
    'signing_domain' => null,
    'return_path_domain' => null,
    'merge' => true,
    'merge_language' => 'mailchimp',
    'global_merge_vars' => array(
        array(
            'name' => 'merge1',
            'content' => 'merge1 content'
        )
    ),
    'merge_vars' => array(
        array(
            'rcpt' => 'recipient.email@example.com',
            'vars' => array(
                array(
                    'name' => 'merge2',
                    'content' => 'merge2 content'
                )
            )
        )
    ),
    'tags' => array('password-resets'),
    'subaccount' => 'customer-123',
    'google_analytics_domains' => array('example.com'),
    'google_analytics_campaign' => 'message.from_email@example.com',
    'metadata' => array('website' => 'www.example.com'),
    'recipient_metadata' => array(
        array(
            'rcpt' => 'recipient.email@example.com',
            'values' => array('user_id' => 123456)
        )
    ),
    'attachments' => array(
        array(
            'type' => 'text/plain',
            'name' => 'myfile.txt',
            'content' => 'ZXhhbXBsZSBmaWxl'
        )
    ),
    'images' => array(
        array(
            'type' => 'image/png',
            'name' => 'IMAGECID',
            'content' => 'ZXhhbXBsZSBmaWxl'
        )
      )
    );
   $async = false;
$ip_pool = 'Main Pool';
$send_at = 'example send_at';
$result = $mandrill->messages->sendTemplate($template_name, $template_content, $message, $async, $ip_pool);
print_r($result);
/*
Array
(
    [0] => Array
        (
            [email] => recipient.email@example.com
            [status] => sent
            [reject_reason] => hard-bounce
            [_id] => abc123abc123abc123abc123abc123
        )

)
*/
 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_Subaccount - No subaccount exists with the id 'customer-123'
throw $e;
  
   ?>

【问题讨论】:

问题出在哪里? 编辑了描述,但标题说明了一切:电子邮件正在排队而不是快速发送。我永远无法收到电子邮件。虽然没有显示错误。 您如何知道电子邮件正在排队?它是否显示在 Mandrill 分析或日志中? 【参考方案1】:

只剪掉所有未使用的参数

try 
$mandrill = new Mandrill('API_KEY_REDACTED');
$template_name = 'Welcome mail on email /FB sign-up to very email id';
$template_content = array(
    array(
        'name' => 'Welcome mail on email /FB sign-up to very email id',
        'content' => 'sign-up'
    )
);
$message = array(
    'html' => '%TEMPLATE CODE%',
    'text' => 'Example text content',
    'subject' => 'Welcome to Easyaccom',
    'from_email' => 'hello@easyaccom.com',
    'from_name' => 'Easyaccom',
    'to' => array(
        array(
            'email' => 'RECIPIENT@gmail.com',
            'name' => 'Jordan Belfort',
            'type' => 'to'
        )
    ),
    'headers' => array('Reply-To' => 'message.reply@example.com'),
    'important' => false,
    'track_opens' => null,
    'track_clicks' => null,
    'auto_text' => null,
    'auto_html' => null,
    'inline_css' => null
    );
   $async = false;

$result = $mandrill->messages->sendTemplate($template_name, $template_content, $message, $async);
print_r($result);
/*
Array
(
    [0] => Array
        (
            [email] => recipient.email@example.com
            [status] => sent
            [reject_reason] => hard-bounce
            [_id] => abc123abc123abc123abc123abc123
        )

)
*/
 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_Subaccount - No subaccount exists with the id 'customer-123'
throw $e;
  
   ?>

【讨论】:

【参考方案2】:

您有很多没有明确设置的可选参数,包括attachmentsimages,这将自动导致异步处理调用(以及queued 响应)。如果您删除这些,您应该会看到返回给您的错误,其中应该突出显示诸如子帐户不存在和无效的 send_at 日期等内容。通常,您应该删除 所有 可选参数,但您明确设置的参数除外。

此外,如果您使用模板(并使用 send-template 发送),则无需在 html 参数中提供模板代码。如果您在 Mandrill 中存储的模板有 HTML,那将被忽略;如果存储的 Mandrill 模板还没有 HTML,则只需要提供 html

为了您和 Mandrill 的安全,由于 API 密钥是公开发布的,它已被禁用,我已编辑原始帖子以将其删除。您应该生成另一个,以后不要使用此处发布的。

【讨论】:

非常感谢。我很高兴看到您花时间没有收到有关此页面的任何电子邮件。这些问题现在已经解决。再次感谢您!

以上是关于Mandrill API 电子邮件使用模板排队的主要内容,如果未能解决你的问题,请参考以下文章

Mandrill 电子邮件卡在排队中

带有 sinatra 的 Mandrill API 电子邮件队列

Mandrill API - 下载电子邮件内容

Mandrill 模板合并失败

山魈状态:排队

如何让 Mandrill 解析模板中的 Handlebars 标签?