我正在嘗試構建一個從我的網站發送簡訊的系統。我如何得到郵件通過SmtpClient C#發送的事件
我正在構建它作爲控制檯應用程序,然後我將從Windows調度程序每天執行。
我想在系統中進行一些日誌記錄,所以我添加了最簡單的日誌「功能」。
郵件發送正常,但我想在郵件發送時寫入日誌。問題是我不知道如何在發送郵件或郵件未發送時從SmtpClient獲取事件。
public void SendMails(List<Agent> agents, string logfilename)
{
foreach (Agent agent in agents)
{
MailMessage mail = new MailMessage();
mail.....
SmtpClient client = new SmtpClient();
client.....
try
{
client.Send(mail);
WriteLog(logfilename, "Sent mail to: " + mail.To[0].Address);
}
catch (SmtpException smtpexception)
{
WriteLog(logfilename, "SMTP EXCEPTION: " + smtpexception.Message);
}
catch (Exception e)
{
WriteLog(logfilename, "EXCEPTION: " + e.Message);
}
}
}
public void WriteLog(string filename, string message)
{
TextWriter tw = new StreamWriter(@"c:\MailLogs\" + filename + ".txt");
tw.WriteLine(message);
tw.Close();
}
所以,我該如何更改代碼,這樣我就可以寫日誌後,這個程序實際上知道郵件是否發送或不...
是的,但郵件將排隊在smtp服務器上,程序結束之前可能會拋出任何異常,因爲例外被延遲。我試着用幾個地址進行測試,併發送了所有的郵件,但並不是所有的日誌文件都被寫入了。 – Jesper 2012-01-09 12:02:51
我無法看到所有的日誌行是如何寫入的,原因是「發送郵件到:」日誌行不會執行的唯一方式是如果拋出異常並且不應該發送郵件。您是否正在使用多個線程,並且在WriteLog方法中發生錯誤?嘗試將其寫入控制檯/調試而不是文件,並查看是否輸出所有郵件。 – 2012-01-09 12:15:55
如果我在主方法的末尾添加Console.ReadLine(),並讓它坐在那裏等待。所有行都寫入。如果沒有,即使郵件被髮送,似乎最後一些日誌也沒有被寫入......這就是事實。 – Jesper 2012-01-09 12:18:14