【问题标题】:Sending Emails with BCC list not working使用密件抄送列表发送电子邮件不起作用
【发布时间】:2014-07-22 10:16:29
【问题描述】:

我正在尝试向单个“收件人”收件人和“密件抄送”收件人列表发送电子邮件。 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);
        }
    }

有什么想法吗?

【问题讨论】:

  • 你怎么知道它没有被发送?
  • 我查看了交换跟踪日志。它被发送到收件人地址而不是密件抄送地址
  • GetTextonly 是什么样的?还要看最后一行,您正在创建一个新的 SmtpClient 实例,您已经在第一行创建了一个。所以没有使用mailClient。
  • ..... 还将 if(FilePath != string.Empty) 更改为 if(!string.IsNullOrEmpty(FilePath)

标签: asp.net email bcc


【解决方案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);

【讨论】:

    【解决方案2】:

    我没有提到的一件事是邮件被放在取件目录中,而不是直接发送。 我发现一个博客解释说如果使用拾取目录,则不会发送密件抄送地址,您可以将它们放在重试目录中。这通过简单的修复解决了我的问题: Unable to send Bcc using System.Net.Mail when specifying a Pickup Directory(Exchange 2007/Exchange 2010) in code

    【讨论】:

    【解决方案3】:

    我创建了一个测试应用程序并运行 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);
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      • 2011-04-02
      • 1970-01-01
      • 2013-06-08
      • 2013-08-28
      相关资源
      最近更新 更多