我有一個TIdSMTPServer
是在端口25和465上運行,它是OnConnect
事件是這樣的:是否有可能實現SSL連接當端口收到的郵件25
procedure TMainForm.SMTPServerConnect(AContext: TIdContext);
begin
if (AContext.Connection.IOHandler is TIdSSLIOHandlerSocketBase) then begin
TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough := False;
end;
激活SMTPServer
這片之前代碼被執行:
with IdServerIOHandlerSSLOpenSSL1 do begin
SSLOptions.CertFile := myCertFile;
SSLOptions.RootCertFile := myRootCertFile;
SSLOptions.KeyFile := myKeyFile;
end;
SMTPServer.IOHandler := IdServerIOHandlerSSLOpenSSL1;
一切都很好,當一個客戶端試圖連接到端口465(使用implicit SSL
)。但是當另一個smtp服務器(例如yahoo
或gmail
)發送郵件時,它會發送到端口25,並在我的OnConnect
事件中被設備阻止。所以我問是否有可能發出類似STARTTLS
的信息,並以某種方式使用SSL對端口25上的連接進行加密,或者有辦法告訴另一方我希望使用SSL在端口465上進行通信(在兩種情況下均使用我的證書,連接總是直接的 - 沒有用戶名/密碼認證)?
是否可以根據端口(端口465上的'utUseImplicitTLS'和端口25上的'utUseExplicitTLS')更改TIdSMTPServer.UseTLS屬性,或者必須在啓動時指定一次「SMTPServer」處於活動狀態的整個時間保持不變? – 2014-10-20 09:58:53
「STARTTLS」命令(如果由客戶端發出)可以保證在端口25上加密的SSL/TLS連接嗎? – 2014-10-20 13:21:42
是的,這就是'STARTTLS'的意思。客戶端連接未加密,在準備就緒時發送'STARTTLS',如果服務器接受它,而不是交換SSL/TLS握手,並且從該點開始所有內容都被加密。 – 2014-10-20 19:17:33