我正在尝试找到一种连接到邮件服务器并找出特定目录中有多少封电子邮件的方法。在本例中,它是我的 Gmail 帐户中的垃圾邮件目录。我并不是要下载此目录中的电子邮件,而只是计算或查询数量。我还需要能够从终端执行此操作。
我记得,几年前,读过一种方法,通过使用 POP3 协议来查询特定目录并获取有关该目录的一些统计信息,包括电子邮件数量。我只是想再次找到他们,但没能找到。
答案1
连接到 Gmail 很棘手,因为谷歌试图阻止人们使用网络浏览器之外的其他邮件客户端。首先你需要访问谷歌帐户并检查允许“以不太安全的方式访问您的帐户的应用程序和设备然后,Google 会经常向您的邮箱发送垃圾邮件,要求取消选中此选项。
现在,进入正题。要通过 imap 访问gmail
(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 [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
您实际输入的命令是以 Tags 开头的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)