メールサーバーの特定のディレクトリにある電子メールの数を取得します。

メールサーバーの特定のディレクトリにある電子メールの数を取得します。

メールサーバーに接続して、特定のディレクトリにどのくらいの電子メールがあるかを調べる方法を見つけたいと思います。この場合、私のGmailアカウントのスパムディレクトリです。私はこのディレクトリにある電子メールをダウンロードしたいのではなく、数字を数えたり照会するだけです。また、端末でこれを行うことができる必要があります。

数年前に、POP3プロトコルを使用して特定のディレクトリを照会し、電子メールの数など、そのディレクトリの統計を取得する方法について読んだことがあります。私はそれらをもう一度探したかったのですが、見つかりませんでした。

答え1

Googleは、人々がWebブラウザの外で他のメールクライアントを使用するのを防ぐためにGmailに接続するのは面倒です。まずあなたが必要ですGoogleアカウントにアクセスそして許可を確認してください」安全性の低い方法でアカウントにアクセスするアプリや端末これにより、Googleは受信トレイにこのオプションの選択を解除するようにスパムメッセージを頻繁に送信します。

それでは、事業を始めましょう。 imapを介してアクセスするにはgmail(Googleはポッププロトコルをお勧めしません。私もそうです)、993ポートを使用してオプションに制御改行を追加する必要がありますopenssl。私が理解したように、スパムフォルダは次の[Gmail]/Spam一意のIDを取得しようとしているので、一般的なセッションは次のとおりです。

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

CONNECTED(00000003)
depth=2 OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
verify return:1
depth=1 C = US, O = Google Trust Services, CN = Google Internet Authority G3
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = imap.gmail.com
verify return:1
---

[...]

---
* OK Gimap ready for requests from 10.0.0.1 n9mb133f65154lxl

a1 LOGIN <user> <password>
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- SPECIAL-USE APPENDLIMIT=35651584
a1 OK [email protected] authenticated (Success)

a2 STATUS "[Gmail]/Spam" (UIDNEXT)
* STATUS "[Gmail]/Spam" (UIDNEXT 2127)
a2 OK Success

a3 LOGOUT
* BYE LOGOUT Requested
a3 OK 73 good day (Success)
read:errno=0

実際に入力するコマンドはタグで始まりますaN。タグはimapプロトコルに必要なので、aNフォーマットは不要であり、任意の文字列が可能であることを忘れないでください。明らかに変更はあなた<user>と同じです<password>

答え2

CurlとIMAPプロトコルを使用して必要なタスクを実行する別のより簡単な方法を見つけました。

curl --url "imaps://imap.gmail.com" --user "<email address>":"<password>" -X 'STATUS [Gmail]/Spam (MESSAGES)'

このコマンドの標準出力は次のとおりです(Xは、未読メッセージと未読メッセージを含む存在するメッセージの数)。

* STATUS "[Gmail]/Spam" (MESSAGES X)

答え3

次のように試すことができます。

telnet mailhost 110 >/tmp/outfile <<EOF
USER username
PASS password
LIST
QUIT
EOF
NMSG=$(tail -3 /tmp/outfile|awk '{print $1;exit}')

NMSGメッセージ数の変数が取得されます。 popがメールフォルダを処理できるかどうかはわかりません。メールボックス内のメッセージのみを報告します。 SSL/TLS POP3 実装の場合は、次のコードを使用できます。

openssl s_client -connect mailhost:995 >/tmp/outfile <<EOF
USER username
PASS password
LIST
QUIT
EOF
NMSG=$(tail -3 /tmp/outfile|awk '{print $1;exit}')

メール配信ソフトウェアでスパムを表示し、件名に「スパム」という単語を追加する場合は、スクリプトの最後の行で次のことを試すことができます。

NMSG=$(grep SPAM /tmp/outfile|wc -l)

関連情報