c# отправлять почту нескольким получателям - PullRequest
0 голосов
/ 28 мая 2020

Я использую это для отправки писем, я определил некоторые переменные пакета, которые содержат значения:

public MailProperties(ScriptObjectModel dts)
        {
            if (
             !string.IsNullOrEmpty((string)dts.Variables["$Package::mailFrom"].Value) &&
             !string.IsNullOrEmpty((string)dts.Variables["$Package::mailTo"].Value) &&
             !string.IsNullOrEmpty((string)dts.Variables["$Package::mailPwd"].GetSensitiveValue()) &&
             !string.IsNullOrEmpty((string)dts.Variables["$Package::mailSmtp"].Value) &&
             !string.IsNullOrEmpty((string)dts.Variables["$Package::mailPort"].Value)

             )
            {
                fromMail = (string)dts.Variables["$Package::mailFrom"].Value;
                toMail = (string)dts.Variables["$Package::mailTo"].Value;
                bccMail = (string)dts.Variables["$Package::mailBcc"].Value;
                accountPassword = (string)dts.Variables["$Package::mailPwd"].GetSensitiveValue();
                accountSmtp = (string)dts.Variables["$Package::mailSmtp"].Value;
                accountSmtpPort = (string)dts.Variables["$Package::mailPort"].Value;
                useSSL = (bool)dts.Variables["$Package::useSSL"].Value;


                pathAttachment = new List<string>();
                pathAttachment.Add((string)dts.Variables["User::pathFileReject"].Value);
                pathAttachment.Add((string)dts.Variables["User::pathFileReject2"].Value);
            }
            else
            {
                throw new Exception("error text...");
            }

        }

Мне нужно отправлять почту большему количеству людей, поэтому я установил mailTo с mail1@gmail.com, mailB cc как mail2@gmail.com, и он работает, но если я устанавливаю mailB cc как «mail2@gmail.com, mail3@gmail.com» или «mail2@gmail.com; mail3@gmail.com», он не работает, как я могу это сделать?

EDIT: это функция sendMail

public static void sendMail(MailProperties mailProperties, ReportETL reportETL)
        {
            MimeMessage message = new MimeMessage();
            message.From.Add(new MailboxAddress("text..", mailProperties.fromMail));
            message.To.Add(new MailboxAddress(mailProperties.toMail));
            message.Subject = "text...";

            if (!string.IsNullOrEmpty(mailProperties.bccMail))
            {
                message.Bcc.Add(new MailboxAddress(mailProperties.bccMail));
            }

            BodyBuilder bodyBuilder = new BodyBuilder();
            bodyBuilder.HtmlBody = ReportETLService.getHtmlFromReporETL(reportETL);

            mailProperties.pathAttachment.Where(x => File.Exists(x)).ToList().ForEach(y => bodyBuilder.Attachments.Add(y));

            message.Body = bodyBuilder.ToMessageBody();

            try
            {
                SmtpClient smtpClient = new SmtpClient();

                smtpClient.Connect(mailProperties.accountSmtp, int.Parse(mailProperties.accountSmtpPort), mailProperties.useSSL);
                smtpClient.Authenticate(mailProperties.fromMail, mailProperties.accountPassword);
                smtpClient.Send(message);

                smtpClient.Disconnect(true);
            }
            catch (Exception e) { throw new Exception("text... " + e.Message); }

        }

Ответы [ 3 ]

1 голос
/ 28 мая 2020

в соответствии с документацией message.To - это тип списка, поэтому вы можете добавить еще один адрес:

 InternetAddressList list = new InternetAddressList();

    list.add(adress1)
    list.add(adress2)
    list.add(adress3)
    list.add(adress4)
message.To.AddRange(list);
0 голосов
/ 28 мая 2020

Что ж, если предположить, что ваши свойства toMail, ccMail и bccMail - это просто строки, а не списки строк, вы можете сделать что-то вроде этого:

InternetAddressList list;

if (!string.IsNullOrEmpty(mailProperties.toMail) && InternetAddressList.TryParse (mailProperties.toMail, out list))
    message.To.AddRange(list);

if (!string.IsNullOrEmpty(mailProperties.ccMail) && InternetAddressList.TryParse (mailProperties.ccMail, out list))
    message.Cc.AddRange(list);

if (!string.IsNullOrEmpty(mailProperties.bccMail) && InternetAddressList.TryParse (mailProperties.bccMail, out list))
    message.Bcc.AddRange(list);
0 голосов
/ 28 мая 2020

Вместо использования B CC (что было бы вариантом, но имеет проблему максимального количества) просто переберите все почтовые адреса и отправьте по одному каждому получателю. (Не поститесь, иначе у вас возникнут другие проблемы). Таким образом будет «легче» обнаруживать письма, которые не будут доставлены.

...