#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright 2011 Orphée Lafond-Lummis . No rights reserved. """Gmail notifier for twmn. 1. Fill in your email and password. 2. Enable IMAP in Gmail. 3. Enjoy. """ #TODO: handle disconnection #TODO: store password in a less sucky way (getpass maybe?) #TODO: add gmail icon to notification request import imaplib import re import socket import time import os def cred_from_muttrc(): with open(os.path.expanduser('~/.muttrc')) as fin: data = fin.read() re_user = re.search(r'set\s+imap_user\s*=\s*"(.*)"', data, re.MULTILINE) re_pass = re.search(r'set\s+imap_pass\s*=\s*"(.*)"', data, re.MULTILINE) if re_user: user = re_user.group(1) if re_pass: password = re_pass.group(1) return user, password # Options EMAIL = "lahtinen.harri@gmail.com" PASSWORD = "Alicante2014" # ... or if ~/.muttrc exists, read it. #EMAIL, PASSWORD = cred_from_muttrc() FREQUENCY = 15 * 60 # Check emails every 30 minutes TWMN_PORT = 9797 TWNM_ADDR = "127.0.0.1" def notification(sock, content): TITLE = "Gmail" message = "" + \ "{}".format(TITLE) + \ "{}".format(content) + \ "{}".format("email_icon") + \ "" sock.send(bytes(message.encode("utf-8"))) if __name__ == "__main__": # Connect to twmn s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect((TWNM_ADDR, TWMN_PORT)) # Login to Gmail and select inbox try: gmail = imaplib.IMAP4_SSL('imap.gmail.com', 993) gmail.login(EMAIL, PASSWORD) gmail.select(readonly=1) # selects inbox by default except imaplib.IMAP4.error as err: notification(s, "Couldn't connect properly.") raise SystemExit(-1) # Check emails at FREQUENCY interval while True: unreadCount = re.search(b"UNSEEN (\d+)", \ gmail.status("INBOX", "(UNSEEN)")[1][0]).group(1) unreadCount = int(unreadCount) if unreadCount > 0: content = "{} unread".format(unreadCount) + \ " email{}.".format(("s" if unreadCount > 1 else "")) notification(s, content) time.sleep(FREQUENCY)