15

下面是我的代码,看一下

System.Net.Mail.MailMessage oMail = new System.Net.Mail.MailMessage();
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
oMail.From = new System.Net.Mail.MailAddress("one@gmail.com");
oMail.To.Add(TextBox1.Text.Trim());
oMail.Subject = "Subject*";
oMail.Body = "Body*";
oMail.IsBodyHtml = true;
smtp.Host = "smtp.sendgrid.net";
System.Net.NetworkCredential cred = new System.Net.NetworkCredential("myusername", "mypassword");
smtp.UseDefaultCredentials = false;
smtp.Credentials = cred;
smtp.Send(oMail);

在这里,我需要检查该邮件是否已送达。

4

6 回答 6

20

你不能。由于您使用 SMTP,因此在一般情况下,无法判断传递是否成功。阅读 SMTP 规范。邮件在传递时被路由,因此:

  1. 无法保证您的消息在您致电后立即发送smtp.Send()
  2. 由于 SMTP 已路由,因此您无法确定路由上的某些节点不会因传递到上行链路而失败。
于 2011-08-17T15:13:46.373 回答
9

您可以将 的DeliveryNotificationOptions属性设置MailMessageOnSuccess

这里有更多信息:http: //msdn.microsoft.com/en-us/library/system.net.mail.deliverynotificationoptions.aspx

在这里:http: //msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.deliverynotificationoptions.aspx

正如评论中所指出的,这种方法不是 100% 可靠的。这只是一种选择。

于 2011-08-17T15:13:43.430 回答
1

以下是确保电子邮件送达率的一些最佳做法:

  • 设置一个无回复地址作为实际收件箱,然后使用 pop3 进入电子邮件帐户并查找退回邮件。
  • 在发送之前验证电子邮件地址是否有效,使用类似以下电子邮件验证库的内容:

http://www.kellermansoftware.com/p-37-net-email-validation.aspx

于 2011-08-17T15:26:38.477 回答
1

以防有人偶然发现。这是我在旧的 Win 2003 服务器上使用 Exchange 的经验。我的 .Net 应用程序使用 SMTP 发送电子邮件并使用组地址作为“发件人”,因此任何回复都会发送到整个组。这是一个调度操作,我们希望小组中的任何人都能协助回复。我们希望将任何未交货通知发送给该组。它不会发生。我什至进入了消息跟踪,看到 Exchange 说它向群组发送了通知,但他们从未收到。接下来,我进入 SMTP 虚拟服务器属性并在“将未送达报告的副本发送至:”中输入组电子邮件地址。同样的结果,消息跟踪说它已将其发送到该组,但从未交付。显然,未送达通知只会送达个人而非团体的电子邮件地址。我将其更改为个人地址,并且可以正常工作。

于 2014-02-25T19:46:00.090 回答
0

如果您的代码或 SMTP 服务器上没有收到任何异常,则可以假定它已交付。那是电子邮件的问题,无法保证交付。

于 2011-08-17T15:12:07.720 回答
0

如果您有权访问包含 SMTP 日志的服务器,则根据使用的服务器类型和使用的详细程度,您可能能够更好地了解交付的实际成功。

例如,如果您使用 SmarterMail,您可以编写一个简单的解析器来读取 smtp 日志并向您的应用程序报告。并不是说这不应该是阻止操作,就像您的电子邮件被列入灰名单一样,它可能需要几分钟才能送达。

另一种选择是创建一个捕获所有“noreply”电子邮件地址,并使用包含在发件人中的电子邮件 ID 发送您的电子邮件,即 noreply-bounces-32432@bounces.mydomain.com 并使用 pop3 阅读器检查收件箱是否返回电子邮件。使用“发件人”中的电子邮件 ID,您可以确定哪封电子邮件发送失败。您还可以进行一些过滤以确定它是“无法交付”还是仅仅是“不在办公室”类型的回复。

有很多选择,只取决于你想投入多少汗水。

于 2011-08-17T15:21:34.717 回答