Отправка писем с списком BCC не работает

Я пытаюсь отправить электронные письма одному получателю "Кому" и списку получателей "Скрытых". Список получателей Bcc - это список строк, и они успешно добавляются в коллекцию MailMessage Bcc, но фактически не отправляются. Если я добавлю тот же список в коллекцию сообщений "Cc", он отлично работает. Просто не коллекция Bcc. Код, который я использую, следующий:

public void SendEmailMessage(String FromAddress, String ToAddress, String Subject, String Body, List<string> CCAddress, List<string> BccAddress, String Filepath) { using (SmtpClient mailClient = new SmtpClient()) { MailMessage mailMessage = new MailMessage(); mailMessage.From = new MailAddress(FromAddress); mailMessage.To.Add(new MailAddress(ToAddress)); foreach (String _email in CCAddress) { mailMessage.CC.Add(new MailAddress(_email)); } foreach (String _email in BccAddress) { mailMessage.Bcc.Add(new MailAddress(_email)); } mailMessage.Priority = MailPriority.Normal; mailMessage.Subject = Subject; if (Filepath != string.Empty) { Attachment _attachment = new Attachment(Filepath, MediaTypeNames.Application.Octet); mailMessage.Attachments.Add(_attachment); } AlternateView plainTextView = AlternateView.CreateAlternateViewFromString(GetTextonly(Body), null, "text/plain"); AlternateView htmlView = AlternateView.CreateAlternateViewFromString(Body, null, "text/html"); mailMessage.AlternateViews.Add(plainTextView); mailMessage.AlternateViews.Add(htmlView); SmtpClient smtpClient = new System.Net.Mail.SmtpClient(); smtpClient.Send(mailMessage); } }
</string></string>

любые идеи?

3 ответа

одна вещь, о которой я не упоминал, заключается в том, что почта помещается в каталог пикапа, а не отправляется напрямую. Я нашел блог, в котором объясняется, что адреса ОЦК не отправляются при использовании справочника пикапа, и вместо этого вы можете поместить их в каталог повтора. Это решило мою проблему с легким исправлением: Невозможно отправить Скрытую копию с использованием System.Net.Mail при указании каталога рассылки (Exchange 2007/Exchange 2010) в коде


Я создал тестовое приложение и запустил SmptForDev, чтобы захватить любые электронные письма, выходящие из моего локального IIS. Я использовал код ниже, и он отлично работает. Все, что я действительно сделал с вашим кодом, - это порядок, и все работает отлично. Я также декомпилировал System.Net.Mail.SmtpClient, чтобы увидеть, что он делает под капотом, адреса адреса и Bcc все помещены в одну коллекцию, если один адрес отправляет это хорошо, чтобы предположить, что все они есть.

public void SendEmailMessage(string fromAddress, string toAddress, string subject, string body, IEnumerable<string> ccAddress, IEnumerable<string> bccAddress, string filepath) { using (var mailClient = new SmtpClient()) { var mailMessage = new MailMessage(fromAddress, toAddress); foreach (var email in ccAddress) { mailMessage.CC.Add(new MailAddress(email)); } foreach (var email in bccAddress) { mailMessage.Bcc.Add(new MailAddress(email,"Matty Boy")); } mailMessage.Priority = MailPriority.Normal; mailMessage.Subject = subject; if (!string.IsNullOrEmpty(filepath)) { var attachment = new Attachment(filepath, MediaTypeNames.Application.Octet); mailMessage.Attachments.Add(attachment); } var plainTextView = AlternateView.CreateAlternateViewFromString(GetTextonly(body), null, "text/plain"); var htmlView = AlternateView.CreateAlternateViewFromString(body, null, "text/html"); mailMessage.AlternateViews.Add(plainTextView); mailMessage.AlternateViews.Add(htmlView); mailClient.Send(mailMessage); } }
</string></string>


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

После успешного отправления электронной почты:

mailClient.Send(mailMessage);

Очистите коллекцию адресов To, затем добавьте свой адрес BCC как адрес To и отправьте его повторно.

mailMessage.To.Clear(); // clear the existing To & Cc fields mailMessage.Cc.Clear(); mailMessage.To.Add(new MailAddress("[removed_email]","CopyAddress")); mailClient.Send(mailMessage);

licensed under cc by-sa 3.0 with attribution.