2013-04-19 2 views
0

Это то, что я пробовал для отправки электронной почты с помощью метода SendAsync(). При передаче bool для отправки обычной электронной почты он отлично работает. При отправке с помощью метода SendAsync нет кубиков. Просто ищите подсказки, если вы видите здесь что-то не так. Заранее спасибо.Send Email Async

private static void SendEmail(System.Net.Mail.MailMessage m, Boolean Async) 
    { 

    using (var smtpClient = new System.Net.Mail.SmtpClient(EmailList.SMTP_GOOGLE, 587)) 
      { 
       smtpClient.EnableSsl = true; 
       smtpClient.UseDefaultCredentials = false; 
       smtpClient.Credentials = new NetworkCredential("[email protected]","password"); 
       smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; 
       smtpClient.Timeout = 3000000; 


       if (Async) 
       { 
        object userState = m; 
        smtpClient.SendCompleted += new SendCompletedEventHandler(Smtp_OnComplete); 
        try 
        { 
         smtpClient.SendAsync(m, userState); 
        } 
        catch (Exception ex) 
        { 
          //Logging 

        } 
       } 
       else 
       { 
        try 
        { 
         smtpClient.Send(m); 
        } 
        catch (Exception ex) 
         //Logging 

        } 
       } 
      } 
     } 
+1

Что происходит? Вы получаете исключение? – SLaks

ответ

1

Я просто создать простое консольное приложение для запуска методов для тестирования

Поскольку электронная почта посылается асинхронно, приложение консоли запускается метод в другом потоке и продолжить его собственное исполнение. Если он закрывается до того, как метод отправит фактический адрес электронной почты, сообщение электронной почты не будет отправлено, потому что Visual Studio убьет этот поток. Попробуйте добавить следующую строку после вызова, чтобы отправить электронную почту, чтобы сделать приложение консоли, подождите несколько секунд:

System.Threading.Thread.Sleep(5000); 

Это должно быть более чем достаточно долго для метода электронной почты для отправки электронной почты и закончить до консольного приложения закрывается, а Visual Studio убивает все процессы. Код должен хорошо работать на веб-сервере.

+1

Это была проблема, поэтому я дал jbdub кредит. Не могу поверить, что я пропустил что-то настолько простое спасибо за ваш ответ. – vikingben

11

Ваше using заявление расположените SmtpClient перед асинхронными отправить отделки.
Это не сработает.

Вместо этого, вы можете использовать C# 5 await ждать для асинхронной отправки закончить внутри using заявления, или избавиться от using исключительна для асинхронного посылает и распоряжаться SmtpClient в случае завершения.

+0

Без исключений, никаких изменений, удалив оператор using. Я постараюсь подождать и посмотреть, поможет ли это. Спасибо SLaks за ответ. – vikingben

+0

@vikingben: Возникает ли событие? – SLaks

+0

Я могу отлаживать и переходить прямо к методу SendAsync, тогда он никогда не попадает на событие smtp_oncomplete call back. – vikingben