Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
 Аватар для Dead_Messiah
8 / 8 / 2
Регистрация: 22.10.2010
Сообщений: 126

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

31.07.2015, 18:35. Показов 3086. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
Знаю, подобные вопросы есть на форуме, но ответа на свой вопрос я пока не нашёл.

Собственно, имеем следующую ситуацию.
Есть listBox со списком адресов получателей письма. Есть вложение. К примеру, у нас три адреса, а я хочу отослать три абсолютно одинаковых письма. При нажатии на кнопку "Send" программа предлагает выбрать файл для прикрепления, и тогда уже идёт отсылка. Проблема в следующем: выбор файла для прикрепления открывается столько раз, сколько адресов в listBox. Но если в первый раз выбрать нужный файл, а в следующие разы просто закрыть диалог выбора файла, то всем получателям отошлётся письмо с первым файлом.

Подозреваю, что это из-за foreach, но как исправить это я не знаю.

Обработчик кнопки отсылки

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
 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

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
string att()
        {
            
            OpenFileDialog openfiledialog = new OpenFileDialog()
            {
                Filter = "Текстовые файлы(*.txt)|*.txt"
            };
            if (openfiledialog.ShowDialog()== DialogResult.OK)
            {
                fname = openfiledialog.FileName;
            }
            return fname;
 
        }


Метод Send

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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);
            }
        }



Заранее спасибо за помощь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.07.2015, 18:35
Ответы с готовыми решениями:

Отправка Email нескольким адресатам
Помогите разобраться пишу программу в консоле, надо отправить сообщения нескольким адресатам, через ; отправляет только одному адресату...

Отправка e-mail нескольким адресатам с вложениями
Здравствуйте уважаемые гуру C#! Недавно пришлось столкнуться данным языком ранее с программированием дела увы не имела( Передомной...

Почтовый клиент: как отправить письмо нескольким адресатам
Проблема такая, нужно отправить письмо нескольким пользователям. Но если емайлы записать в строчку через пробел в тексбоксе то письмо...

2
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18243 / 14157 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
31.07.2015, 18:42
Dead_Messiah, почему так трудно догадаться вынести вызов att() за пределы цикла?
C#
1
2
3
4
5
6
7
8
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);
    }
}
1
 Аватар для Dead_Messiah
8 / 8 / 2
Регистрация: 22.10.2010
Сообщений: 126
31.07.2015, 22:19  [ТС]
Мелочь, а проглядел. Спасибо большое.

Добавлено через 3 часа 32 минуты
Ребята, появилась новая проблема.
Решил сделать поддержку разных почтовых сервисов для отправки.
После нажатия на кнопку "Отправить", программа намертво зависает, и через некоторое время вываливается исключение: "Время ожидания истекло" или "Сбой при отправке". До того, как я добавил возможность использовать несколько почтовых сервисов, тестил всё с яндекс почты. И всё работало. Теперь когда я пишу тот же яндекс почтовик, вываливается исключение.

Слегка изменённый метод отправки

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public static void Send(string smtpServer, int port, 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 = port;
                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);
            }
            
        }


Модифицированный обработчик кнопки отсылки

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
private void button2_Click(object sender, EventArgs e)
        {
          
          string attachment = att();
          string smtp = "";
          int port = 0;
 
          if (textBox3.Text.Contains("@yandex.ru") || textBox3.Text.Contains("@yandex.ua") || textBox3.Text.Contains("@narod.ru") || textBox3.Text.Contains("@ya.ru") || textBox3.Text.Contains("@yandex.by") || textBox3.Text.Contains("@yandex.com") || textBox3.Text.Contains("@yandex.kz"))
          {
              smtp = "smtp.yandex.ru";
              port = 465;
              
          }
          if (textBox3.Text.Contains("@mail.ru") || textBox3.Text.Contains("@inbox.ru") || textBox3.Text.Contains("@bk.ru") || textBox3.Text.Contains("@list.ru"))
          {
              smtp = "smtp.mail.ru";
              port = 465;
             
          }
          if (textBox3.Text.Contains("@rambler.ru") || textBox3.Text.Contains("@ro.ru") || textBox3.Text.Contains("@lenta.ru") || textBox3.Text.Contains("@myrambler.ru") || textBox3.Text.Contains("@autorambler.ru"))
          {
              smtp = "mail.rambler.ru";
              port = 587;
              
          }
          if (textBox3.Text.Contains("@gmail.com"))
          {
              smtp = "smtp.gmail.com";
              port = 587;
             
          }
          if (textBox3.Text.Contains("@outlook.com") || textBox3.Text.Contains("@hotmail.com") || textBox3.Text.Contains("@live.ru"))
          {
              smtp = "smtp-mail.outlook.com";
              port = 587;
             
          }
          else MessageBox.Show("This mail is unsupported yet");
 
 
 
          
              foreach (var item in listBox2.Items)
              {
                  Sender.Send(smtp,port,textBox3.Text, textBox4.Text, item.ToString(), textBox2.Text, richTextBox1.Text, attachment);
              }
          }


Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.07.2015, 22:19
Помогаю со студенческими работами здесь

Рассылка писем с вложениями сразу нескольким адресатам
Всем доброго времени суток! Пытаюсь реализовать рассылку письма с файлом нескольким адресатам. Использую Indy10. При рассылки без...

Отправка сообщений нескольким адресатам
Возможно ли настроить отправку сообщений из форм "электронные заявки" нескольким адресатам, со следующими условиями. Допустим, если в...

Отправка е-маил с саита нескольким адресатам
У меня есть СЕЛЕКТ в БД который возвращает несколько емэйлов: mail1@mail.com; mail2@mail.com; mail3@mail.com. Е-мэилы каждый раз разные и...

Отправка одного письма нескольким адресатам.
Хочу сделать отправку писем нескольким адресатам(не больше 15).Делаю так: InternetAddress toAddress = {new InternetAddress()}; ...

javax.mail и отправка письма нескольким адресатам.
Ни как не догоню, как сделать чтобы, при отправке почты на несколько адресов, в поле 'TO' было видно только одно слово, а не перечисление...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru