Как исправить исключение, отправленное при отправке почтового сообщения нескольким получателям?
В нижеприведенном фрагменте кода я получаю исключение 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]"));