2

単一の「To」受信者と「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);
        }
    }

何か案は?

4

3 に答える 3

2

私が言及しなかったことの 1 つは、メールが直接送信されるのではなく、ピックアップ ディレクトリに置かれることです。ピックアップ ディレクトリを使用すると bcc アドレスが送信されず、代わりに再試行ディレクトリに配置できることを説明するブログを見つけました。これにより、コードでピックアップ ディレクトリ (Exchange 2007/Exchange 2010) を指定するときに System.Net.Mail を使用して Bcc を送信できないという簡単な修正で問題が解決しました。

于 2014-06-03T15:29:41.983 に答える
1

回避策として、メールを BCC アドレスに明示的に送信できます。

メールを正常に送信した後:

      mailClient.Send(mailMessage);

Toアドレスのコレクションをクリアしてから、BCCアドレスをToアドレスとして追加し、再送信してください。

       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 を逆コンパイルして内部で何をしているのかを確認しました。To アドレスと Bcc アドレスはすべて 1 つのコレクションにまとめられています。

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 に答える