.NET 邮件 - 如果地址无效,邮件永远不会出现异常。 - C#

.NET Mail - mail never hits exception if the address is invalid. - C#

阅读多篇关于 .net 邮件投递通知的帖子并测试多项内容:

虽然我仍然卡住了。我想要完成的是以下内容:我只想知道邮件发送到的电子邮件地址是否有效,而不是有效格式但有效:电子邮件地址是否存在。

有时用户会向一个地址发送电子邮件,但不小心输入了 1 个字母错误,邮件是有效的,因为它包含域和 @,但邮件地址不存在。发件人会认为它已正确发送,因为他们没有收到任何通知。

我想确保发件人收到未送达的通知。

例如,当使用代码通过 Outlook 发送邮件时,如果邮件地址不存在,您会自动收到未送达的邮件,但是使用 SMTP(我)就没那么幸运了。我用这段代码试了一下:

 using (var msg = new MailMessage())
 using (var client = new SmtpClient("spamfilter.mySpamFilter.com", 587))
        {

           msg.IsBodyHtml = true;
           msg.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

           msg.From = new MailAddress(FromAddress);

           msg.To.Add(TO);

           msg.Body = Body;
           msg.Subject = Subject;

           //Send mail
           try
           {
               client.Send(msg);
           }
           catch (SmtpFailedRecipientsException ex)
           {

               throw ex;
           }
        }

对于 To 地址,我创建了一个 100% 无效的地址。但是,从未达到异常。

垃圾邮件过滤器可能是问题所在吗?例如,当我检查垃圾邮件过滤器时,我可以看到邮件具有无效电子邮件地址的 refused 发送状态,但 action statusallowed(因此没有垃圾邮件)。所以看起来垃圾邮件过滤器永远不会 returns 将异常返回给代码。

或者我想要实现的目标是不可能的?

垃圾邮件过滤器:

我认为您不会在此处遇到错误,因为 To 方法采用字符串或 MailAdress,后者也采用字符串作为输入。

因此这里将接受每个地址。 您是否尝试放置一些不允许的字符,例如 ' " % 或类似的字符? 我想你会在这里得到一个例外。 其他一切都将转发给 smtp,他将负责交付,而不是您的 C# 代码。

问候 安德烈