메일 서버의 특정 디렉터리에 있는 이메일 수를 가져옵니다.

메일 서버의 특정 디렉터리에 있는 이메일 수를 가져옵니다.

메일 서버에 연결하여 특정 디렉토리에 얼마나 많은 이메일이 있는지 알아보는 방법을 찾으려고 합니다. 이 경우에는 내 Gmail 계정의 스팸 디렉토리입니다. 나는 이 디렉토리에 있는 이메일을 다운로드하려는 것이 아니며 단지 숫자를 세거나 쿼리할 뿐입니다. 또한 터미널에서 이 작업을 수행할 수 있어야 합니다.

몇 년 전에 POP3 프로토콜을 사용하여 특정 디렉터리를 쿼리하고 이메일 수를 포함하여 해당 디렉터리에 대한 통계를 얻는 방법에 대해 읽은 기억이 납니다. 나는 단지 그들을 다시 찾고 싶었지만 찾을 수 없었습니다.

답변1

Google은 사람들이 웹 브라우저 외부에서 다른 메일 클라이언트를 사용하는 것을 방지하려고 하기 때문에 Gmail에 연결하는 것은 까다롭습니다. 먼저 당신이 필요합니다Google 계정에 액세스그리고 허용을 확인하세요 "덜 안전한 방식으로 계정에 액세스하는 앱 및 기기그러면 Google은 받은 편지함에 이 옵션을 선택 취소하라는 스팸 메시지를 자주 보냅니다.

이제 사업을 시작하겠습니다. imap을 통해 액세스하려면 gmail(구글은 팝 프로토콜을 권장하지 않습니다. 저도 그렇습니다) 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)

관련 정보