2017-08-09 84 views
0

我有一個IMAP4客戶端,可以很好地連接到RackSpace,但客戶端正在轉向亞馬遜工作郵件。使用Delphi和Indy連接到亞馬遜工作郵件

每亞馬遜發佈說明:

 
Connect to your IMAP Client Application 

You can connect any IMAP-compatible client software to Amazon WorkMail by providing the following information: 

Type of account IMAP 
Protocol IMAPS 
Port 993 
Secure connection Required;SSL 
Incoming username Email address associated with your Amazon WorkMail account 
Incoming password Your password 
Incoming server The endpoint matching the region where your mailbox is located: • us-east-1 imap.mail.us-east-1.awsapps.com 

我有編碼的唯一操作IMAPClient.Connect();

它返回的「連接」狀態,但在此之後的程序掛起。我通過組件源跟蹤了線程,發現它正在等待從亞馬遜返回的函數TIdIMAP4.GetResponse: string;它只是掛在那裏很長一段時間,然後拋出「Connection Gracefully Closed」異常。

德爾福10.2

印10.6.2.5366

我缺少什麼?

我的設置是:

var 
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL; 

with IMAPClient do 
begin 
    Name := 'IMAPClient'; 
    OnStatus := IMAPClientStatus; 
    IOHandler := IdSSLIOHandlerSocketOpenSSL1; 
    OnDisconnected := IMAPClientDisconnected; 
    OnConnected := IMAPClientConnected; 
    Password := 'EmailTest1236'; 
    Port := 993; 
    Username := '[email protected]'; 
    Host := 'imap.mail.us-east-1.awsapps.com'; 
    UseTLS := utUseRequireTLS; 
    SASLMechanisms := <>; 
    MilliSecsToWaitToClearBuffer := 10; 
end; 

IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(Self); 

with IdSSLIOHandlerSocketOpenSSL1 do 
begin 
    Name := 'IdSSLIOHandlerSocketOpenSSL1'; 
    OnStatus := IdSSLIOHandlerSocketOpenSSL1Status; 
    Destination := 'imap.mail.us-east-1.awsapps.com:993'; 
    Host := 'imap.mail.us-east-1.awsapps.com'; 
    MaxLineAction := maException; 
    Port := 993; 
    BoundPort := 993; 
    DefaultPort := 0; 
end; 

的電子郵件帳戶和密碼是假的。我不能給出一個真正的。

​​

回答

1

您需要將TIdImap4.UseTLS屬性更改從utUseRequireTLSutUseImplicitTLS。 IMAP端口993希望客戶端在套接字連接後立即發送SSL/TLS握手,然後服務器可以將IMAP問候(加密)發送到客戶端。 utUseRequireTLS不會那樣握手,utUseImplicitTLS呢。您的客戶端因爲沒有發送握手而處於凍結狀態,並且正在嘗試讀取服務器未發送的(未加密的)問候語。

在旁註中,您不應該設置您當前正在設置的大部分SSLIOHandler的屬性。您應該手動設置的唯一屬性是Name(可選),SSLOptions和所需的事件處理程序。其餘的房產由Indy在內部爲您處理(主要由Connect()),因此您不需要惹惱他們。

+0

這樣做。 –