立即发送电子邮件

时间:2012-03-14 09:45:52

标签: c# asp.net vb.net

简短的想法:我正在开发一个小型的社交网站。

现在有一个拥有100名粉丝的用户“A”...现在我想做的是每当用户“A”在网站上提交一篇文章时,他的所有粉丝都应该收到一封带有文章链接的电子邮件...没关系,我可以做到。

问题:现在,页面上有一个提交按钮,用于将文章存储在数据库中并向关注者发送电子邮件...因为有很多关注者需要花费大量时间发送电子邮件...所以页面一直显示加载消息,直到所有的电子邮件都被发送..我可以如何异步发送所有的电子邮件?

我的意思是在文章提交之后......电子邮件应该自动发送给关注者,而不会在按钮的点击事件中放置电子邮件发送功能....希望不要让大家感到困惑。

我可以做一些事情,比如将文章存储在数据库中,重定向到文章页面,自动开始每10分钟发送10封电子邮件...这个过程应该在文章提交后立即开始用户。

4 个答案:

答案 0 :(得分:3)

我在批量电子邮件和各种其他长期运行的任务中遇到了类似的问题。

我开发了一个包含作业管理器的窗口服务。当作业需要从主MVC应用程序运行时,Web应用程序通过HTTP与服务进行通信(实际上,使用JSON),并且该服务可以执行实际发送电子邮件或执行其他长时间运行的任务。

这意味着Web应用程序请求立即返回。

Web应用程序还可以轮询服务以确定正在运行的任何特定作业的状态(每个作业都有唯一的标识符)。

答案 1 :(得分:0)

我会创建一个数据库表,其中包含有关所有待处理电子邮件通知的信息。

点击提交时,您可以快速向此表添加行 然后,后台线程可以检查表并发送邮件(当然也可以从表中删除成功发送的邮件)。

答案 2 :(得分:0)

您是否考虑过使用AJAX实现它?

当用户按下提交按钮,而不是回发到服务器时,创建2个ajax调用: 第一个是将文章保存到存储库(数据库?)。

从服务器收到成功的答案(可以包含文章ID)后,调用第二个ajax调用来发送邮件。服务器可以启动一个线程来发送邮件,以便立即回复客户端。

我调用ajax调用的首选方法是使用JQuery:

$.ajax({
    type: "POST",
    url: "services.aspx/SubmitArticle",
    data: "{articlecontent: '[put here the content you want to send]'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    error: function(response) {
      // Handle Error here. The response object contains the error details 
    },
    success: function(response) {
      // Check here if the article has been saved:
      // response.d property contains the server answer. It can be boolean,
      // integer, string or any other complex object

      // If article saved, invoke here the send mail ajax call. assuming the response.d contains
      // the article id:
      sendMails(response.d);

     // sendMails invokes another ajax similiar to this code snippest
    }
});

在服务器端,异步电子邮件发送方法可能如下所示:

 [WebMethod]
 public static bool SendMails(int articleId)
 {
     // Add the actual method that send mail to the thread pool
     ThreadPool.QueueUserWorkItem(new WaitCallback(DoSendMail), articleId);

     return true;
 }

 private void DoSendMail(object a)
 {
   int articleId = (int)a;
   // Your code that sends mails goes here
 }

答案 3 :(得分:-1)

您可以使用MassTransitZMQMSMQ等排队系统。

或者......如果你真的想创建一个很酷的应用程序,你可以将电子邮件任务传递给node.js应用程序!?