Как получить событие, что письмо было отправлено через SmtpClient C # - PullRequest
0 голосов
/ 09 января 2012

Я пытаюсь создать систему для отправки информационных бюллетеней с моего веб-сайта.

Я создаю ее как консольное приложение, которое я буду ежедневно выполнять из планировщика 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();
}

Итак, как мне изменить код, чтобы я могнапишите журнал после того, как программа действительно узнает, отправлено письмо или нет ...

Ответы [ 3 ]

1 голос
/ 09 января 2012

, если вы выполняете строку client.Send(mail);, которая не является асинхронной и не выдает исключение, это означает, что письмо было отправлено.

Независимо от того, доставлено оно или нет, вы не сможете увидеть, как оно обрабатывается вашим SMTP-сервером, и, насколько мне известно, SmtpClient не поддерживает событие для этого.

0 голосов
/ 09 января 2012

Ваш код сам делает это сейчас. Если WriteLog() пишет Sent Email to..., это означает, что почта была отправлена ​​иначе.

0 голосов
/ 09 января 2012

SmtpClient sc = new SmtpClient ();

sc.SendCompleted + = новый SendCompletedEventHandler (SendAsyncCallback);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...