#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)
работает