2

我正在尝试向单个“收件人”收件人和“密件抄送”收件人列表发送电子邮件。Bcc 收件人列表是一个字符串列表,它们已成功添加到 mailMessage 的 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);
        }
    }

有任何想法吗?

4

3 回答 3

2

我没有提到的一件事是邮件被放在取件目录中,而不是直接发送。我发现一个博客解释说如果使用拾取目录,则不会发送密件抄送地址,您可以将它们放在重试目录中。这通过简单的修复解决了我的问题: 在代码中指定取件目录(Exchange 2007/Exchange 2010)时无法使用 System.Net.Mail 发送密件抄送

于 2014-06-03T15:29:41.983 回答
1

作为一种解决方法,您可以将您的电子邮件明确发送到密件抄送地址。

成功发送电子邮件后:

      mailClient.Send(mailMessage);

清除收件人地址集合,然后将您的密件抄送地址添加为收件人地址,然后重新发送。

       mailMessage.To.Clear();   // clear the existing To & Cc fields
       mailMessage.Cc.Clear();
       mailMessage.To.Add(new MailAddress("bcc@address.com","CopyAddress"));
       mailClient.Send(mailMessage);
于 2016-02-10T06:36:17.883 回答
0

我创建了一个测试应用程序并运行SmptForDev来捕获从本地 IIS 发出的任何电子邮件。我使用了下面的代码,它工作正常。我真正对您的代码所做的只是整理它并且工作正常。我还反编译了 System.Net.Mail.SmtpClient 以查看它在后台做了什么,收件人地址和密件抄送地址都放在一个集合中,如果一个地址正在发送,最好假设它们都是。

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);
            }
        }

在此处输入图像描述

于 2014-06-03T14:15:25.850 回答