提问者:小点点

Mailgun API:批量发送与单独调用


出身背景

我们正在构建一个应用程序

例如,发给所有成员的通讯。

考虑

Mailgun在其API中提供了批量发送选项。使用“收件人变量”,可以包含与特定用户配对的动态值。

但是,此批处理发送功能是有限的。每个请求不能发送超过1000个收件人,这意味着我们必须为每组1000个收件人迭代收件人列表(在我们的数据库中)。邮件枪提供了一个使用Python(向下滚动约2/3)如何工作的例子。

问题

与我们自己的循环、变量替换和单个API调用相比,批量发送(即通过单个API调用向一组收件人发送电子邮件,使用收件人变量)有什么优势吗?

我认为这对我们的服务器来说更费力,因为它会自己处理每条消息,而不仅仅是将所有数据卸载到邮件枪的服务器上,以便在他们那端进行繁重的工作。但我也喜欢它的灵活性

对最佳实践有什么想法,或者我们应该考虑的因素?


共2个答案

匿名用户

今天偶然发现了这个问题,觉得它为我最初的问题提供了一个很好的总结/答案。我想把这篇文章作为一个答案,以防其他人有这个问题,但还没有找到这篇邮件。也直接从马的嘴里。简而言之:

对于PHP,SDK至少有一个Mailgun类,带有BatchMessage()方法。这实际上为您处理了收件人的计数,因此您可以根据需要将任意多个电子邮件地址(即超过1k个)排队,Mailgun将根据需要发送到APIendpoint。真滑!

以下是他们的原始措辞,以及页面链接。
使用Mailtown PHP SDK Batch Message发送消息:

除了消息生成器,我们还有批处理消息。此类允许您批量生成邮件并提交模板邮件,每个邮件最多可有1000个收件人。使用此类的好处是,将监视收件人计数,并在添加第1000个收件人后自动将邮件提交到endpoint。这意味着您可以构建消息并开始遍历数据库。忘记发送消息,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();

匿名用户

@cdwyer和@nikoshr的答案非常有用,但有点遗留问题。示例中使用的方法已弃用。以下是lib的当前用法:


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


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

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

    $batchMessage->finalize();

更多信息请参阅文档。