-1

在vs2010上工作,asp.net C#。最近我在smtp服务器上工作。使用我需要发送邮件的smtp服务器,我已经成功地完成了这项工作。要发送邮件,我使用以下语法

public string PostEmail(string mailSubject, string mailBody)
{

    string deliveryStatusCode = "Ok";
    if (!string.IsNullOrEmpty(mailSubject) && !string.IsNullOrEmpty(gConfig.EmailTo))
    {
        MailMessage msg = new MailMessage();
        msg.To.Add(gConfig.EmailTo);
        msg.From = new MailAddress(gConfig.EmailTo);
        msg.Subject = mailSubject;
        msg.Body = mailBody;
        msg.IsBodyHtml = true;

        SmtpClient smtp = new SmtpClient(gConfig.SmtpHost, gConfig.SmtpPort);
        smtp.Credentials = new System.Net.NetworkCredential(gConfig.SmtpCredentials, gConfig.SmtpPassword);
        smtp.EnableSsl = true;
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;


        try
        {
            smtp.Send(msg);
        }
        catch (SmtpException smptpEx)
        {
            deliveryStatusCode = smptpEx.Message;
        }

    }
    else
    {
        deliveryStatusCode = "Invalid or null value entry.";
    }

    return deliveryStatusCode;
}

.现在我面临一个问题,由于某种原因,有些邮件无法发送,那些未发送的邮件需要发送,如何发送那些未发送的邮件,smtp中是否有任何机制来执行这项工作或者有什么方法可以解决这个问题.提前谢谢。如果有任何疑问请询问。

4

2 回答 2

0

您可以使用拾取目录,如果 smpt 服务器已关闭,则不会发送邮件。当它上线时,它将读取目录中的文件并开始发送电子邮件。

于 2011-10-17T07:20:08.733 回答
0

您的 .NET 代码只需接收一条消息,生成并发送电子邮件,然后将其发送到 SMTP 服务器。由 SMTP 服务器重新发送任何未发送的消息。

您可以按照@peer 所说的去做,而不是发送 SMTP 消息,只需将生成的文件放到 SMTP 提取目录中即可,但这需要您的 .NET 代码才能访问 SMTP 提取目录。

另一种选择可能是存储电子邮件对象(在内存中,或在磁盘上序列化),如果send抛出错误,稍后重试。

但是,最终,您确实需要首先找出电子邮件没有通过的原因。这通常是一个配置问题,可以通过一些调查来缓解。查看网络连接、SMTP 服务器正常运行时间,以及最重要的……身份验证。

正如我在评论中所说,生成的电子邮件在最终到达最终用户收件箱之前会进行很多次跳转。如果没有更多关于什么错误的细节,我们只能投掷飞镖并希望其中一个落下。

祝你好运
追逐

于 2011-10-17T16:57:19.030 回答