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

如何使用MailKit库获取电子邮件中自己发送的回复内容

问题解决思路

1. 主题查询遗漏回复的问题

原因:大部分邮件服务会在回复邮件的主题前自动添加Re:(部分语言环境可能是其他前缀),直接用原主题搜索无法匹配带前缀的回复。
解决方案:

  • 可以改为匹配主题包含原主题关键词即可,或者使用SearchQuery.And()组合多个条件,同时匹配带/不带前缀的主题;
  • 若要匹配整个会话线程,更推荐通过References、In-Reply-To头关联原始邮件ID,查询同线程所有邮件。
    示例代码:
// 模糊匹配主题即可覆盖带Re:前缀的回复
var uidsX = client.Inbox.Search(SearchQuery.SubjectContains("Message's Subject"));

2. Message-ID查询返回空的问题

原因:

  • HeaderContains是模糊子串匹配,部分IMAP服务器对Message-ID头的搜索要求精确匹配,不支持模糊查询;
  • 你提供的代码存在变量名笔误,定义的常量是myReplyId,搜索时传的是不存在的myMessageId。
    解决方案:
    使用MailKit内置的SearchQuery.MessageId()方法做精确匹配,性能和兼容性都远高于手动查Header:
const string myReplyId = @"<CAAWrOQmJib_RHUn+3vB9GqATim165zq_Upn_8OTatZZMYGtf5w@mail.gmail.com>";
var myReply = client.Inbox.Search(SearchQuery.MessageId(myReplyId));

3. 已发送文件夹查询无结果的问题

原因:绝大多数情况是没有正确定位、打开已发送文件夹,直接硬编码文件夹名容易因为语言、服务配置不同匹配失败。
解决方案:
通过IMAP的特殊文件夹枚举定位已发送文件夹,确保打开的是正确的路径:

// 优先通过系统标记的特殊文件夹定位已发送目录
var sentFolder = client.GetFolder(client.PersonalNamespaces[0])
    .GetSubfolders()
    .FirstOrDefault(f => f.SpecialFolder == SpecialFolder.Sent);

// 兜底适配Gmail等特殊命名规则的服务
if (sentFolder == null) {
    sentFolder = client.GetFolder("[Gmail]/Sent Mail");
}

// 必须打开文件夹才能执行搜索操作
sentFolder.Open(FolderAccess.ReadOnly);
// 搜索已发送文件夹内的对应邮件
var sentReply = sentFolder.Search(SearchQuery.MessageId(myReplyId));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 10:36:02