来自asp.net c#程序的电子邮件速度非常慢

来自asp.net c#程序的电子邮件速度非常慢,c#,asp.net,email,C#,Asp.net,Email,我正在从asp.net网页向两个收件人发送一封简单的电子邮件。完成执行大约需要15秒。有可能加快速度吗?代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail; namespace NihulKriotNS.BLL { public class EMailClass { //fields private co

我正在从asp.net网页向两个收件人发送一封简单的电子邮件。完成执行大约需要15秒。有可能加快速度吗?代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;

namespace NihulKriotNS.BLL
{
public class EMailClass
{
    //fields
    private const string strFrom = "myEmail";
    private const string mailServer = "myServer";
    private const string userName = "myUserName";
    private const string usePass = "myPassword";
    //ctors
    public EMailClass()
    {
    }

    public void SendEMail(List<string> emailList, string strSubject, string  strMessage, bool isHTML)
              {
        MailMessage msg = new MailMessage();
        msg.From = new MailAddress(strFrom);
        if (emailList != null && emailList.Count > 0 )
            foreach (string em in emailList)
            {
                msg.To.Add(em);
            }
        else
            return;
        msg.Subject = strSubject;
        msg.Body = strMessage;
        msg.IsBodyHtml = isHTML;
        SmtpClient smtp = new SmtpClient(mailServer);
        smtp.Credentials = new System.Net.NetworkCredential(userName, usePass);


        smtp.Send(msg);
        msg.Dispose();
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Net.Mail;
名称空间NihulKriotNS.BLL
{
公共类电子邮件类
{
//田地
private const string strFrom=“myEmail”;
private const string mailServer=“myServer”;
私有常量字符串userName=“myUserName”;
私有常量字符串usePass=“myPassword”;
//演员
公共电子邮件类()
{
}
public void sendmail(列表emailList、字符串strSubject、字符串strMessage、bool isHTML)
{
MailMessage msg=新的MailMessage();
msg.From=新邮件地址(strFrom);
if(emailList!=null&&emailList.Count>0)
foreach(emailList中的字符串em)
{
msg.To.Add(em);
}
其他的
回来
msg.Subject=strSubject;
msg.Body=strMessage;
msg.IsBodyHtml=isHTML;
SmtpClient smtp=新的SmtpClient(邮件服务器);
smtp.Credentials=新系统.Net.NetworkCredential(用户名,usePass);
smtp.Send(msg);
msg.Dispose();
}
}
}

我尝试使用smpt.SendAsync,但毫无帮助。我不知道如何正确使用它。
非常感谢。

早些时候,我收到萨米尔·阿德尔(Samir Adel)的回复(我不记得是谁在评论中确认)使用多线程。由于某种原因,不幸的是,这个答案被删除了。我不熟悉穿线这门学科。我在Andrew Troelsen的《Pro C#2008和.NET 3.5平台》一书中查阅了这个主题。我想出了以下代码:

Thread backgroundThread = new Thread(new ThreadStart(EMailPrepareAndSend));
backgroundThread.Name = "Secondary";
backgroundThread.Start();

其中EMailPrepareAndSend是一个方法,用于准备电子邮件,并从中调用email类中的SendEmail()方法,如我的问题所示。这使得程序能够立即继续,即使电子邮件尚未发送完毕。感谢Samir Adel,他的回答让我走上了正确的方向。

早些时候,我收到了Samir Adel的回答(我不记得是谁在评论中证实了这一点)使用多线程。由于某种原因,不幸的是,这个答案被删除了。我不熟悉穿线这门学科。我在Andrew Troelsen的《Pro C#2008和.NET 3.5平台》一书中查阅了这个主题。我想出了以下代码:

Thread backgroundThread = new Thread(new ThreadStart(EMailPrepareAndSend));
backgroundThread.Name = "Secondary";
backgroundThread.Start();

其中EMailPrepareAndSend是一个方法,用于准备电子邮件,并从中调用email类中的SendEmail()方法,如我的问题所示。这使得程序能够立即继续,即使电子邮件尚未发送完毕。谢谢Samir Adel,他的回答让我找到了正确的方向。

我假设这与smtp服务器的网络调用有关。您使用的主机名需要一段时间才能查找吗?如果使用IP地址会发生什么情况?我假设它可能与smtp服务器的网络调用有关。您使用的主机名需要一段时间才能查找吗?如果您使用IP地址会发生什么情况?可能与您重复欢迎Dov Miller,我也很惊讶为什么我的答案被删除,但我很高兴我的答案帮助您解决了问题。一个名叫Robert Harvey的人甚至没有说明原因就删除了我的答案?!我不熟悉内置异步方法,如果你能给我一个例子,我很乐意使用它。谢谢。@Samir_Adel:罗伯特·哈维是主持人之一。如果他删除了你的答案,可能是因为有人把它标记为低质量,或者不是答案。我没有足够的代表看到你的答案,所以我不能提出一个理由,但你可以问元,如果你想要更多的细节。一般来说,难以阅读/理解或仅包含链接的答案最有可能被删除。欢迎您Dov Miller,我也很惊讶为什么我的答案被删除,但我很高兴我的答案帮助您解决了问题。一个名叫Robert Harvey的人甚至没有说明原因就删除了我的答案?!我不熟悉内置异步方法,如果你能给我一个例子,我很乐意使用它。谢谢。@Samir_Adel:罗伯特·哈维是主持人之一。如果他删除了你的答案,可能是因为有人把它标记为低质量,或者不是答案。我没有足够的代表看到你的答案,所以我不能提出一个理由,但你可以问元,如果你想要更多的细节。一般来说,难以阅读/理解或仅包含链接的答案最有可能被删除。