Отправка писем нескольким адресатам с вложением - C#
Формулировка задачи:
Всем доброго времени суток!
Знаю, подобные вопросы есть на форуме, но ответа на свой вопрос я пока не нашёл.
Собственно, имеем следующую ситуацию.
Есть listBox со списком адресов получателей письма. Есть вложение. К примеру, у нас три адреса, а я хочу отослать три абсолютно одинаковых письма. При нажатии на кнопку "Send" программа предлагает выбрать файл для прикрепления, и тогда уже идёт отсылка. Проблема в следующем: выбор файла для прикрепления открывается столько раз, сколько адресов в listBox. Но если в первый раз выбрать нужный файл, а в следующие разы просто закрыть диалог выбора файла, то всем получателям отошлётся письмо с первым файлом.
Подозреваю, что это из-за foreach, но как исправить это я не знаю.
Обработчик кнопки отсылки
Метод att
Метод Send
Заранее спасибо за помощь.
private void button2_Click(object sender, EventArgs e) { foreach(var item in listBox2.Items) { Sender.Send(smtp, textBox3.Text, textBox4.Text,item.ToString(), textBox2.Text, richTextBox1.Text, att()); } }
string att() { OpenFileDialog openfiledialog = new OpenFileDialog() { Filter = "Текстовые файлы(*.txt)|*.txt" }; if (openfiledialog.ShowDialog()== DialogResult.OK) { fname = openfiledialog.FileName; } return fname; }
public static void Send(string smtpServer, string from, string password, string mailto, string caption, string message, string attachFile) { try { MailMessage mail = new MailMessage(); mail.From = new MailAddress(from); mail.To.Add(new MailAddress(mailto)); mail.Subject = caption; mail.Body = message; if (attachFile!=null) { Attachment attachment = new Attachment(attachFile, MediaTypeNames.Application.Octet); ContentDisposition disposition = attachment.ContentDisposition; disposition.CreationDate = File.GetCreationTime(attachFile); disposition.ModificationDate = File.GetLastWriteTime(attachFile); disposition.ReadDate = File.GetLastAccessTime(attachFile); disposition.FileName = Path.GetFileName(attachFile); disposition.Size = new FileInfo(attachFile).Length; disposition.DispositionType = DispositionTypeNames.Attachment; mail.Attachments.Add(attachment); } SmtpClient client = new SmtpClient(); client.Host = smtpServer; client.Port = 587; client.EnableSsl = true; client.Credentials = new NetworkCredential(from.Split('@')[0], password); client.DeliveryMethod = SmtpDeliveryMethod.Network; client.Send(mail); mail.Dispose(); } catch (Exception e) { MessageBox.Show(e.Message); } }
Решение задачи: «Отправка писем нескольким адресатам с вложением»
textual
Листинг программы
private void button2_Click(object sender, EventArgs e) { string attachmentPath = att(); foreach(var item in listBox2.Items) { Sender.Send(smtp, textBox3.Text, textBox4.Text, item.ToString(), textBox2.Text, richTextBox1.Text, attachmentPath); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д