2017-08-09 14 views
0

RackSpaceに正しく接続されたIMAP4クライアントがありますが、クライアントはAmazonの仕事用メールに移行しています。アマゾンパーDelphiとIndyによるAmazon Work Mailへの接続

は、命令を出版:

 
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();

です。私はコンポーネントのソースを介してスレッドを追跡し、それが機能のAmazonからの返品を待っていることがわかりましたTIdIMAP4.GetResponse: string;それはちょうどそこに非常に長い時間ぶら下がって、その後、 "接続が正常に閉じた"例外をスローします。

デルファイ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

あなたはutUseRequireTLSからutUseImplicitTLSTIdImap4.UseTLSプロパティを変更する必要があります。 IMAPポート993は、ソケットが接続されるとすぐにクライアントがSSL/TLSハンドシェイクを送信してから、サーバーがIMAPグリーティング(暗号化)をクライアントに送信することができるようになります。 utUseRequireTLSはそのハンドシェイクを行いません。utUseImplicitTLSです。クライアントがハンドシェイクを送信していないためにクライアントがフリーズしていて、サーバーが送信していない(暗号化されていない)グリーティングを読み取ろうとしています。

サイドノートでは、現在設定しているSSLIOHandlerのプロパティのほとんどを設定しないでください。手動で設定する必要がある唯一のプロパティは、Name(オプション)、SSLOptions、および望ましいイベントハンドラです。残りのプロパティはIndyによって内部的に処理されます(主にConnect())ので、それらを使いこなす必要はありません。

+0

それはトリックでした。 –

関連する問題