2010-05-04 32 views
4

我使用System.Net.Mail发送电子邮件,就像这样:有没有办法,看看是否System.Net.Mail工作

MailMessage message = new MailMessage(); 

message.From = new MailAddress("[email protected]"); 
message.To.Add(new MailAddress("[email protected]")); 


message.Subject = "Hello"; 
message.Body = "This is a nice body.."; 

SmtpClient client = new SmtpClient(); 
client.Send(message); 

我怎么能知道,如果电子邮件发送,我可以放入一句话来检查吗? 那么它会是什么样子?

回答

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拒绝你送(未找到
    • 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> 
    

    您的邮件现在将存入C:\temp\mails目录EML文件,你可以看看他们,并检查他们是否因为他们应该。

  • +0

    好吧,我usally使用尝试和赶上,但有时我看到人们使用IF如果不工作,然后这.. – eski 2010-05-04 10:44:13

    +0

    我认为TryCatch是异常的情况下IfElse的同义词。 – Amsakanna 2010-05-04 11:07:58

    +1

    +1非常好。我不知道传递方法。 – Steven 2010-05-04 11:47:23

    0

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

    0

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

    2

    什么marc_s说是正确的使用try/catch。

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

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

    许多服务器会悄然失败一条未知地址的消息,或者如果有传输错误,以避免给垃圾邮件提供商太多的信息。

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

    相关问题