我正在使用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语句来检查它吗?那它会是什么样子呢?
发布于 2010-05-04 10:38:32
您可能希望将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
目录中,您可以查看它们并检查它们是否如预期的那样。
发布于 2010-05-04 12:00:39
marc_s所说的关于try/catch的用法是正确的。
但值得注意的是,SMTP没有交付保证,并且试图计算出实际的交付数量是一门非常不精确的科学。
有些软件尝试使用许多技术,如图像错误和跟踪链接,但这些技术并不完全可靠。
许多服务器会默默地将未知地址的邮件失败,或者如果存在传输错误,以避免向垃圾邮件提供商提供太多信息。
所以,一旦你发送了它,如果没有例外,你只能希望它成功。不过,一种有价值的技术是在用户输入电子邮件地址时使用正则表达式对其进行验证。这有助于在影响邮件传递之前避免一些常见的地址问题。
发布于 2010-05-04 10:45:13
您可以安装和使用DevNullSmtp服务器-它不会发送任何电子邮件,但会记录并显示所有消息和流量。
https://stackoverflow.com/questions/2764516
复制相似问题