Delphi 11,IMAP,命令参数错误。 Windows Server 2016 上为 12

问题描述 投票:0回答:1

我有一个使用 Indy

TIdIMAP4
连接到邮件服务器、读取消息和下载附件的应用程序。该应用程序在 Windows 10 上可以正常运行。

尝试将其传输到 Windows 11 或 Windows Server 2016 时,出现错误:

命令参数错误。 12

我正在使用从 GitHub 下载的最新版本的 SSL 库。使用相同的版本,另一个应用程序运行良好,仅发送电子邮件。

这是代码:

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;

Version SSL

如果您在

SSLHandler.StartSSL
调用之前添加
Connect
,则会出现错误“Socket Error #10038”。

你能帮我找出为什么我无法连接到邮件服务器吗?

我尝试使用不同版本的 SSL 库,在加入之前调用

SSLHandler.StartSSL
方法。没有任何帮助。


更新:

以下是失败的连接尝试的日志:

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.
email delphi ssl imap indy
1个回答
1
投票

服务器正在报告错误消息,以回复未发送任何凭据的

LOGIN
命令。

发生这种情况的唯一方法是,如果您将

IMAP4.AuthType
设置为
iatUserPass
(默认值),但
IMAP4.Username
IMAP4.Password
均为空白。不要这样做!

您需要:

  • 在致电

    IMAP4.Connect()
    之前分配有效凭据。

  • AAutoLogin
    IMAP4.Connect()
    参数设置为False(默认为True)。如果需要,您可以稍后调用
    IMAP4.Login()
    (分配有效凭据后)。

© www.soinside.com 2019 - 2024. All rights reserved.