imap folder scanner

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Kun

    #1

    imap folder scanner

    Hey guys, I would like to have a code in python (as simple as possible)
    to scan a specific folder in my mailbox and if the subject is equal to,
    say, 'BIKES', I would like to have the code automatically send the
    SENDER an email saying something like "We have received your Email".
    Furthermore, I would also like to somehow save the sender's email into a
    list which would be compiled by another python program into an html file
    that would show a list of email addresses whose subject matched 'BIKE'

    I know i am asking for a lot but since i am new to python, can someone
    help me out with this? Whether its tips or code, i'll be very excited to
    hear your answer. Thanks.
  • Kun

    #2
    Re: UPDATE imap folder scanner

    Okay So I got the 'search' part to work, which outputs me a long list of
    message numbers. how do i use that list of message numbers to fetch the
    'from' address for each one and send them a confirmation email?

    is this some sort for loop?

    any help would be greatly appreciated.

    cheers.


    Kun wrote:[color=blue]
    > Hey guys, I would like to have a code in python (as simple as possible)
    > to scan a specific folder in my mailbox and if the subject is equal to,
    > say, 'BIKES', I would like to have the code automatically send the
    > SENDER an email saying something like "We have received your Email".
    > Furthermore, I would also like to somehow save the sender's email into a
    > list which would be compiled by another python program into an html file
    > that would show a list of email addresses whose subject matched 'BIKE'
    >
    > I know i am asking for a lot but since i am new to python, can someone
    > help me out with this? Whether its tips or code, i'll be very excited to
    > hear your answer. Thanks.[/color]

    Comment

    • Sebastjan Trepca

      #3
      Re: imap folder scanner

      A very simple example...

      import imaplib
      m = imap.IMAP4(<mys erver ip or host>)
      m.login(usernam e,password)
      m.select('myfol der')
      status, data = m.search(None,' (SUBJECT "BIKES")')
      assert status=='OK', "Error. Message: %s"%data
      data = data[0] #you get your results in a list and search returns only
      one result
      assert data,"No results"
      #cool, we have results, but IMAP's search command only returns IDs so
      we have to fetch
      #msgs now
      status,senders = m.fetch(data.re place('
      ',','),'(BODY.P EEK[HEADER.FIELDS (FROM)])')
      assert status=='OK', "Error. Message: %s"%data

      Now you just have to parse the "senders" data. There are many examples
      about sending emails with python, like this one:

      def send_notice():
      import smtplib
      msg = 'we got your mail, indeed'
      from email.MIMEText import MIMEText
      mail = MIMEText(msg, 'plain', 'utf-8')
      mail['From'] =fro='from@exam ple.com'
      mail['Subject'] = "Spam machine"
      mail['To'] = to = 'to@example.com '
      server = smtplib.SMTP('l ocalhost')
      errors = server.sendmail (fro, to, mail.as_string( ))
      server.quit()

      That other program should be very simple to make now.

      Sebastjan

      On 3/24/06, Kun <neurogasm@gmai l.com> wrote:[color=blue]
      > Hey guys, I would like to have a code in python (as simple as possible)
      > to scan a specific folder in my mailbox and if the subject is equal to,
      > say, 'BIKES', I would like to have the code automatically send the
      > SENDER an email saying something like "We have received your Email".
      > Furthermore, I would also like to somehow save the sender's email into a
      > list which would be compiled by another python program into an html file
      > that would show a list of email addresses whose subject matched 'BIKE'
      >
      > I know i am asking for a lot but since i am new to python, can someone
      > help me out with this? Whether its tips or code, i'll be very excited to
      > hear your answer. Thanks.
      > --
      > http://mail.python.org/mailman/listinfo/python-list
      >[/color]

      Comment

      • Kun

        #4
        Re: imap folder scanner

        Sebastjan Trepca wrote:[color=blue]
        > A very simple example...
        >
        > import imaplib
        > m = imap.IMAP4(<mys erver ip or host>)
        > m.login(usernam e,password)
        > m.select('myfol der')
        > status, data = m.search(None,' (SUBJECT "BIKES")')
        > assert status=='OK', "Error. Message: %s"%data
        > data = data[0] #you get your results in a list and search returns only
        > one result
        > assert data,"No results"
        > #cool, we have results, but IMAP's search command only returns IDs so
        > we have to fetch
        > #msgs now
        > status,senders = m.fetch(data.re place('
        > ',','),'(BODY.P EEK[HEADER.FIELDS (FROM)])')
        > assert status=='OK', "Error. Message: %s"%data
        >
        > Now you just have to parse the "senders" data. There are many examples
        > about sending emails with python, like this one:
        >
        > def send_notice():
        > import smtplib
        > msg = 'we got your mail, indeed'
        > from email.MIMEText import MIMEText
        > mail = MIMEText(msg, 'plain', 'utf-8')
        > mail['From'] =fro='from@exam ple.com'
        > mail['Subject'] = "Spam machine"
        > mail['To'] = to = 'to@example.com '
        > server = smtplib.SMTP('l ocalhost')
        > errors = server.sendmail (fro, to, mail.as_string( ))
        > server.quit()
        >
        > That other program should be very simple to make now.
        >
        > Sebastjan
        >
        > On 3/24/06, Kun <neurogasm@gmai l.com> wrote:[color=green]
        >> Hey guys, I would like to have a code in python (as simple as possible)
        >> to scan a specific folder in my mailbox and if the subject is equal to,
        >> say, 'BIKES', I would like to have the code automatically send the
        >> SENDER an email saying something like "We have received your Email".
        >> Furthermore, I would also like to somehow save the sender's email into a
        >> list which would be compiled by another python program into an html file
        >> that would show a list of email addresses whose subject matched 'BIKE'
        >>
        >> I know i am asking for a lot but since i am new to python, can someone
        >> help me out with this? Whether its tips or code, i'll be very excited to
        >> hear your answer. Thanks.
        >> --
        >> http://mail.python.org/mailman/listinfo/python-list
        >>[/color][/color]

        Thank you very much for your help. I am trying to use your code and
        currently it works up to the 'fetch', where I am getting the following
        error:

        error: FETCH command error: BAD ['Protocol Error: "Specified message set
        is invalid".']

        I guess I do not understand why you have data.replace('' ,',') and what
        ",',' means.

        Thanks so much.

        Kun

        Comment

        • Marco Carvalho

          #5
          Re: imap folder scanner

          On 3/24/06, Sebastjan Trepca <trepca@gmail.c om> wrote:
          [color=blue]
          > m.select('myfol der')[/color]

          Some attention is required here to retrieve subfolders.
          Some imap servers like Cyrus and Courier uses "INBOX.subfolde r" to
          access subfolders.
          --
          Marco Carvalho (macs) | marcoacarvalho( a)gmail.com
          http://arrakis.no-ip.info | http://cdd.debian-br.org
          Maceio - Alagoas - Brazil
          Debian GNU/Linux unstable (Sid)
          GNU-PG ID:08D82127 - Linux Registered User #141545
          Notícias Semanais do Debian em Português: http://www.debian.org/News/weekly
          Alertas de Segurança Debian (DSA): http://www.debian.org/security

          Comment

          • Kun

            #6
            Re: imap folder scanner

            Marco Carvalho wrote:[color=blue]
            > On 3/24/06, Sebastjan Trepca <trepca@gmail.c om> wrote:
            >[color=green]
            >> m.select('myfol der')[/color]
            >
            > Some attention is required here to retrieve subfolders.
            > Some imap servers like Cyrus and Courier uses "INBOX.subfolde r" to
            > access subfolders.
            > --
            > Marco Carvalho (macs) | marcoacarvalho( a)gmail.com
            > http://arrakis.no-ip.info | http://cdd.debian-br.org
            > Maceio - Alagoas - Brazil
            > Debian GNU/Linux unstable (Sid)
            > GNU-PG ID:08D82127 - Linux Registered User #141545
            > Notícias Semanais do Debian em Português: http://www.debian.org/News/weekly
            > Alertas de Segurança Debian (DSA): http://www.debian.org/security[/color]


            so i have used the following code and have successfully saved a list of
            senders as a string. however, the string has much more information than
            just the email address and i am wondering what is the best way to parse
            the email address out of the entire string.

            sample string:[color=blue][color=green][color=darkred]
            >>> print status, senders[/color][/color][/color]
            OK [('460 (BODY[HEADER.FIELDS (FROM)] {46}', 'From: Friend
            <anon@anon.com> \r\n\r\n'), ')', ('462 (BODY[HEADER.FIELDS (FROM)] {37}',
            'From: Kun <neurogasm@gmai l.com>\r\n\r\n' ), ')']

            how do i just get the two email addresses out of there?

            my code is:

            from imaplib import *
            import getpass
            m = IMAP4("xxxxxxxx ")
            m.login('xxxxxx ', 'xxxxxxx')
            m.select('Inbox ')
            status, data = m.search(None,' (SUBJECT "BIKES")')
            assert status=='OK', "Error. Message: %s"%data
            data = data[0] #you get your results in a list and search returns only
            one result
            assert data,"No results"
            #cool, we have results, but IMAP's search command only returns IDs so we
            have to fetch
            #msgs now
            status,senders = m.fetch(data.re place(' ',','),'(BODY.P EEK[HEADER.FIELDS
            (FROM)])')
            assert status=='OK', "Error. Message: %s"%data
            print senders

            Comment

            Working...