代码之家  ›  专栏  ›  技术社区  ›  THX-1138

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

  •  0
  • THX-1138  · 技术社区  · 15 年前

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

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

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

    2. 我要生成一个线程并从那里发送它吗?这样每个用户发送邮件的请求都会被一个新的线程处理?

    3. 我有处理电子邮件队列的后台线程吗?

    我认为最大的问题是,它是一个共享的Web主机。所以我不知道什么是安装/启动Windows服务或启动专用线程的好方法。

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

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   Middletone    15 年前

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

    如果你必须发送大量的邮件,或者你的服务器负载很高,我建议你要么生成一个不同的线程,要么你可以访问你添加的一个服务框,这个服务可以从你的Web应用程序中提取这些项目并将它们发送出去。这是因为你的web应用中的线程可能被回收或消亡,如果你最终得到一个长时间运行的进程,这可能意味着数据丢失或功能丧失。通过建立队列,您可以在不影响QoS的情况下为用户提供快速功能。

    如果您建议这是一个共享框,那么您将希望生成一个新线程来为您执行此操作。反应式扩展可以为您提供一种更健壮的方法,并且是TPL(任务并行库)的一部分。如果您需要更具体的例子,请告诉我。

        2
  •  1
  •   joejoeson    15 年前

    不管是否共享宿主,线程将只能使用分配给您的资源。如果你一次只打出一个30的队列,那么你可能想使用一个队列,因为在这种情况下旋转30个线程对我来说有点傻。与向邮件服务器发送一封电子邮件相比,创建线程并关闭线程可能需要更多的处理时间。(半开玩笑)