Я пытаюсь создать систему для отправки бюллетеней с моего сайта.Как получить сообщение о том, что почта была отправлена через SmtpClient C#
Я создаю его как консольное приложение, которое затем я буду выполнять ежедневно из планировщика окон.
Я хочу, чтобы некоторые системы регистрировались в системе, поэтому я добавляю самую простую функцию журнала.
Письма отправляются штрафом, но я бы хотел написать в журнале, когда отправляется почта. Проблема в том, что я не знаю, как получить событие из 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
Я не вижу, как все строки журнала не были написаны, потому что единственный способ, которым строка журнала «Отправленные письма к:» не будет выполняться, - это если выбрано исключение, а затем почта не должна отправляться. Возможно, вы используете несколько потоков, и ошибка возникает в методе WriteLog? Попробуйте записать его в консоль/debug вместо файла и посмотреть, выводит ли он все письма. –
Если я добавляю Console.ReadLine() в конце основного метода и просто позволяю ему сидеть и ждать. Все строки написаны. Если нет, кажется, что некоторые из последних журналов не написаны, хотя письма отправляются ... Это все. – Jesper