Как исправить исключение, отправленное при отправке почтового сообщения нескольким получателям?

В нижеприведенном фрагменте кода я получаю исключение FormatException для этого. Recipients. Более конкретно, сообщение "Недопустимый символ был найден в заголовке почты:"; ".

Получатели - это строка из трех адресов электронной почты, разделенных точкой с запятой (символ ';'). Список получателей считывается из app.config, и данные вносят его в переменную Recipients.

Как я могу получить эту ошибку, когда несколько получателей должны быть разделены точкой с запятой? Какие-либо предложения? Как всегда, спасибо за вашу помощь!

public bool Send()
{
    MailMessage mailMsg = 
       new MailMessage(this.Sender, this.Recipients, this.Subject, this.Message);

    SmtpClient smtpServer = new SmtpClient(SMTP);
    smtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;

Изменить # 1 - В этом используется точка с запятой.

Ответ 1

Я не вижу ничего в документации конструктора MailMessage, чтобы предложить вам указать несколько получателей. Я предлагаю вам создать объект MailMessage, а затем добавить каждый адрес электронной почты отдельно.

Обратите внимание, что метод MailAddressCollection.Add документирован для приема разделенных запятыми адресов... так что возможно, что это будет работать в конструкторе тоже.

Ответ 2

Вы должны использовать метод .Add для добавления этих адресов. Вот пример кода, который я использую:

string[] toAddressList = toAddress.Split(';');

//Loads the To address field
foreach (string address in toAddressList)
{
    if (address.Length > 0)
    {
        mail.To.Add(address);
    }
}

Ответ 3

Восстанавливая это из мертвых, если вы выделите адреса электронной почты получателя с помощью запятой, он будет работать.

this.Recipients = "[email protected], [email protected]";

var mailMsg = new MailMessage(this.Sender, this.Recipients, this.Subject, this.Message);
SmtpClient smtpServer = new SmtpClient(SMTP);
smtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpServer.Send(mailMsg);

Ответ 4

Попробуйте это

            string[] allTo = strTo.Split(';');
            for (int i = 0; i < allTo.Length; i++)
            { 
                if (allTo[i].Trim() != "")
                    message.To.Add(new MailAddress(allTo[i]));
            }                

Ответ 5

private string FormatMultipleEmailAddresses(string emailAddresses)
    {
      var delimiters = new[] { ',', ';' };

      var addresses = emailAddresses.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);

      return string.Join(",", addresses);
    }

Теперь вы можете использовать его как

var mailMessage = new MailMessage();
mailMessage.To.Add(FormatMultipleEmailAddresses("[email protected];[email protected],[email protected]"));