2012-12-13 35 views
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(); 
+2

是否有使用恐龍時代老,不支持的,印第9任何原因,雖然有免費的Indy 10,和許多其他組件? –

+1

發送成功的'STARTTLS'並建立TLS會話後,您需要重新發布新的'HELO' /'EHLO'命令來發現服務器的新功能,這些功能可能因激活TLS而發生改變。 –

+0

@ Nickolay,我們在此設置運行在合理的時間遷移到印第安納波利斯10,反正它不是我的desicion @Remy勒博太多的應用程序,我看不出有什麼應與在SSL明顯的計時問題幫助處理程序,但感謝提示 – fuchs777

回答

1

由於沒有人似乎有此印地10的解決方案和升級是沒辦法(項目太多的時候)我發現了一個不同庫來處理SMTP與TLS ...

現在我用的Synapse不與印第9干涉,不正是我的預期。

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

希望這有助於其他有同樣的問題。