def get_mailer(): with open('config.txt', 'r') as configfile: lines = [x for x in configfile] username = lines[0].rstrip().replace(' ', '') password = lines[1].rstrip().replace(' ', '') print 'connecting with ' + username + ' ' + password gmailer = GMail(username, password) gmailer.connect() return gmailer
def send_email(to_addr, subject, msg): mail = GMail(GMAIL_EMAIL, GMAIL_PASSWORD) mail.connect() if to_addr is list: to_addr = ', '.join(list(to_addr)) mail.send(Message(subject, to=to_addr, html=msg)) mail.close()
def get_handler(email_address: str, api_key: str) -> GMail: """ Returns an EmailApp handler. :param email_address: :param api_key: :return: """ gmail_handler = GMail(username=email_address, password=api_key) gmail_handler.connect() return gmail_handler
class GmailSender: def __init__(self, username: str, password: str, format: str = 'html', error_handler: Callable[[Recipient], None] = None, success_handler: Callable[[Recipient], None] = None, background: bool = True, parallel_threads: int = 1): self.username = username self.password = password self.gmail = GMail(self.username, self.password) self.error_handler = error_handler self.success_handler = success_handler self.background = background self.format = format self.is_connected = False def prepare(self) -> None: if not self.is_connected: self.gmail.connect() self.is_connected = True def _worker_thread(self, payload) -> None: self.prepare() try: self.gmail.send(payload.msg, None) except SMTPServerDisconnected: if self.error_handler: self.error_handler(payload.recipeient) except SMTPResponseException: if self.error_handler: self.error_handler(payload.recipient) except KeyboardInterrupt: return if self.success_handler: self.success_handler(payload.recipient) def _send_bulk_synchronous(self, payload_list) -> None: self.prepare() for payload in payload_list: self._worker_thread(payload) def _send_bulk_async(self, payload_list: Payload) -> None: pool = Pool() pool.map(self._worker_thread, payload_list) pool.close() def send_bulk(self, payload_list) -> None: if self.background: return self._send_bulk_async(payload_list) else: return self._send_bulk_synchronous(payload_list) def send(self, message: str, recipient: Recipient, subject: str, rcpt: str = None) -> None: if self.format == 'html': msg = Message(subject=subject, to=recipient.email, html=message) else: msg = Message(subject=subject, to=recipient.email, text=message) self.queue.put((msg, recipient, rcpt)) def close(self) -> None: self.gmail.close() self.is_connected = False def __del__(self): self.close() def __default_handler(self, recipient: Recipient, *args, **kwargs) -> None: logger.error("Error while sending maile to {}".format(recipient.email))