使用smtp发送邮件太慢了

时间:2014-01-17 09:45:47

标签: asp.net smtp

我正在尝试使用SMTP向用户发送邮件。我可以在用户点击发送按钮时发送邮件,但是花费将近7秒钟来向用户发送成功消息太长,并且用户可能会在不知不觉中多次点击按钮,如果花费这么长时间。如果用户单击提交按钮时没有此sendmail()方法,则需要不到一秒的时间,但使用此sendmail()时,它需要花费大约7秒的时间。这个问题可能是什么原因?

        string from = ConfigurationManager.AppSettings.Get("From");
        string pwd = ConfigurationManager.AppSettings.Get("Password");
        string Client= ConfigurationManager.AppSettings.Get("client");
        string port = ConfigurationManager.AppSettings.Get("port");
        string toMail = ConfigurationManager.AppSettings.Get("toaddress");

        NetworkCredential loginInfo = new NetworkCredential(from,pwd);
        MailMessage msg = new MailMessage();
        SmtpClient smtpClient = new SmtpClient(client, int.Parse(port));

        msg.From = new MailAddress(from );
        msg.To.Add(new MailAddress(toMail));
        msg.Subject = "Test Subject";
        msg.Body = "Test Mail"



        msg.IsBodyHtml = true;

        smtpClient.EnableSsl = true;
        smtpClient.UseDefaultCredentials = false;
        smtpClient.Credentials = loginInfo;
        smtpClient.Send(msg);

3 个答案:

答案 0 :(得分:2)

因为这个过程本来就很慢;对Send(msg)的调用将通过邮件服务器进行身份验证,然后验证并发送电子邮件 - 这不会在几毫秒内发生。

我会启动一个新线程来发送邮件: -

public static void SendMail(MailMessage message)
{
    var thread = new Thread(() => Mailer.SendMailThread(message));
    thread.Start();
}

// note - ConfigWrapper just wraps app.config settings
private static void SendMailThread(MailMessage message)
{
    using (var server = new SmtpClient(ConfigWrapper.MailServer))
    {
        server.Credentials = new NetworkCredential(ConfigWrapper.MailUser, ConfigWrapper.MailPassword);
        server.Send(message);
    }
}

(如果您愿意,可以使用较新的Task框架实现相同的目的)

您应该知道,生成的线程中的任何异常都不能(轻松)由调用线程(即页面运行的线程)处理。您应该在SendMail方法中实现某种形式的日志记录来记录任何异常。

答案 1 :(得分:1)

答案 2 :(得分:1)

使用Send()时遇到了同样的问题,尽管每封电子邮件对我来说最多需要20秒:/。与托管服务提供商(云网络服务器和邮件服务器相同)来回聊天后,我仍然没有运气。

我研究了2天,最后在SendGrid.com的文档中发现了一个脚注,其中提到某些托管服务提供商限制/限制 SMTP端口25

https://sendgrid.com/docs/Integrate/index.html

我更改为其他 SMTP端口587 ,时间从20秒降至每封电子邮件不到一秒。

也许试试。