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