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

Delphi 11中TIdIMAP4在Win11/Server2016遇Command Argument Error.12求助

Indy TIdIMAP4在Windows 11/Server 2016上出现"Command Argument Error. 12"问题排查

问题描述

我使用Indy组件TIdIMAP4开发的邮件读取与附件下载应用,在Windows 10上运行正常,但迁移至Windows 11或Windows Server 2016时,出现错误:Command Argument Error. 12。已采用GitHub下载的最新版SSL库,同版本库在另一个仅负责发送邮件的应用中可正常工作。若在调用Connect前执行SSLHandler.StartSSL,会触发Socket Error #10038错误。尝试过更换不同版本SSL库、提前调用StartSSL方法,均未解决问题。

相关代码

var
  IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
  IMAP4: TIdIMAP4;
...
begin
  IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(IMAP4);
  IdSSLIOHandlerSocketOpenSSL1.Destination := IMAP4.Host + ':' + IntToStr(IMAP4.Port);
  IdSSLIOHandlerSocketOpenSSL1.Host := IMAP4.Host;
  IdSSLIOHandlerSocketOpenSSL1.Port := IMAP4.Port;
  IdSSLIOHandlerSocketOpenSSL1.DefaultPort := IMAP4.Port;
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1_2;
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmUnassigned;
  IMAP4.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
for I := 1 to 10 do
      begin
        try
          IMAP4.Connect; 
          if IMAP4.Connected then
            Break;
        except
          on E: Exception do
            AddLog('Error: ' + IntToStr(I) + '. ' + E.Message, False, True);
        end;
      end;
end;

失败连接日志

Stat Connected.
Recv 21.01.2025 10:36:24: * OK The Microsoft Exchange IMAP4 service is ready. [TQBNADAAUAAyADgAMABDAEEAMAAxADAAMwAuAFMAVwBFAFAAMgA4ADAALgBQAFIATwBEAC4ATwBVAFQATABPAE8ASwAuAEMATwBNAA==]
Sent 21.01.2025 10:36:24: C1 LOGIN 
Recv 21.01.2025 10:36:24: C1 BAD Command Argument Error. 12
Sent 21.01.2025 10:36:24: C2 LOGOUT
Recv 21.01.2025 10:36:24: * BYE Microsoft Exchange Server IMAP4 server signing off.
C2 OK LOGOUT completed.
Stat Disconnected.

排查建议

  • 核心问题定位:从日志可见,发送的LOGIN命令未携带用户名和密码参数,仅发送了C1 LOGIN (末尾带空格但无有效参数),这直接导致Exchange服务器返回参数错误。
  • 检查认证参数设置:确认调用IMAP4.Connect前,是否正确赋值IMAP4.Username和IMAP4.Password属性。若这两个属性为空,Indy会发送空的LOGIN命令,触发服务器报错。
  • 优化SSLIOHandler配置:
    • 无需手动设置Destination、Host、Port、DefaultPort,这些参数会在IMAP4.Connect时自动从IMAP组件同步,手动设置可能引发状态冲突。
    • 将SSLOptions.Mode设置为sslmClient,明确客户端模式,避免SSL协商阶段的异常。
  • 禁止手动调用StartSSL:TIdIMAP4会根据端口或服务器配置自动启动SSL(如993端口自动使用SSL,143端口可通过UseTLS配置STARTTLS),提前手动调用会导致Socket状态异常,引发10038错误(操作非套接字)。
  • Windows版本兼容性处理:Windows 11/Server 2016的网络安全策略更严格,需确保:
    • 使用最新稳定版Indy组件,旧版本可能存在新系统适配问题。
    • SSL库文件(如libcrypto-*.dll、libssl-*.dll)与应用程序位数(32/64位)完全匹配,且放置在应用目录或系统PATH可访问路径中。
  • 验证SSL连接模式:若使用143端口,需确认IMAP4.UseTLS设置为utUseExplicitTLS(STARTTLS协商);若使用993端口,设置为utUseImplicitTLS(直接SSL连接),匹配服务器的SSL配置要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:53:15