Как асинхронно отправить Email сразу нескольким пользователям в .NET

2

Требуется отправить почту нескольким пользователям асинхронно с помощью стандартного .NET класса SmtpClient. Код с вызовом метода Send dyутри асинхронного делегата выдает InvalidOperationException с сообщением

Уже выполняется асинхронный вызов. Он должен быть завершен или отменен, прежде чем можно будет вызвать этот метод.

Судя по документации, метод SendAsync класса SmtpClient тоже расчитан на отсылку только одного письма в один момент времени. Как правильнее решить эту задачу?

Лучший ответ:

3

Действительно, методы Send и SendAsync не подойдут. В MSDN открытым текстом говорится:

Если вызвать SendAsync или Send при выполняемой передаче электронной почты, возникнет исключение InvalidOperationException.

Единственный способ это преодолеть — создавать новый объект SmtpClient при каждой новой отправке письма. Например так:

public void SendMail()
{
    try
    {
        ThreadPool.QueueUserWorkItem(state =>
                                         {
                                             var message = GetMessage();
                                             CreateSmtpClient().Send(message);
                                         });
    }
    catch (Exception e)
    {
        throw new MailSendingException(e);
    }
}
v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.