如果有超过1个请求的地址,我如何准备要发送到Mandrill的邮件地址列表

本文关键字:地址 列表 Mandrill 何准备 1个 请求 如果 | 更新日期: 2023-09-27 18:24:25

我正在为我们的客户开发一个使用Mandrill作为后端的群发邮件客户端。Mandrill在其常见问题解答中指出,JSON请求必须小于10MB。因此,我不能只将所有地址添加到一个请求中,而是需要在多个请求中发送它们。

我可以看到两种方法:要么将列表分组(有一个缓冲区)并按组发送,要么一次将它们单独发送到每个地址。我真的不喜欢第二种方法,因为这会用琐碎的请求向Mandrill API发送垃圾邮件,并可能使我被列入黑名单。第一个选项将限制Mandrill API接收的请求数量,并减少我们自己网络的压力,但我不确定使用什么方法来拆分它们。

  • 在我看来,当计数器达到某个数字时,使用带有计数器和特殊逻辑的for循环是一个很容易破解的破解方案
  • 将列表本身拆分为块并分别处理每个块是另一种选择,但我不太知道如何解决

我不知道这两种方法中最好的是什么,是否有更好的第三种方法,或者是否有大规模邮件技术实现的通用指南。我在谷歌上搜索过后一个主题,但没有什么真正有用的。


虽然建议的高级解决方案很有帮助,但我更感兴趣的是将我的列表拆分为1000-5000个联系人的技术方面。有没有一种方法可以使用C#将任意大小的List<Contact>分割成4000个联系人?

如果有超过1个请求的地址,我如何准备要发送到Mandrill的邮件地址列表

您可能应该在Mandrill内部而不是外部管理您的实际邮件列表、组和段-这样您就可以只向API发送一个请求并完成它。您甚至可以在Mandrid中设置计划的邮件发送。

在任何情况下,是的,你可以将列表分割成任意的段-一种方法是在导入System.Linq:后使用.Skip和.Take方法

using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
    public static void Main()
    {
        IList<int> l = new List<int>();
        for(int i = 0; i < 5000; i++){
            l.Add(i);   
        }
        var a = l.Take(1000); //First 1000 items
        var b = l.Skip(1000).Take(1000); //Second 1000 items
        var c = l.Skip(2000); //Final 3000 items
        System.Console.WriteLine("a: " + a.Count());
        System.Console.WriteLine("b: " + b.Count());
        System.Console.WriteLine("c: " + c.Count());
    }
}

您可能最好编写一个扩展方法来处理这一问题,这样您就可以准确地指定每个段中应该有多少项,但基本原理是存在的——它本质上只是分页背后的相同想法。

大多数批量发送的用户通常会将他们的列表分成1000-5000个收件人的批次,因为这一数量的收件人利用了批量发送的优势(这会显著提高您向我们发送电子邮件的速度,因为您没有为每个收件人打开单独的连接),虽然仍然足够小,如果有问题需要进一步的故障排除,您不会为更多的收件人挖掘信息。发送个人电子邮件是不被禁止的,也不会让你被Mandrill列入黑名单,特别是-很多发件人这样做是因为他们发送的是交易性的,或者高度个性化的电子邮件。不过,如果你通常发送相同的内容,这对你来说是低效的。批量处理大大增加了您一次可以发送给我们的邮件数量,然后Mandrill将有效地处理收件人列表的分解和邮件排队。您可能还需要确保在批处理时将preserve_recipients参数设置为false,特别是如果您在一个API调用中发送给数千个收件人。