Отправка писем нескольким адресатам с вложением - 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);
}
}