2015-04-24 2 views
0

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

вот код, который я использовал для отправки по электронной почте для одного пользователя:

class MailModule 
    { 
     public static void CreateMessage(string Server, int Port, string From, string to, string Subject, string Body) 
     { 


      System.Net.NetworkCredential basicAuthenticationInfo = new System.Net.NetworkCredential("username", "password"); 

      MailMessage message = new MailMessage(From, to, Subject, Body); 
      SmtpClient client = new SmtpClient(Server); 
      client.Port = Port; 
      client.Credentials = basicAuthenticationInfo; 
      try 
      { 

       client.Send(message); 
       MessageBox.Show("Shout Sent", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); 
       message.Dispose(); 
      } 
      catch (Exception ex) 
      { 
       message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; 
       MessageBox.Show(message.DeliveryNotificationOptions.ToString()); 
       MessageBox.Show(ex.Message); 
      } 
     } 


    } 

ответ

0

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

Вместо использования конструктора MailMessage используйте коллекцию To, чтобы добавить несколько адресов.

class MailModule 
{ 
    public static void CreateMessage(string Server, int Port, string From, IList<string> to, string Subject, string Body) 
    { 


     System.Net.NetworkCredential basicAuthenticationInfo = new System.Net.NetworkCredential("username", "password"); 

     var message = new MailMessage(); 

     message.From = new MailAddress(From); 
     message.Subject = subject; 
     message.Body = body; 
     to.ForEach(x => message.To.Add(x)); 

     SmtpClient client = new SmtpClient(Server); 
     client.Port = Port; 
     client.Credentials = basicAuthenticationInfo; 
     try 
     { 

      client.Send(message); 
      MessageBox.Show("Shout Sent", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      message.Dispose(); 
     } 
     catch (Exception ex) 
     { 
      message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; 
      MessageBox.Show(message.DeliveryNotificationOptions.ToString()); 
      MessageBox.Show(ex.Message); 
     } 
    } 


} 
0

Вы можете использовать мульти нить для отправки сообщения:

var tasks = new List<Task>(); 
foreach(var mailTo in mailList) 
{ 
    var task = Task.Factory.StartNew(() => CreateMessage(server, port, from, mailTo, subject, body); 

    tasks.Add(task); 
} 

// You can wait till all tasks are done 
0

Возможно, вам необходимо установить некоторую задержку между каждой попыткой отправить электронную почту, так как сервер не может отправить так много писем в течение времени.

Смежные вопросы