如何从Web应用程序发送电子邮件

时间:2010-02-06 08:07:29

标签: asp.net mail-server

有一些类似的问题。我只想澄清一部分。

如果我想发送一封电子邮件(最多30个)以响应用户的操作,我会从哪个执行上下文中执行此操作?

  1. 我是否进行同步通话(邮件服务器位于同一数据中心,因此实际发送速度很快)?

  2. 我是否会产生一个线程并从那里发送?这样每个用户请求发送邮件都由新线程处理?

  3. 我是否有处理电子邮件队列的后台线程?
  4. 我认为最大的问题是它是一个共享的虚拟主机。所以我不知道安装/启动Windows服务或启动专用线程的好方法是什么。

    详细信息:使用discauntasp.net smtp服务器在discountasp.net上托管在IIS 7.0集成模式上的ASP.NET MVC应用程序。

    有更好的方法吗?什么是实现这一目标的“标准”方式?

2 个答案:

答案 0 :(得分:1)

是否共享托管,您的线程将只能使用分配给您的资源。如果你只拍摄30个队列,那么你可能想要使用一个队列,因为在这种情况下脱掉30个线程对我来说似乎有些愚蠢。创建线程并关闭它们可能需要更多的处理时间,而不是向邮件服务器发送一封电子邮件。 (半开玩笑)

答案 1 :(得分:1)

大多数数据中心都有一个smtp地址,他们可以为您发送邮件。我只是创建邮件对象并将其发送到本地smtp服务器。如果您没有访问权限,则可以将smtp适配器连接到外部服务并提供其身份验证信息,以便您通过它发送邮件。非本地地址通常需要这样做。

如果您必须发送大量邮件或者您的服务器负载较高,我建议您生成不同的线程,或者如果您有权访问您在可以获取的服务中添加的邮箱项目并将其与您的Web应用程序分开发送。这是因为您的Web应用程序中的线程可能被回收或死亡,如果您最终遇到长时间运行的过程,则可能意味着数据丢失或功能丧失。通过建立队列,您可以为用户提供快速功能,而不会影响QoS。

如果您建议这是一个共享框,那么您将需要生成一个新线程来为您执行此操作。反应式扩展可以为您提供更强大的方法,并且是TPL(任务并行库)的一部分。如果您需要更具体的示例,请与我们联系。