6

当我使用 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);
    }

谢谢,

标记

4

2 回答 2

10

试试这个,如果你使用的是 Dotnet 4.0

using (SmtpClient client = new SmtpClient(smtpServer))  
{
    MailMessage mail = new MailMessage();
    // your code here.

    client.Send(mail);
}

这将处置您的client实例,使其使用 QUIT 协议元素结束其 SMTP 会话。

如果您停留在较早的 dotnet 版本上,请尝试安排为您的程序发送的每条消息重新使用相同的 SmtpClient 实例。

当然,请记住,电子邮件本质上是一个存储转发系统,从 smtp 发送到接收的延迟没有任何同步(甚至是正式可预测的)。

于 2011-09-13T15:12:46.510 回答
0

我同意奥利的观点。要回答您的问题,不,我不相信您可以通过表单设置任何缓冲区设置。

您的问题令人困惑的是,您说消息需要一两分钟才能到达您的收件箱,但接着说,当发送给自己时,他们会立即通过……我相信您的意思是在内部,消息发送很好,问题只发生在外部地址。在这种情况下,听起来您的电子邮件服务器可能会将这些消息排在其他发往外部地址的电子邮件后面(这是正常活动)。在外部站点上等待一两分钟的电子邮件并不是等待的时间。

但是,这不太可能,但是您的交换服务器是否设置为扫描传出消息?

于 2011-09-13T15:25:20.943 回答