【发布时间】:2011-11-16 05:52:43
【问题描述】:
当我使用 System.Net.Mail 发送邮件时,邮件似乎不会立即发送。他们需要一两分钟才能到达我的收件箱。一旦我退出应用程序,所有消息都会在几秒钟内收到。是否有某种邮件消息缓冲区设置可以强制 SmtpClient 立即发送消息?
public static void SendMessage(string smtpServer, string mailFrom, string mailFromDisplayName, string[] mailTo, string[] mailCc, string subject, string body)
{
try
{
string to = mailTo != null ? string.Join(",", mailTo) : null;
string cc = mailCc != null ? string.Join(",", mailCc) : null;
MailMessage mail = new MailMessage();
SmtpClient client = new SmtpClient(smtpServer);
mail.From = new MailAddress(mailFrom, mailFromDisplayName);
mail.To.Add(to);
if (cc != null)
{
mail.CC.Add(cc);
}
mail.Subject = subject;
mail.Body = body.Replace(Environment.NewLine, "<BR>");
mail.IsBodyHtml = true;
client.Send(mail);
}
catch (Exception ex)
{
logger.Error("Failure sending email.", ex);
}
谢谢,
标记
【问题讨论】:
-
请注意,当我给自己发一封电子邮件时,它几乎是立即通过的,所以它不是 smtp 服务器。
-
使用发送。我刚刚添加了我的辅助方法...
-
您的服务器是本地的(例如您的本地 IIS)还是远程服务器(或服务——如 SendMail)?
-
SmtpClient池连接。因此,SmtpClient实例不知道您何时完成。Dispose告诉SmtpClient实例您已完成并在所有已建立的连接上发送QUIT消息,然后关闭 TCP 连接,然后释放套接字。因此,将您对SmtpClient的使用包装在一个using块中,或者在您调用SmtpClient.Dispose的地方添加一个finally块。
标签: c# smtp smtpclient system.net.mail mailmessage