在 C# 中使用不带 TO 的 BCC 通过 SMTP 发送邮件

Posted

技术标签:

【中文标题】在 C# 中使用不带 TO 的 BCC 通过 SMTP 发送邮件【英文标题】:Sending Mail via SMTP in C# using BCC without TO 【发布时间】:2010-09-23 01:39:50 【问题描述】:

我正在尝试使用 C# 中的 System.Net.Mail.MailMessage 类来创建一封电子邮件,该电子邮件全部通过 BCC 发送到电子邮件地址列表。我不想包含TO 地址,但似乎我必须包含,因为如果我在MailMessage 构造函数中为TO 地址使用空字符串,则会出现异常。错误状态:

ArgumentException
The parameter 'addresses' cannot be an empty string.
Parameter name: addresses

当然可以只使用BCC 发送电子邮件,因为这不是 SMTP 的限制。

有没有办法解决这个问题?

【问题讨论】:

我会向 MS 抱怨这件事。但在目前的情况下它对你没有帮助。 抱怨总是有帮助的。它给人一种温暖的仇恨感。 【参考方案1】:

我想如果你注释掉整个emailMessage.To.Add(sendTo); 行,它会发送To 字段为空的电子邮件。

【讨论】:

【参考方案2】:

对不希望人们一直回复的内部邮件群执行相同的操作。

将其发送给您自己(或虚拟帐户),然后添加您的密件抄送列表。

【讨论】:

【参考方案3】:

您必须包含收件人地址。只需将其发送到您不介意接收邮件的“垃圾”电子邮件地址即可。

【讨论】:

我认为您不必包含收件人地址。【参考方案4】:

它甚至不需要是一个真实的电子邮件地址,我通常使用Mailer@CompanyName.com 表示TO,使用NoReply@CompanyName 表示FROM

【讨论】:

【参考方案5】:

只是不要在 To-property 上调用 Add-method。

【讨论】:

【参考方案6】:

必须有一个地址。自从 80 年代最初的 sendmail 和我所知道的所有 SMTP 邮件程序的实现以来,就是这种方式,具有相同的要求。您可以只使用一个虚拟地址。

【讨论】:

【参考方案7】:

您可以使用一个临时的假地址,然后将其删除:

MailMessage msg = new MailMessage(from, "fake@example.com");
msg.To.Clear();
foreach (string email in bcc.Split(';').Select(x => x.Trim()).Where(x => x != ""))

     msg.Bcc.Add(email);

【讨论】:

【参考方案8】:

我认为您正在尝试做类似的事情:

var msg = new MailMessage("no-reply@notreal.com", "");

这就是您看到错误消息的原因。

请尝试以下方法:

MailMessage msg = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.notreal.com");
msg.From = new MailAddress("no-reply@notreal.com");
//msg.To.Add("target@notreal.com"); <--not needed
msg.Bcc.Add("BCCtarget@notreal.com");

【讨论】:

以上是关于在 C# 中使用不带 TO 的 BCC 通过 SMTP 发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

python:如何使用TO,CC和BCC发送邮件?

C# Enum.Parse

在 C# 中使用正则表达式解析电子邮件

Laravel Mail::send() 发送到多个 to 或 bcc 地址

python使用SMTP发邮件时使用Cc(抄送)和Bcc(密送)

将 HWND 的 native@0xc41bcc 输出到实际窗口 ID