2

gmail 経由でメールを送信する際に奇妙な問題が発生しています。VirtualBox(4.2)上のWindows 7 Professional 32ビットで動作するDelphi 7およびIndy 9を使用しています

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を処理するための別のライブラリを見つけました...

今、私はIndy 9に干渉せず、期待どおりに動作するSynapseを使用しています。

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

うまくいけば、これは同じ問題を持つ他の人を助けるでしょう。

于 2013-01-22T13:54:08.450 に答える