gpt4 book ai didi

delphi - 使用 TIdSSLIOHandlerSocketOpenSSL 时 idSMTP 连接超时

转载 作者:行者123 更新时间:2023-12-03 15:54:37 28 4
gpt4 key购买 nike

我在使用 TidSMTPTIdSSLIOHandlerSocketOpenSSL 时遇到问题,仅通过连接到服务器就会出现“套接字错误”

这是表单组件代码

  object IdSMTP: TIdSMTP
IOHandler = IdSSLIOHandlerSSL
Port = 465
SASLMechanisms = <>
UseTLS = utUseImplicitTLS
Left = 93
Top = 49
end
object IdSSLIOHandlerSSL: TIdSSLIOHandlerSocketOpenSSL
OnStatus = IdSSLIOHandlerSSLStatus
Destination = ':465'
MaxLineAction = maException
Port = 465
DefaultPort = 0
SSLOptions.Mode = sslmUnassigned
SSLOptions.VerifyMode = []
SSLOptions.VerifyDepth = 0
OnStatusInfo = IdSSLIOHandlerSSLStatusInfo
Left = 88
Top = 112
end

和德尔福代码

 IdSMTP.Username  := 'username';
IdSMTP.Password := 'password';
IdSMTP.Host := 'domain';
IdSMTP.Port := 465;
IdSMTP.UseTLS := utUseImplicitTLS;
try
IdSMTP.Connect;
except
on E:Exception do
// Socket Error, Connection Timeout is thrown.
Memo1.Lines.Add(E.Message);
end;

我记录了 SSL IO 状态并得到了以下信息:

Resolving hostname {domain}.
Connecting to {ip}.
SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv3 write client hello A"
SSL status: "SSLv3 read server hello A"
Socket Error # 10060
Connection timed out.

顺便说一句,我们的邮件服务器正在使用自签名证书。

我做错了什么?

TIA

更新:2014 年 2 月 7 日

尝试过Sending mail to Gmail using Indy提示,但我在SSLv3 read server hello A之后也连接正常关闭发送电子邮件。

Resolving hostname smtp.gmail.com.
Connecting to 74.125.25.108.
Connected.
Sending Email..
SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv3 write client hello A"
SSL status: "SSLv3 read server hello A"
Disconnected.
Connection Closed Gracefully.

这是新代码:

 IdSMTP.Username  := 'username';
IdSMTP.Password := 'password';
IdSMTP.Host := 'smtp.gmail.com';
IdSMTP.UseTLS := utUseExplicitTLS;
IdSMTP.Port := 587;
try
// Can connect successfully
IdSMTP.Connect;

// This part throws the exception
IdSMTP.Send(IdMessage);
except
on E:Exception do
// Disconnected, connection closed gracefully
Memo1.Lines.Add(E.Message);
end;

更新:

尝试使用连接到同一域的 Thunderbird 发送电子邮件。

雷鸟: Wireshark capture - Sending email using thunderbird

印地: Wireshark capture - Using Indy

我的程序中没有发生“客户端 key 交换,...​​”。

已解决

此问题已通过手动设置连接超时解决

最佳答案

您正在使用隐式 SSL。这意味着一旦套接字连接到服务器,在交换任何应用程序数据(SMTP 命令/响应)之前,就会启动 SSL 握手。客户端 hello 被发送到服务器,然后在等待服务器发回 hello 作为响应时发生超时。这意味着服务器没有在您连接的端口上使用 SSL。

需要记住的一点 - 设置 UseTLS 属性可能会更改 Port 属性,因此请确保 Port 确实是您的属性期待 Connect() 被调用。为了确保这一点,请尝试在设置 UseTLS 之后而不是之前设置 Port

关于delphi - 使用 TIdSSLIOHandlerSocketOpenSSL 时 idSMTP 连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24506152/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com