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

MailKit IMAP:邮件日期/大小获取错误及服务器邮件删除求助

VB.NET + MailKit 连接Outlook 365的两个问题解决指引

问题1:InternalDate和Size存入数据库值异常(32/64)

这种情况几乎都是赋值环节的错误,而非MailKit获取的数据本身有问题。大概率是你误将枚举常量(比如MessageFlags的某个值)或者类型标识赋值给了数据库字段,而非邮件的真实InternalDate和Size属性。

正确的取值与赋值示例:

' 遍历邮件时正确获取InternalDate和Size
For Each msgSummary In inbox.Fetch(0, -1, MessageSummaryItems.InternalDate Or MessageSummaryItems.Size)
    ' 直接取邮件的真实属性值
    Dim mailDate As DateTime = msgSummary.InternalDate
    Dim mailSize As Integer = msgSummary.Size

    ' 写入数据库时使用上述变量(以SqlCommand为例)
    cmd.Parameters.AddWithValue("@Inbox_TempDate", mailDate)
    cmd.Parameters.AddWithValue("@Inbox_Size", mailSize)
    ' 执行数据库写入操作...
Next

同时检查数据库字段类型:Inbox_TempDate需设为datetime/datetime2类型,Inbox_Size设为int/bigint类型,避免因类型不匹配导致的隐式转换错误。

问题2:使用AddFlags标记删除邮件的正确语法

MailKit操作IMAP删除邮件需要两步:标记Deleted标记 + 执行Expunge(彻底删除),Outlook 365的IMAP完全支持此流程,VB.NET下的正确语法如下:

' 先收集要删除的邮件UniqueId集合(示例:获取所有已下载的邮件ID)
Dim deleteIds As New List(Of UniqueId)()
' 此处填充deleteIds,比如从已下载记录中获取对应UniqueId...

' 标记邮件为Deleted状态(第三个参数True表示同步到服务器)
inbox.AddFlags(deleteIds, MessageFlags.Deleted, True)

' 彻底删除已标记的邮件(如果省略参数,会删除所有标记为Deleted的邮件)
inbox.Expunge(deleteIds)

补充说明:

  • 若只标记Deleted而不执行Expunge,Outlook 365会将邮件移至「已删除邮件」文件夹,不会从服务器彻底移除;
  • 确保你的IMAP账号拥有邮件删除权限;
  • 批量操作时,deleteIds必须是准确的邮件UniqueId集合,可通过Fetch或Search方法获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:02:22