我在使用TidSMTP一個問題TIdSSLIOHandlerSocketOpenSSL得到「套接字錯誤」只需連接到服務器時。連接超時時idSMTP使用TIdSSLIOHandlerSocketOpenSSL
這裏的表格組件代碼
object IdSMTP: TIdSMTP
IOHandler = IdSSLIOHandlerSSL
Port = 465
SASLMechanisms = <>
UseTLS = utUseImplicitTLS
Left = 93
Top = 49
end
object IdSSLIOHandlerSSL: TIdSSLIOHandlerSocketOpenSSL
OnStatus = IdSSLIOHandlerSSLStatus
Destination = ':465'
MaxLineAction = maException
Port = 465
DefaultPort = 0
SSLOptions.Mode = sslmUnassigned
SSLOptions.VerifyMode = []
SSLOptions.VerifyDepth = 0
OnStatusInfo = IdSSLIOHandlerSSLStatusInfo
Left = 88
Top = 112
end
和Delphi代碼
IdSMTP.Username := 'username';
IdSMTP.Password := 'password';
IdSMTP.Host := 'domain';
IdSMTP.Port := 465;
IdSMTP.UseTLS := utUseImplicitTLS;
try
IdSMTP.Connect;
except
on E:Exception do
// Socket Error, Connection Timeout is thrown.
Memo1.Lines.Add(E.Message);
end;
我登錄SSL IO狀態,並得到這個:
Resolving hostname {domain}.
Connecting to {ip}.
SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv3 write client hello A"
SSL status: "SSLv3 read server hello A"
Socket Error # 10060
Connection timed out.
我們的郵件服務器使用自簽名順便提一下證書。
我在做什麼錯了?
TIA
更新:2014年7月2日
嘗試Sending mail to Gmail using Indy尖,但我得到連不上擺好發送後也SSLv3的讀取服務器招呼一個的電子郵件。
Resolving hostname smtp.gmail.com.
Connecting to 74.125.25.108.
Connected.
Sending Email..
SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv3 write client hello A"
SSL status: "SSLv3 read server hello A"
Disconnected.
Connection Closed Gracefully.
這裏的新代碼:
IdSMTP.Username := 'username';
IdSMTP.Password := 'password';
IdSMTP.Host := 'smtp.gmail.com';
IdSMTP.UseTLS := utUseExplicitTLS;
IdSMTP.Port := 587;
try
// Can connect successfully
IdSMTP.Connect;
// This part throws the exception
IdSMTP.Send(IdMessage);
except
on E:Exception do
// Disconnected, connection closed gracefully
Memo1.Lines.Add(E.Message);
end;
UPDATE:
試圖使用Thunderbird發送電子郵件連接到同一個域。
雷鳥:
印:
否 「客戶端密鑰交換,...」 發生在我的計劃。
解決
這isssue是通過手動設置connectiontimeout
超時/套接字錯誤發生在服務器hello之後,沒有額外的延遲。連接突然終止。 – jdc
該端口正在使用SSL,因爲我們可以使用其他郵件客戶端(如Thunderbird)發送電子郵件。在設置UseTLS之後放置端口分配也具有相同的結果。 – jdc
立即斷開連接可能意味着Gmail拒絕握手。您是否嘗試過使用數據包嗅探器來查看握手消息?另外,在連接到Gmail時,您是否將SSLVersion設置爲TLSv1?不要使用SSLv3。 –