我有一个使用 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;
如果您在
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.
服务器正在报告错误消息,以回复未发送任何凭据的
LOGIN
命令。
发生这种情况的唯一方法是,如果您将
IMAP4.AuthType
设置为 iatUserPass
(默认值),但 IMAP4.Username
和 IMAP4.Password
均为空白。不要这样做!
您需要:
在致电
IMAP4.Connect()
之前分配有效凭据。
将
AAutoLogin
的IMAP4.Connect()
参数设置为False(默认为True)。如果需要,您可以稍后调用 IMAP4.Login()
(分配有效凭据后)。