繁体   English   中英

有没有办法看看System.Net.Mail是否有效

[英]Is there way to see if System.Net.Mail worked

我正在使用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句子来查看吗? 那会是什么样子?

您可能希望将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服务器
  • SMTP服务器没有响应
  • SMTP拒绝您发送(例如,因为您没有提供任何或有效的凭据)

一旦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目录中,您可以查看它们并检查它们是否应该如此。

marc_s所说的关于try / catch的使用是正确的。

值得注意的是,虽然没有SMTP的交付保证,并且尝试计算实际的交付数量是一个非常不精确的科学。

某些软件尝试使用许多技术,例如图像错误和跟踪链接,但这些技术并不完全可靠。

许多服务器将无声地使具有未知地址的邮件失败或者如果存在传输错误,以避免向垃圾邮件提供商提供过多信息。

所以一旦你发送它,如果没有例外,你只能希望它成功。 但是,一种有价值的技术是使用正则表达式在用户输入时验证电子邮件地址。 这有助于它们影响邮件传递之前避免一些常见的地址问题。

您可以安装和使用DevNullSmtp服务器 - 它不会发送任何电子邮件,但会记录并显示所有消息和流量。

我会考虑使用第三方服务( 想到smtp.com )来处理消息传递。 这些通常提供跟踪api,可以查询成功交付。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM