You need to enable JavaScript to run this app. C#使用MailKit每5秒轮询收件箱,空箱时触发ArgumentOutOfRangeException报错
优惠活动
大模型
产品
解决方案
定价
更多

C#使用MailKit每5秒轮询收件箱,空箱时触发ArgumentOutOfRangeException报错

问题原因

  • 报错的核心触发逻辑是当收件箱为空时,inbox.Count 值为0,你调用inbox.GetMessage(inbox.Count - 1) 实际传入的索引是-1,完全超出合法索引范围(合法索引范围是0 ~ Count-1,Count为0时没有合法索引),所以直接抛出System.ArgumentOutOfRangeException: 指定的参数超出有效值范围。(参数“index”)错误
  • 另外你原有代码的判断逻辑存在语法错误:if(DATA != null); 末尾多了分号,导致if判断和后续的大括号代码块完全脱节,不管条件是否成立,大括号内的代码都会执行,完全起不到拦截作用

修复后代码

using (var client = new ImapClient())
{
    client.Connect(EXT_IMAP_SERVER, EXT_IMAP_PORT, true);
    client.Authenticate(EXT_USERNAME, EXT_PASSWORD);
    var inbox = client.Inbox;
    inbox.Open(FolderAccess.ReadWrite);
    
    // 先判断收件箱是否有邮件,没有就直接跳过后续逻辑
    if (inbox.Count > 0)
    {
        var LAST_MSG = inbox.GetMessage(inbox.Count - 1);
        DATA = LAST_MSG.Subject;
        
        if (DATA != null)
        {
            inbox.AddFlags(inbox.Count - 1, MessageFlags.Deleted, true);
        }
    }
    
    client.Disconnect(true);
}

改动说明

  • 新增收件箱非空判断:在读取邮件前先校验inbox.Count > 0,为空时直接跳过所有邮件读写逻辑,避免传入非法索引
  • 移除了if判断末尾多余的分号,保证条件判断和后续执行逻辑的绑定关系生效
  • 把邮件读取、主题判断、标记删除的逻辑都收拢到非空判断的分支内,完全规避空收件箱场景下的非法操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 16:15:10