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

В приведенном ниже фрагменте кода я получаю исключение 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;

Edit # 1 - Это говорит, что используйте точку с запятой.

Ответы [ 5 ]

14 голосов
/ 06 мая 2011

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

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

5 голосов
/ 06 мая 2011

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

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

//Loads the To address field
foreach (string address in toAddressList)
{
    if (address.Length > 0)
    {
        mail.To.Add(address);
    }
}
2 голосов
/ 31 октября 2013

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

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);
0 голосов
/ 25 сентября 2013
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"));
0 голосов
/ 31 июля 2012

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

            string[] allTo = strTo.Split(';');
            for (int i = 0; i < allTo.Length; i++)
            { 
                if (allTo[i].Trim() != "")
                    message.To.Add(new MailAddress(allTo[i]));
            }                
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...