Асинхронное письмо от .Net - PullRequest
2 голосов
/ 28 сентября 2010

Я пытаюсь отправить асинхронное сообщение по электронной почте, чтобы оно не замедляло работу моего внешнего интерфейса (Asp.Net MVC).

SmtpClient smtp = new SmtpClient(_mailServer, 25);
smtp.UseDefaultCredentials = true;
MailMessage message = new MailMessage();

// ...etc

smtp.SendA(message); // this works fine

smtp.SendAsync(message, null); // if i change it to this, it doesn't work (mail never appears)

На самом деле я не понимаю, к чему относится второй параметр SendAsync предназначен для.

MSDN сообщает, что объект для передачи в метод, который вызывается после завершения операции

хорошо, wtf?какой метод?Поэтому я только что попытался пропустить ноль, так как не совсем понимаю, для чего это нужно, но, очевидно, что-то не так.

Ответы [ 3 ]

2 голосов
/ 28 сентября 2010

По сути это объект, который вы хотите передать в событии отправки завершено.

Когда вы используете SendAsync, происходит событие SendCompleted.Затем вы обрабатываете это событие, чтобы знать, что можете отправить еще одно электронное письмо.Основная причина этого заключается в том, что вы можете отправлять только одно письмо за раз.

0 голосов
/ 28 сентября 2010

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

Посмотрите на пример из MSDN и попробуйте это изолированно.

http://msdn.microsoft.com/en-us/library/x5x13z6h.aspx

0 голосов
/ 28 сентября 2010

У вас установлен обработчик событий для события SendCompleted? В примере MSDN для SmtpClient.SendAsync userState - это просто строка, но у них есть функция обратного вызова, назначенная событию SendCompleted. Это может быть просто тем, чего здесь не хватает.

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