提交时发送邮件会减慢表单速度

本文关键字:表单 速度 提交 | 更新日期: 2023-09-27 18:36:25

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

代码隐藏

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;
   }

有什么可以加快速度的吗?我最大的问题是人们不认为他们点击了提交并再次点击它。我知道我可以在他们单击"提交"按钮后将其变灰,但我希望有一些我以前不知道的速度改进。

提交时发送邮件会减慢表单速度

我经常参与具有大规模邮件需求的部署。你是对的 - 电子邮件确实会大大减慢应用程序的速度,这就是为什么我们从不直接从应用程序本身发送电子邮件的原因。

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

我们总是选择以下两个选项之一,两者都可以很好地扩展:

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

  2. 数据库。将您的电子邮件写到数据库中,然后继续。编写一个单独的应用程序或服务来接收电子邮件并处理。同样,可以很好地扩展,但通常不如消息队列。

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

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

没有什么比向客户发送一封"谢谢,您的订单已发货"的电子邮件,然后在处理管道中发现您缺货更糟糕的了!

希望这有帮助。

在单独的线程上执行邮件提交,同时向用户呈现结果。如果邮件提交失败,请将电子邮件写出到本地磁盘,以便在进程死亡时查看一些内容。

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