我正在使用NetMail从Web应用程序中发送电子邮件,并且在没有任何错误的情况下工作正常!我试图抓住一些错误,特别是错误的电子邮件地址应该导致异常,但似乎没有。我的电子邮件地址是fisrstname.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块。
答案 0 :(得分:0)
使用这些链接供参考
有两个选项
你可以创建正则表达式并匹配邮件地址,如果它不匹配,那么你可以抛出一个摘要。
或者您可以创建mailaddress对象并将其放入try块并使用FormatException,它在c#中构建
答案 1 :(得分:0)
基本上这是由于SMTP的工作原理。您必须意识到的是,当使用SMTP作为消息传输时,如果您的计算机试图将消息切换为不接受消息并返回有效的服务器,则代码的catch部分通常只会触发。状态,或发送时出现通信错误。根据您发送的机器(意味着它在您的netowkr组织中的位置等),这可能是您可以信赖的所有内容。
关键是您的机器试图将消息传递到的服务器可能不是包含要将消息传递到的收件箱的服务器;或者目标SMTP服务器在通信期间不验证它(是的,这是可能的)。在后一种情况下,消息将从初始通信尝试异步退回。这是因为有许多邮件服务器只需尽可能快地接受传入的消息,并进行非常小的验证,并将它们排队以便在单独的线程上进行处理。