示例#1
0
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
示例#2
0
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()
示例#3
0
    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
示例#4
0
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))