我正在尝试建立一个从我的网站发送简讯的系统。
我正在构建它作为控制台应用程序,然后我将每天从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();
}
那么,如何更改代码,以便在程序实际知道邮件是否已发送后我可以编写日志...
答案 0 :(得分:1)
如果你执行不是异步的行client.Send(mail);
并且它没有抛出异常,则意味着邮件已被发送。
无论是否发送,您都无法看到由smtp服务器处理的内容,据我所知,SmtpClient不支持该事件。
答案 1 :(得分:0)
SmtpClient sc = new SmtpClient();
sc.SendCompleted + = new SendCompletedEventHandler(SendAsyncCallback);
答案 2 :(得分:0)
您的代码本身就是这样做的。如果WriteLog()
写入Sent Email to...
,则表示邮件已被发送,而不是。