Email

獲取郵件伺服器上特定目錄中的電子郵件數量

  • March 2, 2019

我正在嘗試找到一種連接到郵件伺服器並找出特定目錄中有多少電子郵件的方法。在這種特定情況下,它是我的 Gmail 帳戶中的垃圾郵件目錄。我不想下載此目錄中的電子郵件,而只是計算或查詢號碼。我還需要能夠從終端執行此操作。

我記得,幾年前,通過使用 POP3 協議來查詢特定目錄並獲取有關它的一些統計資訊,包括電子郵件數量,來閱讀一種方法來做到這一點。我只是試圖再次找到它們,但一直無法找到。

我設法使用 Curl 和 IMAP 協議找到了另一種更簡單的方法來做我需要的事情:

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

此命令的標準輸出如下(X 是存在的消息數,包括已讀和未讀):

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

連接到 gmail 很棘手,因為 google 試圖阻止人們使用除網路瀏覽器之外的其他郵件客戶端。首先,您需要訪問 google 帳戶並檢查允許“應用程序和設備以不太安全的方式訪問您的帳戶”的設置。然後,Google 會經常向您的郵箱發送垃圾郵件,要求取消選中此項。

現在,說到重點。要gmail通過 imap 訪問(Google不鼓勵 pop 協議,我也是如此),您需要使用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 user@gmail.com 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

您實際鍵入的命令是以 tags 開頭的aN。標籤是 imap 協議的強制性標籤,所以不要忘記它們;他們不需要aN形式,任何字元串都可以。顯然改變<user><password>你的。

引用自:https://unix.stackexchange.com/questions/501077