提交邮件时发送速度慢下来

时间:2013-10-22 21:50:25

标签: c# asp.net webforms smtpclient

所以我有一个典型的网络表单,我注意到在我到达下一个屏幕之前提交表单时有很长的延迟。在玩完之后我发现它是导致延迟的MailMessage部分。我希望有人看一下这个,并就如何改进这一点给我一些建议,以加快我的提交。

背后的代码

protected void Submit_Click(object sender, EventArgs e)
    {
         blah blah blah...

        StringBuilder sb = new StringBuilder();
        sb.Append("<html><body>");
        sb.Append("Success!!");
        sb.Append("</body></html>");
        MailMessage msg = new MailMessage();
        SmtpClient server = new SmtpClient("");
        msg.To.Add(toaddress);
        msg.From = new MailAddress(fromaddress, fromname);
        msg.Subject = "New Submission";
        msg.Body = sb.ToString();
        msg.IsBodyHtml = true;
        server.Send(msg);

        messageLabel.Text = "Your submission has been sent!";
        messageLabel.Visible = true;
   }

有什么办法可以加快速度吗?我最大的问题是人们没有想到他们点击了提交,他们再次点击它。我知道点击它后我可以将提交按钮变灰但我希望能提高速度,我以前没有意识到。

2 个答案:

答案 0 :(得分:3)

我经常参与大规模邮件发送要求的部署。你是对的 - 电子邮件确实会大大降低应用程序的速度,这就是我们永远不会直接从应用程序本身发送电子邮件的原因。

我们也很少在大型应用程序中使用多线程 - 没有足够的线程可以绕过。

我们总是选择两个选项中的一个,两者都很好地扩展:

  1. 消息队列,例如MSMQ。将电子邮件写入消息队列,然后让一个或多个“服务器”接收出站邮件。可以无限添加服务器。企业的可扩展性。

  2. <强>数据库即可。将您的电子邮件写入数据库,然后继续。编写一个单独的应用程序或服务来获取电子邮件和进程。同样,可以很好地扩展,但通常不如消息队列。

  3. 这两种方法都有一个非常有用的好处:交易。您可以在TransactionScope中包装这两个选项,这意味着,如果在此过程中出现任何其他错误,您可以在电子邮件实际发送之前回滚。

    只有100%已提交的交易最终会被转换为出站电子邮件。

    没有什么比向客户发送电子邮件更糟糕的了“谢谢,您的订单已被发送”,然后在处理管道中发现您实际上已经缺货!

    希望这有帮助。

答案 1 :(得分:0)

在将结果呈现给用户时,在单独的线程上执行邮件提交。如果邮件提交失败,请将电子邮件写入本地磁盘,以便在进程终止时查看。

在应用程序状态或某个静态字段中存储对消息发送结果的引用,以便用户可以查看稍后是否成功发送消息。

相关问题