Отправка писем нескольким адресатам с вложением - 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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д