1

RackSpace に接続して正常に動作する IMAP4 クライアントを使用していますが、クライアントは Amazon 仕事用メールに移行しています。

Amazon の公開された手順に従って:

IMAP クライアント アプリケーションに接続する

次の情報を提供することで、IMAP 互換のクライアント ソフトウェアを Amazon WorkMail に接続できます。

アカウントの種類 IMAP
プロトコル IMAPS
ポート 993
安全な接続が必要;SSL
着信ユーザー名 Amazon WorkMail アカウントに関連付けられた E メールアドレス
着信パスワード あなたのパスワード
受信サーバー メールボックスがある地域に一致するエンドポイント: • 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 := 'emailTest.1236@foo.bar.com';
  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;

メールアカウントとパスワードは偽物です。本物は出せません。

unit uMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdIOHandler, IdIOHandlerSocket,
  IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient,
  IdIMAP4, Vcl.StdCtrls;

type
  TForm4 = class(TForm)
    IMAPClient: TIdIMAP4;
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure IMAPClientStatus(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: string);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
begin
  IMAPClient.Connect();
end;

procedure TForm4.IMAPClientStatus(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: string);
begin
  memo1.Lines.Add(AStatusText);
end;

end.
4

1 に答える 1