2010-05-04 40 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的交付保證,並且嘗試計算出實際交付號碼是非常不精確的科學。

    有一些軟件嘗試使用的技術有很多,例如圖像錯誤和跟蹤鏈接,但這些技術並不完全可靠。

    許多服務器會悄然失敗一條未知地址的消息,或者如果有傳輸錯誤,以避免給垃圾郵件提供商太多的信息。

    所以一旦你發送了它,如果沒有例外,你只能希望它成功。但一個有價值的技術是使用正則表達式在用戶輸入時驗證電子郵件地址。這有助於避免之前的一些常見地址問題它們影響郵件傳遞。

    相關問題