Background
我们正在构建一个应用程序,通过Mailgun处理和发送电子邮件 . 这些有时是一次性消息,由事务启动 . 但是,有些电子邮件会立即发送到30k .
例如,给所有成员的通讯 .
Considerations
Mailgun提供了一个带有API的Batch Sending选项 . 使用"Recipient Variables",您可以包含与特定用户配对的动态值 .
但是,此批量发送功能是有限的 . 每个请求不能发送超过1,000个收件人,这意味着我们必须遍历每个1,000的收件人列表(在我们的数据库中) . Mailgun provides an example这是如何工作的,使用Python(向左滚动约2/3) .
Question
批量发送是否有任何优势(即,使用收件人变量通过单个API调用向一组收件人发送电子邮件),而不是进行自己的循环,变量替换和单个API调用?
我认为这对我们的服务器来说更加沉重,因为它会处理每个消息本身,而不是仅仅将所有数据卸载到Mailgun的服务器上,以便在他们的终端上进行繁重的工作 . 但我也喜欢在我们的最终处理灵活性和简单性,并一次向Mailgun发送一个“完全呈现”的消息,而不必一次迭代1k .
关于最佳实践的任何想法,或者我们应该考虑的因素?
1 回答
今天偶然发现了这一点,感觉它为我原来的问题提供了一个很好的总结/答案 . 我想发布这个作为答案,以防其他人有这个问题并且没有找到这个Mailgun帖子 . 也直接从马的嘴里出来 . 坚果壳版本:
至少对于PHP,SDK有一个
Mailgun
类,带有BatchMessage()
方法 . 这实际上处理了对您的收件人计数,因此您可以根据需要排队多个电子邮件地址(即超过1k),并且Mailgun将根据需要启动到API endpoints . 很漂亮!这是他们原来的措辞,加上页面的链接 .
Sending a message with Mailgun PHP SDK + Batch Message:
$ mgClient = new Mailgun(“关键示例”);
$ domain =“example.com”;
//接下来,从SDK中实例化Message Builder对象,传入您的发送域 .
$ batchMsg = $ mgClient-> BatchMessage($ domain);
//定义发件人地址 .
$ batchMsg-> setFromAddress( “dwight@example.com”
array(“first”=>“Dwight”,“last”=>“Schrute”));
//定义主题 .
$ batchMsg-> SETSUBJECT( “救命啊!”);
//定义消息正文 .
$ batchMsg-> setTextBody(“打印机着火!”);
//接下来,让我们为批处理作业添加一些收件人 .
$ 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”));
// ...等......等等......
// 1000个食谱后,
// Batch Message会自动将您的消息发布到消息 endpoints .
//调用finalize()以发送仍在缓冲区中的所有剩余收件人 .
$ batchMsg->完成();