C#发送大量电子邮件

7

我想知道使用System.Net.Mail和C#发送批量电子邮件的最佳方法。

是否分批发送电子邮件是个好主意?

应该使用收件人字段还是密送字段?


你具体遇到了什么问题? - Oded
3个回答

6
我更喜欢使用“收件人”字段,逐一发送电子邮件,而不是使用BCC字段。这样,接收者会在“TO”字段中看到他的电子邮件地址(更少受到垃圾邮件的影响),并且您可以在未来为每个用户个性化电子邮件。
对于发送,您应该使用批处理来防止超时和服务器负载过重。您可以使用队列来存储所有的电子邮件,并使用可配置的时间表使用服务、计划任务或其他方式进行发送。

2
如果您要给多个收件人发送单封电子邮件,且这些收件人互不认识,那么一定要使用BCC字段,否则您会向陌生人泄露他们的电子邮件地址,从而惹怒很多人(而且根据您所在的地区,您可能还会违反某些数据保护法)。请注意保留HTML标签。

0

使用MailKit发送批量邮件,您需要通过NuGet管理器导入它,在Gmail中设置https://myaccount.google.com/lesssecureapps?pli=1以开启。

    public void ReadFileAndSend()
    {
        using (StreamReader reader = new StreamReader(@"d:\Email.txt"))
        {
            while (!(reader.ReadLine() == null))
            {
                String line = reader.ReadLine();
                if (line != "")
                {
                    try
                    {
                        Send("", line.Trim());
                        Thread.Sleep(500);
                    }
                    catch
                    {

                    }
                }

            }
            Console.ReadLine();
        }
    }

    public void Send(String FromAddress,String ToAddress)
    {
        try
        {

            string FromAdressTitle = "";

            string ToAdressTitle = "";
            string Subject = "";
            string BodyContent = "";
            string SmtpServer = "smtp.gmail.com";
            int SmtpPortNumber = 587;

            var mimeMessage = new MimeMessage();
            mimeMessage.From.Add(new MailboxAddress(FromAdressTitle, FromAddress));
            mimeMessage.To.Add(new MailboxAddress(ToAdressTitle, ToAddress));
            mimeMessage.Subject = Subject;
            mimeMessage.Body = new TextPart("html")
            {
                Text = BodyContent

            };

            using (var client = new MailKit.Net.Smtp.SmtpClient())
            {

                client.Connect(SmtpServer, SmtpPortNumber, false);
                client.Authenticate("your email", "pass");
                client.Send(mimeMessage);
                Console.WriteLine("The mail has been sent successfully !!");
                client.Disconnect(true);

            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接