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

时间:2012-12-13 16:19:06

标签: delphi smtp indy ssl indy-9

我有一个奇怪的问题是通过Gmail发送电子邮件。 我正在使用Delphi 7和Indy 9在VirtualBox上运行Windows 7 Professionel 32位(4.2)

由于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();

1 个答案:

答案 0 :(得分:1)

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

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

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

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