Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > imap folder scanner

Reply
Thread Tools

imap folder scanner

 
 
Kun
Guest
Posts: n/a
 
      03-24-2006
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.
 
Reply With Quote
 
 
 
 
Kun
Guest
Posts: n/a
 
      03-24-2006
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:
> 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.

 
Reply With Quote
 
 
 
 
Sebastjan Trepca
Guest
Posts: n/a
 
      03-24-2006
A very simple example...

import imaplib
m = imap.IMAP4(<myserver ip or host>)
m.login(username,password)
m.select('myfolder')
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.replace('
',','),'(BODY.PEEK[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='(E-Mail Removed)'
mail['Subject'] = "Spam machine"
mail['To'] = to = '(E-Mail Removed)'
server = smtplib.SMTP('localhost')
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 <(E-Mail Removed)> wrote:
> 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
>

 
Reply With Quote
 
Kun
Guest
Posts: n/a
 
      03-24-2006
Sebastjan Trepca wrote:
> A very simple example...
>
> import imaplib
> m = imap.IMAP4(<myserver ip or host>)
> m.login(username,password)
> m.select('myfolder')
> 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.replace('
> ',','),'(BODY.PEEK[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='(E-Mail Removed)'
> mail['Subject'] = "Spam machine"
> mail['To'] = to = '(E-Mail Removed)'
> server = smtplib.SMTP('localhost')
> 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 <(E-Mail Removed)> wrote:
>> 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
>>


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
 
Reply With Quote
 
Marco Carvalho
Guest
Posts: n/a
 
      03-24-2006
On 3/24/06, Sebastjan Trepca <(E-Mail Removed)> wrote:

> m.select('myfolder')


Some attention is required here to retrieve subfolders.
Some imap servers like Cyrus and Courier uses "INBOX.subfolder" 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
 
Reply With Quote
 
Kun
Guest
Posts: n/a
 
      03-25-2006
Marco Carvalho wrote:
> On 3/24/06, Sebastjan Trepca <(E-Mail Removed)> wrote:
>
>> m.select('myfolder')

>
> Some attention is required here to retrieve subfolders.
> Some imap servers like Cyrus and Courier uses "INBOX.subfolder" 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



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:
>>> print status, senders

OK [('460 (BODY[HEADER.FIELDS (FROM)] {46}', 'From: Friend
<(E-Mail Removed)>\r\n\r\n'), ')', ('462 (BODY[HEADER.FIELDS (FROM)] {37}',
'From: Kun <(E-Mail Removed)>\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.replace(' ',','),'(BODY.PEEK[HEADER.FIELDS
(FROM)])')
assert status=='OK', "Error. Message: %s"%data
print senders
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Support for IMAP IDLE in net/imap Abhishiv Saxena Ruby 4 07-04-2009 04:07 PM
imap and Tmail. Getting whole email with imap Adam Akhtar Ruby 1 12-15-2008 10:55 PM
net/imap - imap.search "TO" can't find email jasonnaylor Ruby 1 04-16-2008 04:05 AM
Writing IMAP->GMail proxy... Where to go for IMAP RFC help? Jon Fi Ruby 4 10-21-2006 09:00 PM
Curier-IMAP and imap.create() Henrik Ormåsen Ruby 0 08-19-2006 06:29 AM



Advertisments