我正在使用System.Net.Mail发送电子邮件,如下所示:
MailMessage message = new MailMessage();
message.From = new MailAddress("foo@foo.com");
message.To.Add(new MailAddress("foobar@foobar.com"));
message.Subject = "Hello";
message.Body = "This is a nice body..";
SmtpClient client = new SmtpClient();
client.Send(message);
我怎么知道电子邮件是否已发送,我可以用if句子来查看吗? 那会是什么样的?
答案 0 :(得分:6)
您可能希望将SMTP调用包装到try...catch
块中 - 这样您就可以轻松捕获可能发生的任何明显的SMTP相关错误:
try
{
SmtpClient client = new SmtpClient();
client.Send(message);
}
catch(Exception exc)
{
// log the error, update your entry - whatever you need to do
}
这将处理最明显的错误,例如
一旦SMTP服务器收到您的消息,它就不在您的.NET手中....您实际上做不了多少(除了检查SMTP服务器的日志是否有错误)。
如果您想检查并查看您的SMTP邮件是否“已发送”,您还可以将这些代码行添加到您应用的app.config(或web.config)中,并让.NET将您的邮件放入目录(作为EML文件):
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="C:\temp\mails"/>
</smtp>
</mailSettings>
</system.net>
您的邮件现在将作为EML文件存储在C:\temp\mails
目录中,您可以查看它们并检查它们是否应该是这样。
答案 1 :(得分:2)
marc_s所说的关于try / catch的使用是正确的。
值得注意的是,尽管SMTP没有交付保证,但尝试计算实际的交付数量是一个非常不精确的科学。
某些软件尝试使用多种技术,例如图像错误和跟踪链接,但这些技术并不完全可靠。
许多服务器会默默地使用未知地址或传输错误的邮件失败,以避免向垃圾邮件提供商提供过多信息。
所以一旦你发送它,如果没有例外,你只能希望它成功。但是,一种有价值的技术是使用正则表达式在用户输入时验证电子邮件地址。这有助于避免之前的某些常见地址问题影响邮件传递。
答案 2 :(得分:0)
您可以安装和使用DevNullSmtp服务器 - 它不会发送任何电子邮件,但会记录并显示所有消息和流量。
答案 3 :(得分:0)
我会考虑使用第三方服务(smtp.com)来处理消息传递。这些通常提供跟踪api,可以查询成功交付。