Telnet経由のIMAPおよびPOP Gmailまたはメールの読み取りは簡単です

Gmailからのメールを処理する簡単なメーラーを書く必要があったので、この記事を書くことにしました。 誰かが生きやすくなることを願っています-一般的にはCaptain Obviousnessからのガイドのように見えますが:)Googleで10分間クライアントを書くために必要なすべての情報を見つけました-しかし、このような簡単なマニュアルは将来のための良いチートシートだと思います: )

複雑なことは何もありません-真実です! 実際、メーラーを書くのは、梨を砲撃するのと同じくらい簡単です。 コンソールからメールを読むのと同じくらい簡単。

さらに-ライブサンプルに関する2つの小さな記事-電子メールクライアントなしでPOP3とIMAPを使用する方法。


POP3を読む



Linuxが必要になります。 まあ、またはWindowsでのOpenSSLサポート-持っている場合-おそらくあなたのためではない-あなたはすでにすべてを知っています:)

次は、復号化を使用した一連のコマンドです。

openssl s_client -crlf -ign_eof -connect pop.gmail.com:995

SSLを使用して電子メールに接続します。 -crlfパラメーターにより、改行を処理する必要がなくなり、コマンドが必要に応じて認識されるようになります。
-ign_eofパラメーターは、文字Rで始まるコマンドがs_clientによって正しく受け入れられ、SSLブレークが発生しないことを保証します。

接続が成功した場合、次のように表示されます。
接続済み(00000003)
... SSLを示す文字と数字の束 ...
+ OK Gpopは79.165.189.32 3pf3718132bwz.16からのリクエストに対応


これは、最初の段階ですべてがうまくいったことを意味し、Googleメーラーに参加しました。
次に、ログインする必要があります。

gmail .comを使用しないユーザーログイン

コマンドが正常に完了すると、次の行が表示されます。

+ OK PASSを送信

パスワードの入力を求められます。 私たちがすること:

PASS your_password


パスワードが正しい場合-内部で許可されています!
+ OKようこそ。


これが受信トレイの中です。
確認しましょう-新しいメッセージを受け取りましたか?

スタット


私は次を見ました:

+ OK 15 1408449


これは、サーバー上に合計サイズ1,408,449バイトの未読メッセージが15個あることを意味します。

興味深い-未読の各手紙の重量はどれくらいですか?

一覧


メッセージのリストは次のとおりです。

+ OK 15メッセージ(1408449バイト)
1 3423
2 42610
3 3693
4 3693
5 445122
6 1933
7 3488
8 3760
9 3155
10 439325
11 9071
12 3125
13 3575
14 3997
15,438,479


見てください-これまでのところ複雑なことはありません:)

5番目のメッセージを読みましょう-その中にはたくさんのバイトがあります-おそらく面白い手紙です!

TOPコマンドは、手紙を読むために利用できます。
トップ5 0


このコマンドでは、テキストなしで5番目の文字を要求しました-ヘッダーのみを受信します。 ヘッダーには、とりわけ、この手紙が誰から来たのか、誰から、何を持っているのかが表示されます。

...
From:root <bender@skazkin.ru>
To:master@skazkin.ru
件名:Cron <root @ skazkinserver> perl /home/common/parser.pl queue
...


サーバーから、パーサーがキューの構築を完了したというレポートを受け取りました。 さて、私にこれを読むことはあまり面白くありません-異なる公式情報があります。
削除用にマークする

DELE 5


Gmailは私たちを理解しました-

+削除のマークが付いたOK


Gmailは、ログアウト後に削除のマークが付いたメッセージを削除します。

最小の手紙を読む-

トップ6 0


件名:=?KOI8-R?B?0NLJ18XU?=
From:=?KOI8-R?B?4c7Uz84g58HCz9c =?= <Gmail .com friend>
宛先:Andrew Skazkin <me gmail .com>
コンテンツタイプ:テキスト/プレーン; 文字セット= ISO-8859-1


うわー-読めない:(
これはすでにメールクライアントによって解決されています-手紙の件名はKOI8-Rでエンコードされ、BASE64で暗号化されています。

さて、メールは読み終わったので、今から出発します。

私はそう思った-私はクロンから手紙を削除しません。

RSET

このコマンドは、削除用にマークした文字の削除フラグをクリアします。

+ OK


そのような答え-成功した場合。 これで外出できます。

やめて


私たちへの答えは

+ OKお別れ。
読み取り:errno = 0


以上です。 POP3がわかりましたよね? IMAPの時が来ました。

IMAPで遊ぶ



手順はそれほど変わりません-チームだけです。

openssl s_client -crlf -ign_eof -connect imap.gmail.com:993


繰り返しになりますが、たくさんの文字と数字、そして最後の行を与えてくれました-

+OK。79.165.189.321pf4035116fxm.33からのリクエストに対応したGpop


アカウントにログインします。

。 ログインi gmail .comパスワード


成功しました!

*機能IMAP4rev1非選択リテラル+アイドル名前空間QUOTA ID XLIST小児X-GM-EXT-1 UIDPLUS COMPRESS = DEFLATE
。 OK gmail.comで認証されました(成功)


注意してください-すべてのチームの前にはピリオドとスペースがあります!

アカウント内のフォルダーのリストを取得します。

。 リスト「」「*」


フォルダのリストは私たちに落ちます:

* LIST(\ HasNoChildren) "/" "Cron"
* LIST(\ HasNoChildren) "/" "INBOX"
* LIST(\ HasNoChildren) "/" "LJ"
* LIST(\ HasNoChildren) "/" "プロキシ"
* LIST(\ HasNoChildren) "/" "WordPress"
* LIST(\ Noselect \ HasChildren) "/" "[Gmail]"
* LIST(\ HasNoChildren) "/" "[Gmail] /&BBIEQQRP-&BD8EPgRHBEIEMA-"
* LIST(\ HasNoChildren) "/" "[Gmail] /&BBoEPgRABDcEOAQ9BDA-"
* LIST(\ HasNoChildren) "/" "[Gmail] /&BB4EQgQ、BEAEMAQyBDsENQQ9BD0ESwQ1-"
* LIST(\ HasNoChildren) "/" "[Gmail] /&BB8EPgQ8BDUERwQ1BD0EPQRLBDU-"
* LIST(\ HasNoChildren) "/" "[Gmail] /&BCEEPwQwBDw-"
* LIST(\ HasNoChildren) "/" "[Gmail] /&BCcENQRABD0EPgQyBDgEOgQ4-"
。 成功しました


意味不明の文字-ロシア語で名前が付けられたフォルダ。

INBOXフォルダーにはいくつの文字がありますか?

。 ステータスIN​​BOX(メッセージ)


答えは
*ステータス「受信トレイ」(メッセージ8)
。 成功しました


わあ! 新しいメールがあります! 読んでください:

。 受信トレイを選択


選択が成功しました:
*フラグ(\ Answered \ Flagged \ Draft \ Deleted \ Seen)
* OK [パーマネントフラグ(\ Answered \ Flagged \ Draft \ Deleted \ Seen \ *)]
* OK [UIDVALIDITY 2]
* 8個あります
* 0最近
* OK [UIDNEXT 68967]
。 OK [読み取り/書き込み]受信ボックスが選択されました。 (成功)


見てみましょう-8文字のうち、まだ読んでいないのはどれですか:

。 フェッチ1:*フラグ


このコマンドは、最初の文字から始まるすべての文字のフラグを選択します。

* 1 FETCH(フラグ(\ Seen))
* 2 FETCH(フラグ(\ Seen))
* 3 FETCH(フラグ(\ Seen))
* 4 FETCH(フラグ(\ Seen))
* 5 FETCH(フラグ(\ Seen))
* 6 FETCH(フラグ())
* 7 FETCH(フラグ())
* 8 FETCH(フラグ())
。 成功しました


私たちは7番目の手紙を読みます-そのヘッダー

。 フル7を取得


* 7 FETCH(ENVELOPE( "Fri、20 Nov 2009 09:58:35 +0000" "=?KOI8-R?B?79TXxdTJ1NggzsEg08 / Pwt3FzsnFICfSwcLP1MXOy8EgzsEgMSDCwcvTJw ==?="((5 =? S1c0gzyDQz8nTy8 / X2cgg08nT1MXNwcg =?= "NIL" root "" searchengines.ru "))((" =?KOI8-R?B?5s / S1c0gzyDQz8nTy8 / X2cgg08nT1MXNwcg =?)= ")=")= ")=" = ( "=?KOI8-R?B?5s / S1c0gzyDQz8nTy8 / X2cgg08nT1MXNwcg =?=" NIL "root" "searchengines.ru"))((NIL NIL "master" "skazkin.ru")))NIL NIL NIL "<200911200935 .b8f41f512510 @ forum.searchengines.ru> ")FLAGS()INTERNALDATE" 20-Nov-2009 09:58:38 +0000 "RFC822.SIZE 4045)
。 成功しました


一般に、もちろん理解できる-しかし、私は理解したい

。 fetch 7(body [header.fields(from to subject date)])


興味深いヘッダーのみを選択します。

* 7 FETCH(BODY [HEADER.FIELDS(from from subject date)] {334}
日付:2009年11月20日金曜日09:58:35 +0000
To:master@skazkin.ru
From:=?Windows-1251?Q?= D4 = EE = F0 = F3 = EC_ = EE_ = EF = EE = E8 = F1 = EA = EE = E2 = FB = F5_ = F1 = E8 = F1 = F2 = E5 = EC = E0 = F5?=
<root@searchengines.ru>
件名:=?Windows-1251?Q?= CE = F2 = E2 = E5 = F2 = E8 = F2 = FC_ = ED = E0_ = F1 = EE = EE = E1 = F9 = E5 = ED = E8 = E5_ = 27 = F0 = E0 = E1 = EE = F2 = E5 = ED = EA = E0_ = ED = E0_1_ = E1 = E0 = EA = F1 = 27?=


手紙の本文を読む:

。 フェッチ7 rfc822.text

ここにあります:

* 7 FETCH(RFC822.TEXT {1299}
...メッセージエンコードされたwindows-1251
。 成功しました


一般に、ご覧のとおり、POP3およびIMAPのコンソール出力で管理するのは難しいことではありません。

唯一の違いは、IMAPがより洗練されており、POP3の機能が大幅に削減されていることです。これにより、INBOXフォルダー内のメールのみを読み取ることができます。

サポート情報:
良いIMAPマニュアル
IMAP RFC

Source: https://habr.com/ru/post/J75875/


All Articles