2
我有一個奇怪的問題,通過Gmail發送電子郵件。 我正在使用Delphi 7和Indy 9在VirtualBox上運行Windows 7 Professionel 32位(4.2)Indy 9 SMTP與TLS一起發送導致崩潰
由於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();
是否有使用恐龍時代老,不支持的,印第9任何原因,雖然有免費的Indy 10,和許多其他組件? –
發送成功的'STARTTLS'並建立TLS會話後,您需要重新發布新的'HELO' /'EHLO'命令來發現服務器的新功能,這些功能可能因激活TLS而發生改變。 –
@ Nickolay,我們在此設置運行在合理的時間遷移到印第安納波利斯10,反正它不是我的desicion @Remy勒博太多的應用程序,我看不出有什麼應與在SSL明顯的計時問題幫助處理程序,但感謝提示 – fuchs777