cdw*_*yer 5 email email-integration html-email mailgun
背景
我们正在构建一个应用程序,通过Mailgun处理和发送电子邮件.这些有时是一次性消息,由事务启动.但是,有些电子邮件会立即发送到30k +.
例如,给所有成员的通讯.
注意事项
Mailgun提供带有API 的批量发送选项.使用"收件人变量",您可以包含与特定用户配对的动态值.
但是,此批量发送功能是有限的.每个请求不能发送超过1,000个收件人,这意味着我们必须遍历每个1,000的收件人列表(在我们的数据库中).Mailgun 使用Python 提供了一个如何工作的示例(向左滚动约2/3).
题
批量发送是否有任何优势(即,使用收件人变量通过单个API调用向一组收件人发送电子邮件),而不是进行自己的循环,变量替换和单个API调用?
我认为这对我们的服务器来说更加沉重,因为它会处理每个消息本身,而不是仅仅将所有数据卸载到Mailgun的服务器上,以便在他们的终端上进行繁重的工作.但我也喜欢在我们的最终处理灵活性和简单性,并一次向Mailgun发送一个"完全呈现"的消息,而不必一次迭代1k.
关于最佳实践的任何想法,或者我们应该考虑的因素?
今天偶然发现了这一点,感觉它为我原来的问题提供了一个很好的总结/答案.我想发布这个作为答案,以防其他人有这个问题并且没有找到这个Mailgun帖子.也直接从马的嘴里出来.坚果壳版本:
对于PHP,至少SDK有一个Mailgun类,带有一个BatchMessage()方法.这实际上处理了对您的收件人计数,因此您可以根据需要排队多个电子邮件地址(即超过1k),并且Mailgun将根据需要启动到API端点.很漂亮!
这是他们原来的措辞,加上页面的链接.
使用Mailgun PHP SDK +批处理消息发送消息:
批量消息
除了Message Builder之外,我们还有Batch Message.此类允许您批量构建消息并提交模板消息,每个帖子最多1,000个收件人.使用此类的好处是收件人计数受到监控,并在您添加第1,000个收件人时自动将邮件提交到端点.这意味着您可以构建消息并开始迭代数据库.忘记发送消息,SDK将在必要时跟踪发布到API.
Run Code Online (Sandbox Code Playgroud)// 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();