出身背景
我们正在构建一个应用程序
例如,发给所有成员的通讯。
考虑
Mailgun在其API中提供了批量发送选项。使用“收件人变量”,可以包含与特定用户配对的动态值。
但是,此批处理发送功能是有限的。每个请求不能发送超过1000个收件人,这意味着我们必须为每组1000个收件人迭代收件人列表(在我们的数据库中)。邮件枪提供了一个使用Python(向下滚动约2/3)如何工作的例子。
问题
与我们自己的循环、变量替换和单个API调用相比,批量发送(即通过单个API调用向一组收件人发送电子邮件,使用收件人变量)有什么优势吗?
我认为这对我们的服务器来说更费力,因为它会自己处理每条消息,而不仅仅是将所有数据卸载到邮件枪的服务器上,以便在他们那端进行繁重的工作。但我也喜欢它的灵活性
对最佳实践有什么想法,或者我们应该考虑的因素?
今天偶然发现了这个问题,觉得它为我最初的问题提供了一个很好的总结/答案。我想把这篇文章作为一个答案,以防其他人有这个问题,但还没有找到这篇邮件。也直接从马的嘴里。简而言之:
对于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();
更多信息请参阅文档。