使用ASP.NET发送电子邮件

时间:2010-12-13 18:25:52

标签: c# asp.net newsletter

我正在建立一个网站,客户想要一个简报“系统”。 如何发送此类群发(> 1000)电子邮件?

我在某处读到使用smtpclient的sendasync方法可以解决这个问题。 但它经常给我一个“电子邮件faliure”例外。而且,我不知道该怎么做...

所以,基本上我的问题是,是否可以使用smtpclient的SEND方法发送电子邮件,但每封邮件都是自己的帖子。

例如。

   NewsletterEmail newsletterEmail = new NewsletterEmail(emailAdress[i], mailSubject, mailBody);
    Thread t = new Thread(new ThreadStart(newsletterEmail.MakeAndSendEmail));
    t.IsBackground = true;
    t.Start();

6 个答案:

答案 0 :(得分:3)

我认为,您应该重新考虑发送批量电子邮件的初学者

创建> 1000个线程不是一个好主意,它甚至可能使服务器崩溃,或者它可能使您的服务器响应非常慢。

答案 1 :(得分:3)

告诉您的客户Constant Contact。他们将比你更好地处理这个问题。它也比你的时间便宜。

如果失败,您有几个选择。

如果他们已经拥有电子邮件服务器,请利用它来进行电子邮件广播。换句话说,通过该服务器中继邮件。

如果您不能这样做,请下载免费的电子邮件服务器。我一直在使用hMailserver。设置它并通过它进行中继。

如果您不能这样做,请编写自己的SMTP处理引擎。不要尝试直接从ASP.Net发送电子邮件。将它们排入数据库并编写Windows服务来处理邮件广播。

每封电子邮件有时会发送几秒钟的电子邮件。当它试图处理发送1000封电子邮件时,这可能会完全阻塞您的网站。

许多邮件服务器都配置了灰色列表,这意味着它们要求您发送两次相同的电子邮件,以证明您不是垃圾邮件发送者。

接下来,正确设置DNS可以是PITA。这就是为什么我建议constant contact。我有一个客户花了将近5年的时间才最终得到他们的DNS配置;是的,我每年都会给他们一次明确的指示。反向DNS至关重要。

另一件事是,某些收件人服务器对他们一次接受的线程数量有限制。大多数邮件服务器都是为了考虑这一点而构建的。如果您越过该边界,则收件人服务器将认为您是垃圾邮件发送者并采取适当的措施。

另一个问题是一次又一次地向坏地址发送。 AOL和其他人会认为你只是一个垃圾邮件发送者。

重点是,你真的不想自己写这个。

答案 2 :(得分:2)

您最好的选择是让一个单独的流程发送电子邮件。是否按计划运行以检查需要发送的电子邮件(可能将电子邮件存储在表中?),或者,如果您不喜欢计划的流程创意,那么您可以启动一个启动的控制台应用程序通过您的网站。

要记住的其他事项是,如果您在短时间内发送了太多电子邮件,则很容易被黑名单列出,然后您域中的任何电子邮件都不会出现在任何服务器上你有黑名单吗?

答案 3 :(得分:0)

我采取了两种方法:

1)通过发送

完成配置asp.net进程超时的懒惰,草率方法

2)创建由Web应用程序生成的控制台应用程序。

答案 4 :(得分:0)

我在一两年前建立了一个类似的系统。当您以编程方式发送电子邮件时,可能会出现很多问题。出于这个原因,请帮助自己,并分发发送过程中的消息。通过这种方式,您可以“教导”您的系统应忽略“badEmail@goodDomian.com”或其他类似情况。

您可以在数据库中存储所需数据的消息,主题或任何级别,以及“SentOn”,“FailedOn”等元数据的标记。我一次发送一条消息允许存储和/或处理个别错误。我使用SmtpMail.Send(),但只要你构建了一些智能且可恢复的东西,你选择的任何方法都应该有效。

答案 5 :(得分:0)

相关问题