发送电子邮件异步

vik*_*ben 0 c# asp.net email asynchronous

这是我尝试使用SendAsync()方法发送电子邮件.通过bool发送常规电子邮件时,它工作正常.使用SendAsync方法发送时没有骰子.如果你在这里看到错误,只是寻找一些提示.提前致谢.

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@domain.com","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

                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 11

您的using语句SmtpClient在异步发送完成之前处理.
那不行.

相反,您可以使用C#5 await等待异步发送在using语句内完成,或者using完全摆脱异步发送并将其SmtpClient置于完成事件中.