Электронная почта из программы asp.net С# очень медленная

Я отправляю простое сообщение электронной почты с веб-страницы asp.net двум получателям. Для завершения выполнения требуется около 15 секунд. Можно ли это ускорить? Это код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;

namespace NihulKriotNS.BLL
{
public class EMailClass
{
    //fields
    private const string strFrom = "myEmail";
    private const string mailServer = "myServer";
    private const string userName = "myUserName";
    private const string usePass = "myPassword";
    //ctors
    public EMailClass()
    {
    }

    public void SendEMail(List<string> emailList, string strSubject, string  strMessage, bool isHTML)
              {
        MailMessage msg = new MailMessage();
        msg.From = new MailAddress(strFrom);
        if (emailList != null && emailList.Count > 0 )
            foreach (string em in emailList)
            {
                msg.To.Add(em);
            }
        else
            return;
        msg.Subject = strSubject;
        msg.Body = strMessage;
        msg.IsBodyHtml = isHTML;
        SmtpClient smtp = new SmtpClient(mailServer);
        smtp.Credentials = new System.Net.NetworkCredential(userName, usePass);


        smtp.Send(msg);
        msg.Dispose();
    }
}

}

Я пытался использовать smpt.SendAsync, но совсем не помог. Я не совсем уверен, как правильно его использовать. Большое тебе спасибо.


person Dov Miller    schedule 31.07.2011    source источник
comment
Я предполагаю, что это что-то с сетевым вызовом на smtp-сервер. Вы используете имя хоста, поиск которого занимает некоторое время? Что произойдет, если вы используете IP-адрес?   -  person skaz    schedule 31.07.2011
comment
возможный дубликат медленная отправка электронной почты ASP.NET   -  person leppie    schedule 01.08.2011


Ответы (1)


Ранее я получил ответ от Самира Аделя (и подтвержденный в комментарии кем-то еще, я не помню, кто) использовать несколько потоков. По какой-то причине, к сожалению, этот ответ был удален. Я не был знаком с темой потоковой передачи. Я просмотрел эту тему в книге Эндрю Троелсена Pro C# 2008 и платформа .NET 3.5. Я придумал следующий код:

Thread backgroundThread = new Thread(new ThreadStart(EMailPrepareAndSend));
backgroundThread.Name = "Secondary";
backgroundThread.Start();

Где EMailPrepareAndSend — это метод, в котором подготавливается сообщение электронной почты и из которого вызывается метод SendEmail() в классе EMail, показанный в моем вопросе. Это позволило программе немедленно продолжить работу, даже если электронная почта еще не была отправлена. Спасибо Самиру Аделю, его ответ направил меня в правильном направлении.

person Dov Miller    schedule 01.08.2011
comment
Добро пожаловать, Дов Миллер, я тоже удивлен, почему мой ответ был удален, но я так рад, что мой ответ помог вам решить вашу проблему. - person Samir Adel; 01.08.2011
comment
кто-то по имени Роберт Харви удалил мой ответ, даже не уточнив почему?! - person Samir Adel; 01.08.2011
comment
Я не знаком со встроенными методами Async, если бы вы могли привести мне пример, я был бы рад его использовать. Спасибо. - person Dov Miller; 01.08.2011
comment
@Samir_Adel: Роберт Харви — один из модераторов. Если он удалил ваш ответ, это, вероятно, потому, что он был помечен кем-то как низкое качество или не ответ. У меня недостаточно представителей, чтобы увидеть ваш ответ, поэтому я не могу указать причину, но вы можете спросить в мета, хотите ли вы получить более подробную информацию. Как правило, ответы, которые трудно читать/понимать или состоящие исключительно из ссылок, скорее всего, будут удалены. - person forsvarir; 01.08.2011