Mailgun API:批量发送与个人呼叫

时间:2016-03-17 14:31:15

标签: email html-email email-integration mailgun

背景

我们正在构建一个将处理&通过Mailgun发送电子邮件。这些有时是一次性消息,由事务启动。但是,有些电子邮件会立即发送到30k +。

例如,所有成员的简报。

考虑

Mailgun为其API提供Batch Sending选项。使用"收件人变量",您可以包含与特定用户配对的动态值。

但是,此批量发送功能有限。每个请求不能发送超过1,000个收件人,这意味着我们必须遍历每个1,000的收件人列表(在我们的数据库中)。 Mailgun provides an example如何使用Python(向下滚动约2/3)。

问题

批量发送是否有任何好处(即,使用收件人变量通过单个API调用向一组收件人发送电子邮件),而不是进行自己的循环,变量替换和单个API调用?

我认为这对我们的服务器来说更加沉重,因为它会处理每条消息本身,而不是仅仅将所有数据卸载到Mailgun的服务器上以便在他们的终端上进行繁重的工作。但我也喜欢灵活性和简单处理我们的结果并发送"完全呈现"邮件给Mailgun,一次一个,而不必一次迭代1k。

有关最佳做法的想法或我们应该考虑的因素吗?

2 个答案:

答案 0 :(得分:6)

今天偶然发现了这一点,觉得它为我原来的问题提供了一个很好的总结/答案。我想发布这个作为答案,以防其他人有这个问题并且没有找到这个Mailgun帖子。也直接从马的嘴里出来。坚果壳版本:

对于PHP,至少SDK有一个Mailgun类,并带有BatchMessage()方法。这实际上处理了对您的收件人计数,因此您可以根据需要排队多个电子邮件地址(即超过1k),并且Mailgun将根据需要启动到API端点。很漂亮!

这是他们原来的措辞,加上页面的链接 Sending a message with Mailgun PHP SDK + Batch Message:

  

批处理消息

     

除Message Builder外,我们还有Batch Message。这个班   允许您构建消息并提交模板消息   批次,每个帖子最多1,000个收件人。使用它的好处   class是收件人计数被监控并将自动进行   添加第1,000个时,将消息提交给端点   接受者。这意味着您可以构建消息并开始迭代   通过你的数据库。忘记发送消息,SDK会   在必要时跟踪发布到API。

// First, instantiate the SDK with your API credentials and define your domain.

$mgClient = new Mailgun("key-example");
$domain = "example.com";

// Next, instantiate a Message Builder object from the SDK, pass in your sending domain.  

$batchMsg = $mgClient->BatchMessage($domain);

// Define the from address.

$batchMsg->setFromAddress("dwight@example.com", 
                          array("first"=>"Dwight", "last" => "Schrute"));
// Define the subject. 

$batchMsg->setSubject("Help!");

// Define the body of the message.

$batchMsg->setTextBody("The printer is on fire!");

// Next, let's add a few recipients to the batch job.
$batchMsg->addToRecipient("pam@example.com", 
                          array("first" => "pam", "last" => "Beesly"));
$batchMsg->addToRecipient("jim@example.com", 
                          array("first" => "Jim", "last" => "Halpert"));
$batchMsg->addToRecipient("andy@example.com", 
                          array("first" => "Andy", "last" => "Bernard"));
// ...etc...etc...
// After 1,000 recipeints, 
// Batch Message will automatically post your message to the messages endpoint. 

// Call finalize() to send any remaining recipients still in the buffer.

$batchMsg->finalize();

答案 1 :(得分:1)

@cdwyer和@nikoshr的答案非常有帮助,但有点陈旧。该示例中不推荐使用的方法。这是lib的当前用法:


    $batchRequest = $this->mailgun->messages()->getBatchMessage('mydomain.com');

    $html = '<html>...</html>';

    $batchRequest->setFromAddress('user@domain.com');
    $batchRequest->setReplyToAddress('user2@domain.com');
    $batchRequest->setSubject('Contact form | Company');
    $batchRequest->setHtmlBody($html);

    foreach ($recipients as $recipient) {
        $batchRequest->addToRecipient($recipient);
    }
    $batchRequest->finalize();

更多信息,请访问documentation