2010-09-28 2 views
2

Я пытаюсь отправить асинхронный e-mail, чтобы он не замедлял мой интерфейс (Asp.Net MVC).Async email from .Net

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) 

Я действительно не знаю, что такое 2-ой пары к SendAsync для.

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

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

+0

Какой метод? Событие SendComplete. Если вы не зарегистрировали метод SendComplete, ничего не происходит. Передача нулевого значения прекрасна. Это simeply информация о состоянии, которая сообщает, какой метод вы зарегистрировали, чтобы SendComplete любую информацию, которая может понадобиться знать. Независимо от того, какая информация зависит от вас, так как это ваш метод SendComplete. –

ответ

2

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

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

0

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

0

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

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

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