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

#c# #email #.net-4.0

#c# #Адрес электронной почты #.net-4.0

Вопрос:

В приведенном ниже фрагменте кода я получаю исключение FormatException для ‘this.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 метод документирован для приема адресов, разделенных запятыми… так что возможно, что это сработало бы и в конструкторе.

Комментарии:

1. Чертовы паутины … не могу поверить всему, что читаю. Я нашел пару мест, где говорилось, что вы можете использовать точки с запятой. Я заменил точки с запятой на запятые, и это решило проблему. Спасибо, Джон!

2. 1. В нем используются запятые, а не точки с запятой. Жаль, что Outlook привык использовать точки с запятой 🙂

3. Вы даже не можете доверять MSDN. Там также говорится об использовании точек с запятой. msdn.microsoft.com/en-us/library /…

4. У меня эта ошибка при создании экземпляра или переменной, вот так: var msg = new MailMessage (); есть мысли?

5. Это была та же ошибка для недопустимого символа «@». По какой-то неизвестной причине строка на system.net/mail сегмент web.config не был закодирован в UTF-8. Я удалил его и перепечатал вместо копирования / вставки из предыдущего проекта, и это сработало нормально 🙂

Ответ №2:

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

 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 = "email1@test.com, email2@test.com";

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]));
            }                
  

Комментарии:

1. Чем это отличается от ответа BiggsTRC?

Ответ №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("test@gmail.com;john@rediff.com,prashant@mail.com"));
  

Комментарии:

1. Это требует модификации: Join требуется ", " в качестве разделителя, в противном случае по-прежнему генерируется исключение FormatException: string.Join(", ", addresses) работает