我有一个通过 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();