c# - 发送失败时重新发送 smtp 电子邮件的循环

标签 c# email smtpclient

我有一个在用户注册后发送电子邮件的服务。每隔一段时间,用户就会联系支持人员提示他们没有收到电子邮件,所以我列出了可能的问题,其中之一是 smtp 无法发送电子邮件,我偶尔会注意到这一点将单步执行代码。我想编写一个简单的循环,尝试在发送失败时重新发送几次电子邮件,但我不确定该怎么做。我将不胜感激有关该主题的任何建议。

public void MusicDownloadEmail(string email)
    {
        try
        {
            var smtp = new SmtpClient();
            var mail = new MailMessage();
            const string mailBody = "Body text";
            mail.To.Add(email);
            mail.Subject = "Mail subject";
            mail.Body = mailBody;
            mail.IsBodyHtml = true;
            smtp.Send(mail);
        }
        catch (Exception ex)
        {                
            var exception = ex.Message.ToString();
            //Other code for saving exception message to a log.
        }
    }

最佳答案

像这样的东西应该可以解决问题:

public void MusicDownloadEmail(string email)
{
    int tryAgain = 10;
    bool failed = false;
    do
    {
        try
        {
            failed = false;

            var smtp = new SmtpClient();
            var mail = new MailMessage();
            const string mailBody = "Body text";
            mail.To.Add(email);
            mail.Subject = "Mail subject";
            mail.Body = mailBody;
            mail.IsBodyHtml = true;
            smtp.Send(mail);
        }
        catch (Exception ex) // I would avoid catching all exceptions equally, but ymmv
        {                
            failed = true;
            tryAgain--;
            var exception = ex.Message.ToString();
            //Other code for saving exception message to a log.
        }
    }while(failed  && tryAgain !=0)
}

关于c# - 发送失败时重新发送 smtp 电子邮件的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24292574/

相关文章:

c# - 如何通过域对象和服务中的验证与 UI 层中的验证保持 DRY

c# - 无法从 Web.Config 读取 appSettings 值

C# ThreadPool上下文切换逻辑

java - 是否可以将输出缓冲到 Log4j Mail Appender?

java - Spring 邮件支持 - 无主题

c# - SmtpClient无法发送;雷鸟可以

c - AUTH 命令时 Hotmail/Outlook.com 连接失败

c# - 为什么忽略 SmtpClient.UseDefaultCredentials?

c# - 将命令参数传递给 WPF 中 ViewModel 中的方法?

email - Amazon LEX native 电子邮件槽类型无法识别以 4 位数结尾的电子邮件