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

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

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

Всем доброго времени суток! Знаю, подобные вопросы есть на форуме, но ответа на свой вопрос я пока не нашёл. Собственно, имеем следующую ситуацию. Есть listBox со списком адресов получателей письма. Есть вложение. К примеру, у нас три адреса, а я хочу отослать три абсолютно одинаковых письма. При нажатии на кнопку "Send" программа предлагает выбрать файл для прикрепления, и тогда уже идёт отсылка. Проблема в следующем: выбор файла для прикрепления открывается столько раз, сколько адресов в listBox. Но если в первый раз выбрать нужный файл, а в следующие разы просто закрыть диалог выбора файла, то всем получателям отошлётся письмо с первым файлом. Подозреваю, что это из-за foreach, но как исправить это я не знаю. Обработчик кнопки отсылки
 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());
            }

        }
Метод att
string att()
        {
            
            OpenFileDialog openfiledialog = new OpenFileDialog()
            {
                Filter = "Текстовые файлы(*.txt)|*.txt"
            };
            if (openfiledialog.ShowDialog()== DialogResult.OK)
            {
                fname = openfiledialog.FileName;
            }
            return fname;
 
        }
Метод Send
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);
    }
}

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


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

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

5   голосов , оценка 4 из 5
Похожие ответы