【问题标题】:Mailgun API: Batch Sending vs. Individual CallsMailgun API:批量发送与单独调用
【发布时间】:2016-07-03 23:27:11
【问题描述】:

背景

我们正在构建一个将通过 Mailgun 处理和发送电子邮件的应用程序。这些有时是一次性消息,由事务发起。不过,有些电子邮件会一次发送到 30k+。

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

注意事项

Mailgun 通过其 API 提供了一个 Batch Sending 选项。使用“收件人变量”,您可以包含与特定用户配对的动态值。

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

问题

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

我认为这对我们的服务器来说更加繁重,因为它会自己处理每条消息,而不是仅仅将所有数据卸载到 Mailgun 的服务器上以进行繁重的工作。但我也喜欢在我们端处理它并向 Mailgun 发送“完全渲染”消息的灵活性和简单性,一次一个,而无需一次迭代 1k。

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

【问题讨论】:

    标签: html-email email mailgun


    【解决方案1】:

    今天偶然发现了这个,觉得它为我最初的问题提供了一个很好的总结/答案。我想将其发布为答案,以防其他人有此问题并且没有找到此 Mailgun 帖子。直接从马的嘴里,也是。简而言之:

    至少对于 PHP,SDK 有一个 Mailgun 类和一个 BatchMessage() 方法。这实际上会为您处理收件人的计数,因此您可以将任意数量的电子邮件地址排队(即超过 1k),Mailgun 将根据需要向 API 端点启动。相当光滑!

    这是他们的原始措辞,以及页面链接。
    Sending a message with Mailgun PHP SDK + Batch Message:

    批量消息

    除了 Message Builder,我们还有 Batch Message。这节课 允许您构建消息并提交模板消息 批次,每个帖子最多 1,000 个收件人。使用这个的好处 类是收件人计数被监控并会自动 添加第 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();
    

    【讨论】:

    • 我被 v2 卡住了,我找不到任何文档。你救了我的命:)
    【解决方案2】:

    @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();
    
    

    更多信息请访问documentation

    【讨论】:

      猜你喜欢
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      相关资源
      最近更新 更多