Отправка писем нескольким адресатам с вложением - C#

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток! Знаю, подобные вопросы есть на форуме, но ответа на свой вопрос я пока не нашёл. Собственно, имеем следующую ситуацию. Есть listBox со списком адресов получателей письма. Есть вложение. К примеру, у нас три адреса, а я хочу отослать три абсолютно одинаковых письма. При нажатии на кнопку "Send" программа предлагает выбрать файл для прикрепления, и тогда уже идёт отсылка. Проблема в следующем: выбор файла для прикрепления открывается столько раз, сколько адресов в listBox. Но если в первый раз выбрать нужный файл, а в следующие разы просто закрыть диалог выбора файла, то всем получателям отошлётся письмо с первым файлом. Подозреваю, что это из-за foreach, но как исправить это я не знаю. Обработчик кнопки отсылки
Листинг программы
  1. private void button2_Click(object sender, EventArgs e)
  2. {
  3. foreach(var item in listBox2.Items)
  4. {
  5. Sender.Send(smtp, textBox3.Text, textBox4.Text,item.ToString(), textBox2.Text, richTextBox1.Text, att());
  6. }
  7.  
  8. }
Метод att
Листинг программы
  1. string att()
  2. {
  3. OpenFileDialog openfiledialog = new OpenFileDialog()
  4. {
  5. Filter = "Текстовые файлы(*.txt)|*.txt"
  6. };
  7. if (openfiledialog.ShowDialog()== DialogResult.OK)
  8. {
  9. fname = openfiledialog.FileName;
  10. }
  11. return fname;
  12. }
Метод Send
Листинг программы
  1. public static void Send(string smtpServer, string from, string password, string mailto, string caption, string message, string attachFile)
  2. {
  3. try
  4. {
  5. MailMessage mail = new MailMessage();
  6. mail.From = new MailAddress(from);
  7. mail.To.Add(new MailAddress(mailto));
  8. mail.Subject = caption;
  9. mail.Body = message;
  10. if (attachFile!=null)
  11. {
  12. Attachment attachment = new Attachment(attachFile, MediaTypeNames.Application.Octet);
  13. ContentDisposition disposition = attachment.ContentDisposition;
  14. disposition.CreationDate = File.GetCreationTime(attachFile);
  15. disposition.ModificationDate = File.GetLastWriteTime(attachFile);
  16. disposition.ReadDate = File.GetLastAccessTime(attachFile);
  17. disposition.FileName = Path.GetFileName(attachFile);
  18. disposition.Size = new FileInfo(attachFile).Length;
  19. disposition.DispositionType = DispositionTypeNames.Attachment;
  20. mail.Attachments.Add(attachment);
  21. }
  22. SmtpClient client = new SmtpClient();
  23. client.Host = smtpServer;
  24. client.Port = 587;
  25. client.EnableSsl = true;
  26. client.Credentials = new NetworkCredential(from.Split('@')[0], password);
  27. client.DeliveryMethod = SmtpDeliveryMethod.Network;
  28. client.Send(mail);
  29. mail.Dispose();
  30. }
  31. catch (Exception e)
  32. {
  33. MessageBox.Show(e.Message);
  34. }
  35. }
Заранее спасибо за помощь.

Решение задачи: «Отправка писем нескольким адресатам с вложением»

textual
Листинг программы
  1. private void button2_Click(object sender, EventArgs e)
  2. {
  3.     string attachmentPath = att();
  4.     foreach(var item in listBox2.Items)
  5.     {          
  6.         Sender.Send(smtp, textBox3.Text, textBox4.Text, item.ToString(), textBox2.Text, richTextBox1.Text, attachmentPath);
  7.     }
  8. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы