以下是我的编码,只是看看它
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);
我需要检查邮件是否已发送。
答案 0 :(得分:19)
你做不到。由于您使用SMTP,一般情况下,无法判断传递是否成功。阅读SMTP规范。邮件在发送时被路由,因此:
smtp.Send()
,我们无法保证您的消息会被发送。答案 1 :(得分:9)
您可以将DeliveryNotificationOptions
的{{1}}属性设置为MailMessage
。
此处有更多相关信息: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%可靠。这只是一个选择。
答案 2 :(得分:1)
以下是确保电子邮件可传递性的一些最佳做法:
http://www.kellermansoftware.com/p-37-net-email-validation.aspx
答案 3 :(得分:1)
万一有人偶然发现。这是我在使用Exchange的旧Win 2003服务器上的经验。我的.Net应用程序使用SMTP发送电子邮件并使用组地址作为“发件人”,因此任何回复都将发送给整个组。这是一个调度操作,我们希望小组中的任何人都能协助处理任何回复。我们希望将任何未送达通知发送给该组。它不会发生。我甚至进入了消息跟踪,并看到Exchange表示已将通知发送给该组,但他们从未得到过。接下来,我进入了SMTP虚拟服务器属性,并在“将未送达报告的副本发送到:”中输入了组电子邮件地址。同样的结果,消息跟踪说它将它发送给组但它从未交付。显然,非送达通知仅会发送到非个人的电子邮件地址。我把它改成了一个单独的地址,然后就可以了。
答案 4 :(得分:0)
如果您的代码或SMTP服务器上没有收到任何例外,您可以认为它已经发送。这是电子邮件的问题,没有办法保证交付。
答案 5 :(得分:0)
如果您有权访问包含SMTP日志的服务器,则根据所使用的服务器类型和使用的详细程度,您可以更好地了解交付的实际成功。
例如,如果您使用的是SmarterMail,则可以编写一个简单的解析器来读取smtp日志并向您的应用程序报告。并不是说这不应该是阻止操作,就像你的电子邮件是灰名单一样,它可能需要几分钟才能交付。
另一种选择是创建一个捕获所有“noreply”电子邮件地址,并使用发件人中包含的电子邮件ID发送您的电子邮件,即noreply-bounces-32432@bounces.mydomain.com并使用pop3阅读器检查用于退回电子邮件的收件箱。使用“发件人”中的电子邮件ID,您可以确定哪些电子邮件无法发送。你也可以做一些过滤确定它是“无法交付”还是仅仅是“不在办公室”类型的回复。
有很多选择,只取决于你想要投入多少汗水。