Can both send and receive mail, as well as do other things.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | # -*- coding: utf-8 -*-
"""
Created on Mon Jul 9 20:57:29 2012
@author: garrett
@email: cloudform511@gmail.com
original pygmail from:
https://github.com/vinod85/pygmail/blob/master/pygmail.py
"""
import imaplib, smtplib
import re
from email.mime.text import MIMEText
class pygmail(object):
IMAP_SERVER='imap.gmail.com'
IMAP_PORT=993
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT=465
def __init__(self):
self.M = None
self.response = None
self.mailboxes = []
def login(self, username, password):
self.M = imaplib.IMAP4_SSL(self.IMAP_SERVER, self.IMAP_PORT)
self.S = smtplib.SMTP_SSL(self.SMTP_SERVER, self.SMTP_PORT)
rc, self.response = self.M.login(username, password)
sc, self.response_s = self.S.login(username, password)
self.username = username
return rc, sc
def send_mail(self, to_addrs, msg, subject = None):
msg = MIMEText(msg)
if subject != None:
msg['Subject'] = subject
msg['From'] = self.username
msg['To'] = to_addrs
return self.S.sendmail(self.username, to_addrs, msg.as_string())
def get_mailboxes(self):
rc, self.response = self.M.list()
for item in self.response:
self.mailboxes.append(item.split()[-1])
return rc
def get_mail_count(self, folder='Inbox'):
rc, self.response = self.M.select(folder)
return self.response[0]
def get_unread_count(self, folder='Inbox'):
rc, self.response = self.M.status(folder, "(UNSEEN)")
unreadCount = re.search("UNSEEN (\d+)", self.response[0]).group(1)
return unreadCount
def get_imap_quota(self):
quotaStr = self.M.getquotaroot("Inbox")[1][1][0]
r = re.compile('\d+').findall(quotaStr)
if r == []:
r.append(0)
r.append(0)
return float(r[1])/1024, float(r[0])/1024
def get_mails_from(self, uid, folder='Inbox'):
status, count = self.M.select(folder, readonly=1)
status, response = self.M.search(None, 'FROM', uid)
email_ids = [e_id for e_id in response[0].split()]
return email_ids
def get_mail_from_id(self, id):
status, response = self.M.fetch(id, '(body[header.fields (subject)])')
return response
def rename_mailbox(self, oldmailbox, newmailbox):
rc, self.response = self.M.rename(oldmailbox, newmailbox)
return rc
def create_mailbox(self, mailbox):
rc, self.response = self.M.create(mailbox)
return rc
def delete_mailbox(self, mailbox):
rc, self.response = self.M.delete(mailbox)
return rc
def logout(self):
self.M.logout()
self.S.quit()
if __name__ == '__main__':
user = 'vegans@gmail.com'
pwd = 'govegan4life'
gm = pygmail()
gm.login(user, pwd)
send_to = 'meat_eating_friend@gmail.com'
msg = 'Hi there, have you ever thought about the suffering of animals? Go vegan!'
gm.send_mail(send_to, msg, 'peace')
|
Found pygmail on github (https://github.com/vinod85/pygmail/blob/master/pygmail.py) and modified it to be able to send mail as well. I have not personally tested all of the old member functions, but I will update them if anyone finds any flaws and posts them here or emails me.