You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MimeKit SMTP Client如何排除特定域的信封收件人

解决MimeKit发送邮件时信封收件人与邮件内容收件人分离的问题

不需要更换其他库,MimeKit的SmtpClient提供了重载的Send方法,允许你手动指定SMTP信封的收件人列表,完全不用修改原邮件内容里的To/Cc字段,刚好满足你的需求。

核心原理

SMTP协议中,信封层面的RCP TO指令与邮件内容里的To/Cc是相互独立的。MimeKit默认会将邮件的To、Cc、Bcc收件人全部加入RCP TO,但你可以通过重载方法自定义这个列表,实现“内容保留收件人,信封排除特定域”的效果。

修改后的代码

将原代码中的client.Send(message)替换为以下逻辑:

public void SendMessage(string emlFilePath, List<string> domainsToExclude) 
{
    // Load message EML file
    MimeMessage message;

    using(var stream = File.OpenRead(emlFilePath)) 
    {
        message = MimeMessage.Load(stream);
    }

    using(var client = new SmtpClient(new ProtocolLogger(Console.OpenStandardOutput()))) 
    {
        client.Connect("smtp_server", 587, SecureSocketOptions.StartTls);
        client.Authenticate("user", "pass");

        // 构建信封收件人列表:排除指定域的收件人
        var filteredRecipients = new List<MailboxAddress>();
        
        // 处理To收件人
        foreach (var addr in message.To.Mailboxes)
        {
            var domain = addr.Address.Split('@').LastOrDefault();
            if (!domainsToExclude.Contains(domain, StringComparer.OrdinalIgnoreCase))
            {
                filteredRecipients.Add(addr);
            }
        }
        
        // 处理Cc收件人
        foreach (var addr in message.Cc.Mailboxes)
        {
            var domain = addr.Address.Split('@').LastOrDefault();
            if (!domainsToExclude.Contains(domain, StringComparer.OrdinalIgnoreCase))
            {
                filteredRecipients.Add(addr);
            }
        }

        // 使用自定义收件人列表发送,原邮件内容保持不变
        client.Send(message, filteredRecipients);
 
        client.Disconnect(true);
    }
}

效果说明

  • 邮件内容里的To/Cc字段完全保留,Outlook等客户端打开邮件时仍能看到所有收件人(包括exclude.com域的);
  • SMTP通信过程中,RCP TO指令只会包含筛选后的收件人,exclude.com域的地址不会被发送到SMTP服务器。

内容的提问来源于stack exchange,提问作者Rafiq39

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:07:22