Er.D.K.Malhotra Ответов: 1

Как отправить массовую электронную почту (например, 500-1000 писем за раз) с помощью asp.net с#


Я разработал программу, которая отправляет 70-80 электронных писем, но когда я ввожу больше идентификаторов электронной почты (например, 500+), то программа показывает ошибку тайм-аута.
может ли кто-нибудь, пожалуйста, решить эту проблему.
мы должны использовать TO,Cc,BCc,Subject, а затем сообщение в формате HTML. Все они вводятся пользователем вручную, а не из базы данных.Я отправить электронную почту, используя SMTP-сервер, я свой собственный SMTP-сервер.

AnvilRanger

Не хотите поделиться своим кодом, журналированием или сообщениями об ошибках, которые вы получаете? Мы не можем помочь вам, не видя, что вы делаете.

Если небольшая партия писем отправляется правильно, возможно, теперь вы освобождаете объект из памяти и с большим количеством писем вы заканчиваетесь.

1 Ответов

Рейтинг:
2

DamithSL

проверьте этот учебник: Отправить объемных (массовых) написать в ASP.Сеть с использованием C# и VB.Net[^]
он отправляет электронные письма с помощью параллельной многопоточности.
пример кода:

Parallel.ForEach(dtCustomers.AsEnumerable(), row =>
    {
        SendEmail(row["Email"].ToString(), subject, string.Format(body, row["Name"]));
    });

метод:
private bool SendEmail(string recipient, string subject, string body)
{
   bool isSuccess =false;
   try{
    MailMessage mm = new MailMessage("sender@gmail.com", recipient);
    mm.Subject = subject;
    mm.Body = body;
    mm.IsBodyHtml = true;
    SmtpClient smtp = new SmtpClient();
    smtp.Host = "smtp.gmail.com";
    smtp.EnableSsl = true;
    NetworkCredential NetworkCred = new NetworkCredential();
    NetworkCred.UserName = "sender@gmail.com";
    NetworkCred.Password = "<password>";
    smtp.UseDefaultCredentials = true;
    smtp.Credentials = NetworkCred;
    smtp.Port = 587;
    smtp.Send(mm);
    isSuccess =true;
    }catch(Exception ex)
    {
       // log the exception 
       
    }
    return isSuccess ; 
}