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

如何在C#中通过SMTP将邮件发送至指定文件夹而非收件箱

解决思路与代码修改说明

首先要明确:SMTP协议仅负责将邮件发送到收件人的邮件服务器,无法直接指定收件方邮箱的存储文件夹——收件邮件的存储路径由收件方的邮件服务器或客户端规则决定。要实现目标,有两种可行方案:

方案1:发送后通过IMAP移动邮件到指定文件夹

发送邮件后,使用IMAP协议登录收件邮箱,将刚收到的邮件移动到目标自定义文件夹。推荐使用MailKit库(比原生System.Net.Mail更稳定且支持IMAP操作),步骤如下:

  1. 通过NuGet安装MailKit:Install-Package MailKit
  2. 修改代码如下:
using MailKit.Net.Smtp;
using MailKit.Net.Imap;
using MimeKit;
using System;

static string smtpAddress = "smtp.gmail.com";
static int smtpPort = 587;
static bool enableSSL = true;
static string senderEmail = "xxxxx";
static string senderPassword = "xxxxxxx";
static string receiverEmail = "xxxx@yyy.com";
static string subject = "Hello";
static string body = "Hello, This is Email sending test using gmail.";
// 收件邮箱的目标文件夹名称
static string targetFolder = "自定义文件夹";

public static void SendEmailAndMoveToFolder()
{
    // 1. 发送邮件
    var message = new MimeMessage();
    message.From.Add(new MailboxAddress("发件人", senderEmail));
    message.To.Add(new MailboxAddress("收件人", receiverEmail));
    message.Subject = subject;
    message.Body = new TextPart("html") { Text = body };

    using (var smtpClient = new SmtpClient())
    {
        smtpClient.Connect(smtpAddress, smtpPort, enableSSL);
        smtpClient.Authenticate(senderEmail, senderPassword);
        smtpClient.Send(message);
        smtpClient.Disconnect(true);
    }

    // 2. 登录收件邮箱,移动邮件到目标文件夹
    using (var imapClient = new ImapClient())
    {
        imapClient.Connect("imap.gmail.com", 993, true);
        imapClient.Authenticate(receiverEmail, "收件邮箱密码或应用专用密码");
        
        // 打开收件箱
        var inbox = imapClient.Inbox;
        inbox.Open(MailKit.FolderAccess.ReadWrite);
        
        // 筛选刚发送的邮件(可根据发件人、主题、发送时间调整条件)
        var query = SearchQuery.FromContains(senderEmail)
                    .And(SearchQuery.SubjectContains(subject))
                    .And(SearchQuery.SentOn(DateTime.Today));
        var targetUids = inbox.Search(query);
        
        // 获取或创建目标文件夹
        var personalNamespace = imapClient.GetPersonalNamespaces()[0];
        var targetFolderObj = imapClient.GetFolder(personalNamespace).GetSubfolder(targetFolder);
        targetFolderObj ??= imapClient.GetFolder(personalNamespace).CreateSubfolder(targetFolder);
        
        // 移动邮件到目标文件夹
        inbox.MoveTo(targetUids, targetFolderObj);
        
        imapClient.Disconnect(true);
    }
}

注意事项:

  • 若使用Gmail,需先开启IMAP服务,且启用两步验证时需使用应用专用密码登录IMAP。
  • 邮件筛选条件可根据实际场景调整,确保精准匹配目标邮件。

方案2:通过邮件标记让客户端自动过滤

无需修改发送逻辑,给邮件添加自定义头或关键字,再在收件方邮件客户端设置过滤规则:

  • 给原生MailMessage添加自定义标记头:
mail.Headers.Add("X-Custom-Tag", "指定文件夹标记");
  • 在收件人邮箱(如Gmail)中设置过滤规则:包含该标记的邮件自动移动到指定文件夹。

这种方案更轻量,无需获取收件邮箱的IMAP操作权限。

内容的提问来源于stack exchange,提问作者senthil .k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:25:19