Отправка писем с списком 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.