2

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

1 回答 1

1

由于似乎没有人对此有解决方案并且无法选择升级到 Indy 10(涉及的项目太多),我找到了一个不同的库来处理 tls 的 smtp ...

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

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

希望这可以帮助其他有同样问题的人。

于 2013-01-22T13:54:08.450 回答