システム間アイリスにおけるIMAPクライアントの実装—パートI


ここでは、Interactive Irisプラットフォームを使用してIMAPクライアントを作成する方法について説明します.まず、IMAPの概要を紹介し、メインIMAPコマンドとクライアントの実装について説明します.最後に、アイリスの相互運用性アプリケーションでこのIMAPクライアントの簡単な使用を提供します.
この記事は詳細なimap説明ではないことに注意してください.詳細については、この記事の参照を確認してください.

IMAP概要


インターネットメッセージアクセスプロトコル(IMAP)は、ユーザーに電子メールを取り戻しさせます.マーククリスピンはIMAPを1980年代に提案しました、そして、それ以来RFC 3501 . この記事を書くとき、現在のバージョンはIMAP 4 rev 1です.
このプロトコルが唯一の検索のために設計されることに注意するのは重要です.メールを送信する必要がある場合は、別のプロトコル、単純なメール転送プロトコル(SMTP)を使用する必要があります.IMAPと同じくらい人気がある電子メール検索のための古いプロトコルもあります.

基本的なIMAPコマンドの試み


POP 3のように、IMAPは平文プロトコルです.telnetやopensslのようなTCPクライアントを使って簡単にコマンドを試すことができます.
まず、IMAPホストと電子メールサーバーポートが必要です.たとえば、この記事を書く時に、これはマイクロソフトOutlookサービスに接続するホストとポートです.
展望Office 365com : 993
私たちのTCPクライアントを使用してこのサーバーに接続しましょう.以下のコマンドを入力し、Enterキーを押します.- CRLFフラグの使用に注意してください.このフラグはimapに対してキャリッジリターンとして必須であり、ラインフィード( CRLF )はその行終端である.
$ openssl s_client -connect outlook.office365.com:993 -crlf -quiet
あなたが入力した後、IMAPサーバーはいくつかの情報を示し、入力を待って滞在します.
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert ...
* OK The Microsoft Exchange IMAP4 service is ready. [...]
今私たちの最初のIMAPコマンド:能力を行うことができます.その名前が示すように、このコマンドは、サーバーが提供できる機能を示します.最初の行はIMAPコマンド自身であり、他の行はその出力です.ここで示した他のすべてのIMAPコマンドについても同じです.
TAG1 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL+
TAG1 OK CAPABILITY completed.
権限コマンドの前にトークンを注意してください.タグはすべてのIMAPコマンドに先行しなければなりません.サーバがどのコマンドインスタンスに対応しているかを識別します.一般的に、接頭辞付きの単純なカウンタは、あなたのすべてのニーズに合います.
IMAPサーバは、コマンドを発行するためのタグと、コマンドのステータスを示すフラグとの応答を終了します.許可されている条件はOKです.
コマンドログインはユーザとパスワードを引数として期待します.まず、誰かが無効なユーザ名とパスワードを与えた場合、サーバがどのように応答するかチェックしましょう.
TAG2 LOGIN [email protected] wrong-password
TAG2 NO LOGIN failed.
コマンドタグの後のno statusに注意してください.
では、有効なログインに進みましょう.
TAG3 LOGIN [email protected] password
TAG3 OK LOGIN completed.
今ログインしています.セッションを終了するには、ログアウトコマンドを使用します.
TAG4 LOGOUT
* BYE Microsoft Exchange Server IMAP4 server signing off.
TAG4 OK LOGOUT completed.
IMAPクライアントを実装するために他のコマンドが必要です.
次に受信トレイに関する情報を得ましょう.
まず最初に、私たちは、私たちがアクセスしたいメールボックスをこのケースで受信しなければなりません.
TAG5 SELECT "INBOX"
* 14 EXISTS
* 0 RECENT
...
TAG5 OK [READ-WRITE] SELECT completed.
今私たちの受信トレイ内のメッセージにアクセスする準備ができていますが、我々は最初にそれらを参照する方法が必要です.これを行うには2つの方法があります.メッセージ番号や一意の識別子(UID)で.
メッセージ番号はちょうど1から始まって、受信箱の中のメッセージの数まで上がっているカウンタです.メッセージを削除すると、次のすべてのメッセージが1によってデクリメントされます.この要素を1つ削除した配列として考えることができます.
UIDは他方、他のメッセージに何が起こっても値を保持します.
UID検索コマンドを使用してUIDを取得できます.ディレクトリ内のすべてのUIDを取得するには、特定のUIDまたはすべてのパラメータを取得したい場合、このコマンドはメッセージ番号を受け取ります.
以下の例では、メッセージ番号1のUIDを検索します.
TAG6 UID SEARCH 1
* SEARCH 483
TAG6 OK SEARCH completed.
ではヘッダ、本文、および添付ファイルのようなメッセージ情報を取得しましょう.これにはFETCHコマンドを使います.このコマンドにはたくさんのパラメータがありますRFC 3501 . この記事では、IMAPクライアント実装の必要性に関連するパラメータのみを扱います.
このデモに必要な最初の情報はメッセージサイズです.この情報はRFC 822を使って入手できます.サイズパラメータ:
TAG7 FETCH 1 RFC822.SIZE
* 1 FETCH (RFC822.SIZE 70988)
TAG7 OK FETCH completed.
これは、メッセージ番号1のサイズが70988バイトであることを示している.
メッセージ情報を取得するのにメッセージ番号ではなくUIDを使うことも可能です.
TAG8 UID FETCH 483 RFC822.SIZE
* 1 FETCH (RFC822.SIZE 70988 UID 483)
TAG8 OK FETCH completed.
基本的な、日付、および件名のメッセージヘッダーを取得することもできます.
TAG9 FETCH 1 (FLAGS BODY[HEADER.FIELDS (FROM TO DATE SUBJECT)])
* 1 FETCH (FLAGS (\Seen) BODY[HEADER.FIELDS (FROM TO DATE SUBJECT)] {157}
Date: Thu, 22 Apr 2021 15:49:05 +0000
From: Another User <[email protected]>
To: [email protected]
Subject: Greetings from Another User!
 FLAGS (\Seen))
TAG9 OK FETCH completed.
では、メッセージ本文を取得しましょう.このコマンドを使用して、すべてのボディコンテンツを取得できます.
TAG10 FETCH 1 BODY[]
* 1 FETCH (BODY[] {9599}
...
MIME-Version: 1.0
--00000000000041bd3405c3403048
Content-Type: multipart/alternative; boundary="00000000000041bd3205c3403046"
--00000000000041bd3205c3403046
Content-Type: text/plain; charset="UTF-8"
...
--00000000000041bd3405c3403048
Content-Type: image/png; name="download.png"
Content-Disposition: attachment; filename="download.png"
...
TAG10 OK FETCH completed.
このコードでは、いくつかのブロックが- EXの間の16進数で区切られていることがわかります.部品付きメッセージをマルチパートメッセージと呼ぶ.部品インデックスをコマンドに渡すことによって直接そのような部品を得ることが可能です.
メッセージを削除するために、プロトコルはコマンドストアとexpungeを持ちます.
TAG11 STORE 1 +FLAGS (\Deleted)
* 0 EXISTS
* 0 RECENT
TAG11 OK [READ-WRITE] SELECT completed; now in selected state
TAG12 EXPUNGE
EXPUNGE: TAG12 OK EXPUNGE completed
最後のコマンドは単純です.このコマンドは、keep - alive戦略を実装するために使用されます.デフォルトでは、IMAPセッションはコマンドなしで30分後に終了します.それで、NOOPコマンドを出すことは接続を活発にします.
TAG17 NOOP
TAG17 OK NOOP completed.
そして、これは我々のIMAP概要を終えます.あなたがより多くの情報が欲しいならば、ウェブ上で多くの良い記事がありますRFC 3501 .

資源

  • Atmail’s IMAP 101: Manual IMAP Sessions
  • Fastmail’s Why is IMAP better than POP?
  • IETF’s Internet Message Access Protocol
  • IETF’s Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies
  • Nylas’ Everything you need to know about IMAP
  • 次の部分では、これらのコマンドをアイリス内で使用し、それらをアクションで参照します!
    詳しくは!!)