By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,824 Members | 1,252 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,824 IT Pros & Developers. It's quick & easy.

imap folder scanner

P: n/a
Kun
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.
Mar 24 '06 #1
Share this Question
Share on Google+
5 Replies


P: n/a
Kun
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.

Mar 24 '06 #2

P: n/a
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'] =f********@example.com'
mail['Subject'] = "Spam machine"
mail['To'] = to = 't*@example.com'
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 <ne*******@gmail.com> 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

Mar 24 '06 #3

P: n/a
Kun
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'] =f********@example.com'
mail['Subject'] = "Spam machine"
mail['To'] = to = 't*@example.com'
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 <ne*******@gmail.com> 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
Mar 24 '06 #4

P: n/a
On 3/24/06, Sebastjan Trepca <tr****@gmail.com> 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
Mar 24 '06 #5

P: n/a
Kun
Marco Carvalho wrote:
On 3/24/06, Sebastjan Trepca <tr****@gmail.com> 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
<an**@anon.com>\r\n\r\n'), ')', ('462 (BODY[HEADER.FIELDS (FROM)] {37}',
'From: Kun <ne*******@gmail.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.replace(' ',','),'(BODY.PEEK[HEADER.FIELDS
(FROM)])')
assert status=='OK', "Error. Message: %s"%data
print senders
Mar 25 '06 #6

This discussion thread is closed

Replies have been disabled for this discussion.