Welcome, guest | Sign In | My Account | Store | Cart

Can both send and receive mail, as well as do other things.

Python, 102 lines
  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.

Created by Garrett on Tue, 10 Jul 2012 (MIT)
Python recipes (4591)
Garrett's recipes (7)

Required Modules

  • (none specified)

Other Information and Tasks