OT: Extracting Subject Lines From IMAP Mailbox

Home » CentOS » OT: Extracting Subject Lines From IMAP Mailbox
CentOS 4 Comments

Looking for a command-line way to extract only the Subject lines from my mailbox on my ISP‘s IMAP server, without actually downloading/modifying the contents of the mailbox. Sort of the remote equivalent of locally doing:

$ grep ^Subject /var/spool/mail/mymailbox > subjectlistfile

Thanks.

4 thoughts on - OT: Extracting Subject Lines From IMAP Mailbox

  • Thanks. Don’t see this in the usual repos, but I do see the epel repo has something called “uw-imap-utils,” which seem to date to 2007. I’ll take a look at both.

  • I do this sort of thing with Python and its ‘imaplib’

    Something like this will return a list of all unseen messages in the security folder where Subject contains ‘Sec-Blocked’.

    import imaplib conn = imaplib.IMAP4(‘example.com’)
    c, d = conn.login(‘username’, ‘password’)
    c, n = conn.select(‘INBOX.security’)
    c, s = conn.uid(‘search’, None, ‘(UNSEEN HEADER SUBJECT Sec-Blocked)’)
    msgnumbers = s[0].split()
    unseenUIDs = set(msgnumbers) # using set for later manipulations for uid in sorted(unseenUIDs)
    # do something for each uid

    # done

  • telnet (or use openssl) to connect to the imap port.

    eg
    telnet localhost imap
    a1 LOGIN username password
    a2 SELECT INBOX
    a3 FETCH 1:* ENVELOPE
    a4 logout

    The “FETCH” command will give you output like:

    * 1 FETCH (ENVELOPE (“Mon, 16 Feb 2015 13:50:31 -0500” “[CentOS] OT: Extracting Subject Lines from IMAP Mailbox” ((“Tim Evans” NIL “tkevans” “tkevans.com”)) ((NIL NIL “CentOS-bounces” “CentOS.org”)) ((“CentOS mailing list” NIL “CentOS” “CentOS.org”)) ((“CentOS mailing list” NIL “CentOS” “CentOS.org”)) NIL NIL NIL “<54E23BF7.7020009@tkevans.com>“))
    * 2 FETCH (ENVELOPE (“Mon, 16 Feb 2015 19:33:43 +0000 (GMT)” “Re: [CentOS] OT: Extracting Subject Lines from IMAP Mailbox” ((“Nux!” NIL “nux” “li.nux.ro”)) ((NIL NIL “CentOS-bounces” “CentOS.org”)) ((“CentOS mailing list” NIL “CentOS” “CentOS.org”)) ((“CentOS mailing list” NIL “CentOS” “CentOS.org”)) NIL NIL “<54E23BF7.7020009@tkevans.com>” “<1705307878.67382.1424115223759.JavaMail.zimbra@li.nux.ro>“))

    From RFC 3501 we can be sure of the order of the data:

    The fields of the envelope structure are in the following
    order: date, subject, from, sender, reply-to, to, cc, bcc,
    in-reply-to, and message-id. The date, subject, in-reply-to,
    and message-id fields are strings. The from, sender, reply-to,
    to, cc, and bcc fields are parenthesized lists of address
    structures.