gpt4 book ai didi

delphi - 印地10 + OpenSSL : send email code stopped working on Windows 8

转载 作者:行者123 更新时间:2023-12-03 15:45:17 24 4
gpt4 key购买 nike

代码在 Windows 8 上停止运行。它在 Windows7、Windows XP 上运行良好...我找到了解决此问题的方法:以 Windows 兼容模式启动应用程序:Windows XP (Service Pack 3) - 代码工作。如果 Windows 兼容模式是 Windows 7,则代码无法运行。我以管理员身份运行应用程序。已经尝试关闭防病毒软件和防火墙。我可以使用另一个 smtp 客户端发送具有相同参数的电子邮件,例如.Net SmtpClient。该问题在不同的 Windows 8 计算机(家庭、办公室)上重现。我创建了简单的测试应用程序。代码是在Delphi XE上编写的,Indy 10.5.7,OpenSSL 1.0.1.3 dll放在test.exe文件夹中。

有什么想法吗?

代码:

SSLHandler.MaxLineAction := maException;
SSLHandler.SSLOptions.Method := sslvTLSv1;
SSLHandler.SSLOptions.Mode := sslmUnassigned;
SSLHandler.SSLOptions.VerifyMode := [];
SSLHandler.SSLOptions.VerifyDepth := 0;
SSLHandler.OnStatusInfo := IdSSLIOHandlerSocketOpenSSL1StatusInfo;

SMTP.IOHandler := SSLHandler;
SMTP.Host := 'smtp.gmail.com';
SMTP.Port := 587;
SMTP.UseTLS := utUseExplicitTLS;
SMTP.Username := FromAddress;
SMTP.Password := AuthPassword;

Email.From.Address := FromAddress;
Email.Recipients.EmailAddresses := ToAddress;
Email.Subject := Subject;
Email.Body.Text := Body;

SMTP.Connect;
SMTP.Send(Email);
SMTP.Disconnect;

输出:

SSL status: "before/connect initialization"

SSL status: "before/connect initialization"

SSL status: "SSLv3 write client hello A"

SSL status: "SSLv3 read server hello A"

EIdSocketError with message 'Socket Error # 10060 Connection timed out.'

最佳答案

这是IdHTTP的ReadTimeout。默认情况下,它是 -1,并且不适用于 Windows 8。将其设置为任何正数,例如 15000ms 或 30000 将解决该问题。

请注意,您需要以编程方式在 IdHTTP 对象上设置数值。不要尝试通过对象检查器设置绑定(bind)的 IoHandler,因为它不会以这种方式工作。

示例:

  IdHTTP1.ReadTimeout := 30000;

其中一个告诉 Indy 在其套接字操作上使用无限超时。但是,为了解决 Vista+ 上的 OpenSSL 在连接断开时出现的死锁,如果 ReadTimeout <= 0,TIdSSLIOHandlerSocketOpenSSL 会在较低套接字层强制执行 30 秒超时。}

Bob Daneshfar 发布于 this forum 的解决方案.

关于delphi - 印地10 + OpenSSL : send email code stopped working on Windows 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14756882/

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