【问题标题】:ASP.Net - sending emailsASP.Net - 发送电子邮件
【发布时间】:2013-06-06 14:59:40
【问题描述】:

我正在使用 NetMail 从 Web 应用程序中发送电子邮件,并且在没有任何问题的情况下它可以正常工作!我试图捕捉一些错误,特别是错误的电子邮件地址,这应该会导致异常,但似乎没有。我的电子邮件地址是 firstname.dot.middleinitial.lastname@domain_name。我没有故意包含中间首字母以导致错误,但是当我跟踪它通过的代码时。这就是我所拥有的:

SmtpClient sc = new SmtpClient(<Mail_relay>);
sc.Credentials = new NetworkCredential();

try
{
    sc.Send(mm);
}
catch (SmtpFailedRecipientsException FRE)  
{                          
    foreach (SmtpFailedRecipientException smtpFailedRecipientException in FRE.InnerExceptions)  
    {  
        // Get the email that is causing the exception  
        string sFailedRecipient = smtpFailedRecipientException.FailedRecipient;

        // Get the status code  
        SmtpStatusCode sc = FRE.StatusCode;  
    }  
}  
catch (SmtpException smtpEx)
{
    SmtpStatusCode sc = smtpEx.StatusCode;
}
catch (Exception generalEx)
{
    string sMessage = generalEx.Message;
}

我认为错误的电子邮件地址会在第一个 catch 块中被捕获,但事实并非如此,它只是通过所有 catch 块。

【问题讨论】:

    标签: asp.net .net-3.5 smtp asp.net-mail


    【解决方案1】:

    这基本上是由于 SMTP 的工作原理。您必须意识到,当使用 SMTP 作为消息传输时,代码的 catch 部分通常只会在您的机器尝试将消息传递给的服务器不接受消息并返回有效的情况下触发状态,或发送时出现通信错误。根据您发送的机器(即它在您的 netowkr 组织中的位置等),这可能是您可以信赖的全部。

    关键是您的机器尝试将消息传递给的服务器可能不是包含消息应传递到的收件箱的服务器;或者目标 SMTP 服务器在通信期间不对其进行验证(是的,这是可能的)。在后一种情况下,消息会从您的初始通信尝试中异步退回。这是因为有许多邮件服务器只是以极少的验证尽快接收传入的消息,并将它们排队以在单独的线程上进行处理。

    【讨论】:

    • 所以我没有办法检查电子邮件是否真的通过了?我们将未发送的通知存储在数据库表中,应用程序每小时运行一次,检查未发送的消息并重新发送它们。但是,如果由于错误的电子邮件地址而最初没有发送消息,那么存储它是没有意义的;这就是我试图捕捉并阻止存储通知的内容。
    • 无法捕获的“SmtpFailedRecipientsException”有什么用?
    • 如果底层传输协议是 SMTP,没有办法知道消息是否真的发送成功。您在框架中看到的功能是支持您可以知道的其他邮件传输协议(即考虑直接 Exchange 服务器到不使用 SMTP 作为传输的 Exchange 服务器邮件)。这是 SMTP 工作方式的限制,仅仅因为您在 .NET 框架中看到方法和功能并不意味着它们适用于任何/每个消息协议。该框架不仅支持 SMTP。
    • 好的,谢谢您的信息。 API 的名称“SmtpFailedRecipientsException”给我的印象是我可以捕获所有 SMTP 失败的收件人异常。
    【解决方案2】:

    使用这些链接以供参考

    1. Validating an email Address in C#

    2. Regex Email validation

    有两种选择

    1. 您可以创建正则表达式并匹配邮件地址,如果不匹配,则可以抛出异常。

    2. 或者你可以创建 mailaddress 对象并将其放入 try 块中并使用 c# 中构建的 FormatException

    【讨论】:

    • 我不关心验证电子邮件格式,只是将电子邮件发送到格式正确的错误电子邮件地址。
    猜你喜欢
    • 2012-12-11
    • 2016-09-15
    • 2012-07-27
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2011-05-24
    相关资源
    最近更新 更多