gpt4 book ai didi

delphi - Indy 9 SMTP 使用 TLS 发送导致崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 13:04:24 34 4
gpt4 key购买 nike

我在通过 gmail 发送电子邮件时遇到一个奇怪的问题。我正在使用 Delphi 7 和 Indy 9 在 VirtualBox (4.2) 上的 Windows 7 Professionel 32 位上工作

由于 Indy 9 不支持开箱即用的 TLS,我必须自己发送 STARTTLS 命令。

这对于一个小的测试邮件来说效果很好。带有附件的普通邮件会导致 VirtualBox 完全崩溃。没有 Windows 蓝屏。

我已经找到了解决方法,但它看起来很脏。如果我从 Delphi 源添加 IdSSLOpenSSL.pas 并添加 Sleep(5);到它工作的发送功能

function TIdSSLIOHandlerSocket.Send(var ABuf; ALen: integer): integer;
begin
// 13.12.2012 fix timing
Sleep(5);

if fPassThrough then begin
result := inherited Send(ABuf, ALen);
end
else begin
result := SendEnc(ABuf, ALen);
end;
end;

有没有更好的方法来解决这个问题?

如果您需要代码来设置 IOHandler

sslIOHandler                   := TIdSSLIOHandlerSocket.Create(nil);
sslIOHandler.SSLOptions.Method := sslvTLSv1;
sslIOHandler.PassThrough := True;
IdSSLOpenSSLHeaders.Load;
smtpClient.Username := tbUsername.Text;
smtpClient.Password := tbPassword.Text;
smtpClient.AuthenticationType := atLogin;
smtpClient.IOHandler := sslIOHandler;
smtpClient.Connect(C_TIMEOUT);
smtpClient.SendCmd('STARTTLS');
sslIOHandler.PassThrough := False;
smtpClient.Authenticate();

最佳答案

因为似乎没有人对此有解决方案并且升级到 Indy 10 是不可能的(涉及太多项目)我找到了一个不同的库来处理带有 tls 的 smtp...

现在我使用 Synapse,它不会干扰 Indy 9,并且完全符合我的预期。

http://synapse.ararat.cz/doku.php/public:howto:smtpsend

希望这能帮助其他遇到同样问题的人。

关于delphi - Indy 9 SMTP 使用 TLS 发送导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13864006/

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