XJDHDR Asked: 2019-02-17 10:39:19 +0800 CST2019-02-17 10:39:19 +0800 CST 2019-02-17 10:39:19 +0800 CST 获取邮件服务器上特定目录中的电子邮件数量 772 我正在尝试找到一种连接到邮件服务器并找出特定目录中有多少电子邮件的方法。在这种特定情况下,它是我的 Gmail 帐户中的垃圾邮件目录。我不想下载此目录中的电子邮件,而只是计算或查询号码。我还需要能够从终端执行此操作。 我记得,几年前,通过使用 POP3 协议来查询特定目录并获取有关该目录的一些统计信息,包括电子邮件数量,从而阅读了一种方法。我只是试图再次找到它们,但一直无法找到。 email gmail 3 个回答 Voted jimmij 2019-02-17T12:05:27+08:002019-02-17T12:05:27+08:00 连接到 gmail 很棘手,因为 google 试图阻止人们使用除网络浏览器之外的其他邮件客户端。首先,您需要访问 google 帐户并检查允许“应用程序和设备以不太安全的方式访问您的帐户”的设置。然后,Google 会经常向您的邮箱发送垃圾邮件,要求取消选中此项。 现在,说到重点。要gmail通过 imap 访问(谷歌不鼓励 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>你的。 Best Answer XJDHDR 2019-03-02T18:47:45+08:002019-03-02T18:47:45+08:00 我设法使用 Curl 和 IMAP 协议找到了另一种更简单的方法来做我需要的事情: curl --url "imaps://imap.gmail.com" --user "<email address>":"<password>" -X 'STATUS [Gmail]/Spam (MESSAGES)' 此命令的标准输出如下(X 是存在的消息数,包括已读和未读): * STATUS "[Gmail]/Spam" (MESSAGES X) Romeo Ninov 2019-02-17T11:17:39+08:002019-02-17T11:17:39+08:00 你可以这样试试: 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}') 如果您的邮件传递软件将垃圾邮件标记为在主题中添加“SPAM”字样,您可以尝试在脚本中的最后一行,例如: NMSG=$(grep SPAM /tmp/outfile|wc -l)
连接到 gmail 很棘手,因为 google 试图阻止人们使用除网络浏览器之外的其他邮件客户端。首先,您需要访问 google 帐户并检查允许“应用程序和设备以不太安全的方式访问您的帐户”的设置。然后,Google 会经常向您的邮箱发送垃圾邮件,要求取消选中此项。
现在,说到重点。要
gmail
通过 imap 访问(谷歌不鼓励 pop 协议,我也是如此),您需要使用993
端口并将控制换行添加到openssl
选项。垃圾邮件文件夹[Gmail]/Spam
,据我了解,您希望获得其下一个唯一 ID,因此典型会话应如下所示:您实际键入的命令是以 tags 开头的
aN
。标签是 imap 协议的强制性标签,所以不要忘记它们;他们不需要aN
形式,任何字符串都可以。显然改变<user>
和<password>
你的。我设法使用 Curl 和 IMAP 协议找到了另一种更简单的方法来做我需要的事情:
此命令的标准输出如下(X 是存在的消息数,包括已读和未读):
你可以这样试试:
您将获得可变
NMSG
的消息数量。我不确定 pop 是否可以处理邮件文件夹。它只是报告邮箱中的消息。在 SSL/TLS POP3 实施的情况下,您可以使用如下代码:如果您的邮件传递软件将垃圾邮件标记为在主题中添加“SPAM”字样,您可以尝试在脚本中的最后一行,例如: