发送电子邮件,无需等待操作完成执行

时间:2012-10-17 18:46:40

标签: javascript asp.net c#-4.0 sendmail

我试图通过发送电子邮件来避免等待时间 在退出页面之前。

页面/应用程序在退出之前执行一系列操作,如下所示:

  1. 数据库互动
  2. 发送电子邮件(更新经理有关该交易)
  3. 退出页面/应用程序。
  4. 功能背后的代码:

        ExecEntryOnTbl(SQL);// <-- update / insert to database 
        sendMailNote(action);// <-- send mail with notification of update 
    
        exitTC(action, custid);<-- exit page.
    
        done via javascript :
        window.location.href = "someOtherPage.aspx"
        from code behind via 
        RegisterClientScriptBlock(...)
    

    我想解决这个问题:

    我怎样才能避免等待sendMailNote()完成 在执行exitTC()之前。那可能吗?

    • 更新电子邮件类/方法

      public static class mail
      {
          public static string aReciver, bSubject, cBody;
          public static void sendMailNoteExc()
          {
      
              string SmtpServer = "smtp.gmail.com";
              int port = 111;
              string sender = "aaa@bbb.com";
              string ReCiver = aReciver;
              string Subject = bSubject;
              string Body = cBody;
              string account = "acc@domain.com";
              string Pass = "a123456";
              Send(SmtpServer, port, account, Pass, sender, ReCiver, Subject, Body);
      
          }
          public static void Send(string smtpServer,int Port,string Account, string PassWord, string From, string To, string Subject, string Body)
          {
      
              MailMessage mail = new MailMessage();
              SmtpClient SmtpServer = new SmtpClient(smtpServer);
      
              mail.From = new MailAddress(From);
              mail.To.Add(To);
              mail.Subject = Subject;
              mail.Body = Body;
      
      
              SmtpServer.Port = Port;
              SmtpServer.Credentials = new System.Net.NetworkCredential(Account, PassWord);
              SmtpServer.EnableSsl = true;
      
              SmtpServer.Send(mail);
      
      
          }
      }
      

3 个答案:

答案 0 :(得分:3)

只要您使用的是C#4.0,就可以利用Task Parallel Library并在后台线程中运行sendMailNote(action),如下所示:

Task.Factory.StartNew(() => sendMailNote(action));

请确保添加代码以处理发送电子邮件期间发生的任何异常。但是,更好的解决方案是从用户界面代码中完全删除此逻辑,并在后台任务(如Windows服务或云工作者角色)中执行它。

答案 1 :(得分:2)

在另一个帖子中执行。因此,您的主线程将不会等待电子邮件发送。

ExecEntryOnTbl(SQL);// <-- update / insert to database 

ThreadStart sendMail = delegate()
{
    sendMailNote(action)
};

Thread thread = new Thread(sendMail );
thread.IsBackground = true;
thread.Start();

exitTC(action, custid);<-- exit page.

done via javascript :
window.location.href = "someOtherPage.aspx"
from code behind via 
RegisterClientScriptBlock(...)

答案 2 :(得分:0)

您可以将电子邮件信息保留到数据库,并拥有实际发送邮件的后台cron作业。