Письма не отправляются асинхронно - PullRequest
0 голосов
/ 11 октября 2018

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

Моя конкретная проблема:

Этот метод отправляет электронное письмо

    public static void sendEmail(string nameFrom, string passwordFrom, string to, string subject, string text, string smtpHost, string attachments = null, int port = 25)
    {            
        System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
        System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(nameFrom, passwordFrom);
        System.Net.Mail.MailAddress from = new System.Net.Mail.MailAddress(nameFrom);
        System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();

        message.To.Add(to);
        message.From = from;
        message.Subject = subject;
        message.Body = text;
        message.IsBodyHtml = true;

        smtp.Host = smtpHost; 
        smtp.Port = port;
        smtp.EnableSsl = true;
        smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
        smtp.UseDefaultCredentials = false;
        smtp.Credentials = credentials;

        if (attachments != null && attachments != "")
        {
            if (System.IO.File.Exists(attachments) == true)
            {
                System.Net.Mail.Attachment attFile = new System.Net.Mail.Attachment(attachments);
                message.Attachments.Add(attFile);
            }
        }

        smtp.Send(message);
    }

Этот не

 public static async Task sendEmailAsync(string nameFrom, string passwordFrom, string to, string subject, string text, string smtpHost, string attachments = null, int port = 25)
    {              
        System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
        System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(nameFrom, passwordFrom);
        System.Net.Mail.MailAddress from = new System.Net.Mail.MailAddress(nameFrom);
        System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();

        message.To.Add(to);
        message.From = from;
        message.Subject = subject;
        message.Body = text;
        message.IsBodyHtml = true;

        smtp.Host = smtpHost; 
        smtp.Port = port;
        smtp.EnableSsl = true;
        smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
        smtp.UseDefaultCredentials = false;
        smtp.Credentials = credentials;

        if (attachments != null && attachments != "")
        {
            if (System.IO.File.Exists(attachments) == true)
            {
                System.Net.Mail.Attachment attFile = new System.Net.Mail.Attachment(attachments);
                message.Attachments.Add(attFile);
            }
        }                    
        await smtp.SendMailAsync(message);                    
    }

Почему второй не отправляет электронное письмо и как я могу это исправить?

1 Ответ

0 голосов
/ 11 октября 2018

Я бы порекомендовал использовать Backgroundworker для отправки электронного письма в другой ветке.Я думаю, что этот пост отлично объясняет. Async / await vs BackgroundWorker Я бы поставил это в комментариях, но здесь недостаточно уличных кредитов.

...