0

我正在使用 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 块。

4

2 回答 2

0

使用这些链接以供参考

  1. 在 C# 中验证电子邮件地址

  2. 正则表达式电子邮件验证

有两种选择

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

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

于 2013-06-06T15:29:29.557 回答
0

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

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

于 2013-06-06T15:37:12.763 回答