Esempio n. 1
0
 def init_mailthon(self):
     self.postman = Postman(
         host=self.server,
         port=self.port,
         middlewares=[
             TLS(force=True),
             Auth(username=self.username, password=self.password)
         ],
     )
Esempio n. 2
0
    def test_send_email_example(self, smtpserver):
        p = Postman(*smtpserver.addr)

        r = p.send(email(
            content='<p>Hello 世界</p>',
            subject='Hello world',
            sender='John <*****@*****.**>',
            receivers=['*****@*****.**'],
        ))

        assert r.ok
        assert len(smtpserver.outbox) == 1
Esempio n. 3
0
def send_email(config, user_email, subject, content):
    envelope = email(sender=SENDER,
                     receivers=[user_email],
                     subject=subject,
                     content=content)

    postman = Postman(host=config['host'],
                      port=int(config['port']),
                      middlewares=[TLS(force=True),
                                   Auth(username=config['username'], password=config['password'])])

    postman.send(envelope)
Esempio n. 4
0
def send_email(config, user_email, subject, content):
    envelope = email(sender=SENDER,
                     receivers=[user_email],
                     subject=subject,
                     content=content)

    postman = Postman(host=config['host'],
                      port=int(config['port']),
                      middlewares=[TLS(force=True),
                                   Auth(username=config['username'], password=config['password'])])

    postman.send(envelope)
Esempio n. 5
0
    def test_send_email_example(self, smtpserver):
        p = Postman(*smtpserver.addr)

        r = p.send(
            email(
                content='<p>Hello 世界</p>',
                subject='Hello world',
                sender='John <*****@*****.**>',
                receivers=['*****@*****.**'],
            ))

        assert r.ok
        assert len(smtpserver.outbox) == 1
def send_email(config, user_email, subject, content):
    envelope = email(sender=SENDER, receivers=[user_email], subject=subject, content=content)

    postman = Postman(
        host=config["mail.host"],
        port=int(config["mail.port"]),
        middlewares=[TLS(force=True), Auth(username=config["mail.username"], password=config["mail.password"])],
    )
    try:
        response = postman.send(envelope)
        if response.ok:
            logger.info("Successfully send email to %s" % user_email)
        else:
            logger.error("Failed to send email to %s" % user_email)
    except Exception, e:
        logger.error("Exception occured when send email to %s" % e)
Esempio n. 7
0
 def init_mailthon(self):
     self.postman = Postman(
         host=self.server,
         port=self.port,
         middlewares=[
             TLS(force=True),
             Auth(username=self.username, password=self.password)
         ],
     )
Esempio n. 8
0
 def __init__(self):
     """check email-service parameters from config.py"""
     if self.host == "":
         self.error_message = "Email Error: host is empty"
     elif self.username == "":
         self.error_message = "Email Error: username is empty"
     elif self.password == "":
         self.error_message = "Email Error: password is empty"
     else:
         self.available = True
         # initial postman
         self.postman = Postman(host=self.host,
                                port=self.port,
                                middlewares=[
                                    TLS(force=True),
                                    Auth(username=self.username,
                                         password=self.password)
                                ])
Esempio n. 9
0
def send_email(config, user_email, subject, content):
    envelope = email(
        sender=SENDER,
        receivers=[user_email],
        subject=subject,
        content=content
    )

    postman = Postman(host=config['mail.host'],
                      port=int(config['mail.port']),
                      middlewares=[TLS(force=True),
                                   Auth(username=config['mail.username'], password=config['mail.password'])])
    try:
        response = postman.send(envelope)
        if response.ok:
            logger.info("Successfully send email to %s" % user_email)
        else:
            logger.error("Failed to send email to %s" % user_email)
    except Exception, e:
        logger.error("Exception occured when send email to %s" % e)
Esempio n. 10
0
def email():
    postman = Postman(
        host='SOLLOES-VM02.SOLLOBRASIL.NET',
        port=587,
        middlewares=[
            TLS(force=True),
            Auth(username='******', password='******')
        ],
    )

    envelope = email(
        sender='sender <*****@*****.**>',
        receivers=['*****@*****.**'],
        subject='Manutenção/Suporte',
        content='',
    )
    response = postman.send(envelope)
    print(response.message)
    print(response.status_code)

    if response.ok:
        print("OK! :)")
Esempio n. 11
0
    def postman(self):
        def config(**kwargs):
            session.opts = kwargs
            return session

        session = Mock(spec=Session)
        session.side_effect = config
        session.send.return_value = SendmailResponse(250, 'ok', {})

        return Postman(
            session=session,
            host='host',
            port=1000,
        )
Esempio n. 12
0
    def test_send_email_attachment(self, smtpserver):
        p = Postman(*smtpserver.addr)

        r = p.send(email(
            sender='Me <*****@*****.**>',
            receivers=['*****@*****.**'],
            subject='Something',
            content='<p>hi</p>',
            attachments=['tests/assets/spacer.gif'],
            cc=['*****@*****.**', '*****@*****.**'],
            bcc=['*****@*****.**', '*****@*****.**'],
            encoding='ascii',
        ))

        assert r.ok
        assert len(smtpserver.outbox) == 1

        message = smtpserver.outbox[0]
        assert message['Content-Type'].startswith('multipart/mixed')
        assert message['Subject'] == 'Something'
        assert message['To'] == '*****@*****.**'
        assert message['CC'] == '[email protected], [email protected]'
        assert message['From'] == 'Me <*****@*****.**>'
Esempio n. 13
0
    def test_send_email_attachment(self, smtpserver):
        p = Postman(*smtpserver.addr)

        r = p.send(
            email(
                sender='Me <*****@*****.**>',
                receivers=['*****@*****.**'],
                subject='Something',
                content='<p>hi</p>',
                attachments=['tests/assets/spacer.gif'],
                cc=['*****@*****.**', '*****@*****.**'],
                bcc=['*****@*****.**', '*****@*****.**'],
                encoding='ascii',
            ))

        assert r.ok
        assert len(smtpserver.outbox) == 1

        message = smtpserver.outbox[0]
        assert message['Content-Type'].startswith('multipart/mixed')
        assert message['Subject'] == 'Something'
        assert message['To'] == '*****@*****.**'
        assert message['CC'] == '[email protected], [email protected]'
        assert message['From'] == 'Me <*****@*****.**>'
Esempio n. 14
0
 def __init__(self):
     """check email-service parameters from config.py"""
     if self.host == "":
         self.error_message = "Email Error: host is empty"
     elif self.username == "":
         self.error_message = "Email Error: username is empty"
     elif self.password == "":
         self.error_message = "Email Error: password is empty"
     else:
         self.available = True
         # initial postman
         self.postman = Postman(
             host=self.host,
             port=self.port,
             middlewares=[
                 TLS(force=True),
                 Auth(username=self.username, password=self.password)
             ]
         )
Esempio n. 15
0
def postman(host, port=587, auth=(None, None), force_tls=False, options=None):
    """
    Creates a Postman object with TLS and Auth
    middleware. TLS is placed before authentication
    because usually authentication happens and is
    accepted only after TLS is enabled.

    :param auth: Tuple of (username, password) to
        be used to ``login`` to the server.
    :param force_tls: Whether TLS should be forced.
    :param options: Dictionary of keyword arguments
        to be used when the SMTP class is called.
    """
    return Postman(host=host,
                   port=port,
                   middlewares=[
                       middleware.tls(force=force_tls),
                       middleware.auth(*auth),
                   ],
                   **options)
Esempio n. 16
0
class Email(object):
    """ Provide Emails Sending Service

    Example for config.py:
    "email": {
        "host": "smtp.gmail.com",
        "port": 587,
        "username": "******",
        "password": "******"
    }
    """
    available = False

    host = safe_get_config("email.host", "")
    port = safe_get_config("email.port", 587)
    username = safe_get_config("email.username", "")
    password = safe_get_config("email.password", "")
    postman = None
    error_message = ""

    def __init__(self):
        """check email-service parameters from config.py"""
        if self.host == "":
            self.error_message = "Email Error: host is empty"
        elif self.username == "":
            self.error_message = "Email Error: username is empty"
        elif self.password == "":
            self.error_message = "Email Error: password is empty"
        else:
            self.available = True
            # initial postman
            self.postman = Postman(host=self.host,
                                   port=self.port,
                                   middlewares=[
                                       TLS(force=True),
                                       Auth(username=self.username,
                                            password=self.password)
                                   ])

    def send_emails(self,
                    sender,
                    receivers,
                    subject,
                    content,
                    cc=[],
                    bcc=[],
                    attachments=[]):
        """Send emails
        notes: No all email-service providers support.
        if using Gmail, enable "Access for less secure apps" for the sender's account,

        Examples:
            xxx.send_emails("James [email protected]",
                            ['*****@*****.**', '*****@*****.**'],
                            'Subject: Hello',
                            '<b>Hi! Here is the content of email</b>',
                            ['*****@*****.**', '*****@*****.**'],
                            ['*****@*****.**', '*****@*****.**'],
                            ['C:/apache-maven-3.3.3-bin.zip'])

        :type sender: str|unicode
        :param sender: the nickname and email address of sender. Example:"James [email protected]"

        :type receivers: list
        :param receivers: receivers' emails address. Example:['*****@*****.**', '*****@*****.**']

        :type subject: str|unicode
        :param subject: subject of email's header. Example:'Hello'

        :type content: str|unicode
        :param content: content of the email. Example:'<b>Hi!</b>'

        :type cc: list
        :param cc: CarbonCopy. Example:['*****@*****.**', '*****@*****.**']

        :type bcc: list
        :param bcc: BlindCarbonCopy. Example:['*****@*****.**', '*****@*****.**']

        :type attachments: list
        :param attachments: Example:['C:/Users/Administrator/Downloads/apache-maven-3.3.3-bin.zip']

        :rtype boolean
        :return True if send emails successfully. False if fails to send.
        """
        if not self.available:
            log.error(self.error_message)
            return False

        e = email(sender=sender,
                  receivers=receivers,
                  cc=cc,
                  bcc=bcc,
                  subject=subject,
                  content=content)

        try:
            response = self.postman.send(e)
            if response.status_code == EMAIL_SMTP_STATUSCODE.SUCCESS:
                return True
            log.error("Send emails fail: " + response.message)
            return False
        except Exception as e:
            log.error(e)
            return False
Esempio n. 17
0
 def postman(self, smtp):
     postman = Postman(self.host, self.port)
     postman.transport = smtp
     return postman
Esempio n. 18
0
from mailthon.postman import Postman
from mailthon.middleware import TLS, Auth
from mailthon import email
while (True):
    postman = Postman(
        host='smtp-mail.outlook.com',
        port=587,
        middlewares=[
            TLS(force=True),
            Auth(username='******', password='')
        ],
    )

    envelope = email(
        sender='sender <*****@*****.**>',
        receivers=['*****@*****.**'],
        subject='Manutenção/Suporte',
        content='Hi',
    )
    response = postman.send(envelope)
    print(response.message)
    print(response.status_code)

    if response.ok:
        print("OK! :)")
Esempio n. 19
0
class Postie(object):
    def __init__(self, args):
        self.args = args
        self.template = self.args.template
        self.csv = self.args.csv
        self.sender = self.args.sender
        self.subject = self.args.subject
        self.server = self.args.server
        self.port = self.args.port
        self.username = self.args.user
        self.password = self.args.password
        self.token = self.args.token
        self.sid = self.args.sid

    def init_mailthon(self):
        self.postman = Postman(
            host=self.server,
            port=self.port,
            middlewares=[
                TLS(force=True),
                Auth(username=self.username, password=self.password)
            ],
        )

    def init_twilio(self):
        self.client = TwilioRestClient(self.sid, self.token)

    @property
    def csv_content(self):
        """
        Read the csv file and return a list of rows.
        """
        with open(self.csv, 'rb') as fp:
            reader = csv.reader(fp)
            content = [item for item in reader]
        return content

    @property
    def dict_template(self):
        """
        Return an ordered dict with all the headers from csv file.
        """
        headers = self.csv_content[0]
        template_var_list = [each.strip() for each in headers][1:]
        return OrderedDict.fromkeys(template_var_list)

    def validate_header(self, mode):
        """
        Check is the first column of csv file contains email or phone number.
        """
        headers = self.csv_content[0]
        email_header = headers[0] if headers[0].lower() == mode else None
        if email_header is None:
            print "First column needs to have %s" % mode

    def render_template(self, **kwargs):
        """
        Render message template with Jinja 2 Engine
        """
        with open(self.template, 'rb') as fp:
            template = Template(fp.read().strip())
        return template.render(**kwargs)

    def send_async_email(self, envelope):
        self.postman.send(envelope)

    def send_async_sms(self, msg, to, from_):
        try:
            self.client.messages.create(body=msg, to=to, from_=from_)
        except twilio.TwilioRestException as e:
            print e

    def construct_msg(self, arg_list):
        """
        Insert the keyword values from csv file to the template.
        """
        template_kwargs = self.dict_template
        for i, key in enumerate(template_kwargs):
            template_kwargs[key] = arg_list[i + 1].strip()
        return self.render_template(**template_kwargs)

    def send_sms(self):
        content = self.csv_content[1:]
        for row in content:
            msg = self.construct_msg(row)
            thr = Thread(target=self.send_async_sms,
                         args=[msg, row[0], self.sender])
            thr.start()
        return thr

    def send_emails(self):
        content = self.csv_content[1:]
        for row in content:
            envelope = email(sender=self.sender,
                             receivers=[row[0]],
                             subject=self.subject,
                             content=self.construct_msg(row))
            # Spawn a thread for each email delivery
            thr = Thread(target=self.send_async_email, args=[envelope])
            thr.start()
        return thr

    def run(self):
        if self.token and self.sid is not None:
            print "Sending SMS using Twilo..."
            self.init_twilio()
            self.send_sms()
            print "Done sending text messages!"
        elif self.username and self.password is not None:
            print "Sending Emails..."
            self.init_mailthon()
            self.send_emails()
            print "Done sending emails!"
        else:
            print "Run postie --help for usage information"
Esempio n. 20
0
class Postie(object):

    def __init__(self, args):
        self.args = args
        self.template = self.args.template
        self.csv = self.args.csv
        self.sender = self.args.sender
        self.subject = self.args.subject
        self.server = self.args.server
        self.port = self.args.port
        self.username = self.args.user
        self.password = self.args.password
        self.token = self.args.token
        self.sid = self.args.sid

    def init_mailthon(self):
        self.postman = Postman(
            host=self.server,
            port=self.port,
            middlewares=[
                TLS(force=True),
                Auth(username=self.username, password=self.password)
            ],
        )

    def init_twilio(self):
        self.client = TwilioRestClient(self.sid, self.token)

    @property
    def csv_content(self):
        """
        Read the csv file and return a list of rows.
        """
        with open(self.csv, 'rb') as fp:
            reader = csv.reader(fp)
            content = [item for item in reader]
        return content

    @property
    def dict_template(self):
        """
        Return an ordered dict with all the headers from csv file.
        """
        headers = self.csv_content[0]
        template_var_list = [each.strip() for each in headers][1:]
        return OrderedDict.fromkeys(template_var_list)

    def validate_header(self, mode):
        """
        Check is the first column of csv file contains email or phone number.
        """
        headers = self.csv_content[0]
        email_header = headers[0] if headers[0].lower() == mode else None
        if email_header is None:
            print "First column needs to have %s" % mode

    def render_template(self, **kwargs):
        """
        Render message template with Jinja 2 Engine
        """
        with open(self.template, 'rb') as fp:
            template = Template(fp.read().strip())
        return template.render(**kwargs)

    def send_async_email(self, envelope):
        self.postman.send(envelope)

    def send_async_sms(self, msg, to, from_):
        try:
            self.client.messages.create(body=msg,
                                        to=to,
                                        from_=from_)
        except twilio.TwilioRestException as e:
            print e

    def construct_msg(self, arg_list):
        """
        Insert the keyword values from csv file to the template.
        """
        template_kwargs = self.dict_template
        for i, key in enumerate(template_kwargs):
            template_kwargs[key] = arg_list[i + 1].strip()
        return self.render_template(**template_kwargs)

    def send_sms(self):
        content = self.csv_content[1:]
        for row in content:
            msg = self.construct_msg(row)
            thr = Thread(
                target=self.send_async_sms, args=[msg, row[0], self.sender])
            thr.start()
        return thr

    def send_emails(self):
        content = self.csv_content[1:]
        for row in content:
            envelope = email(
                sender=self.sender,
                receivers=[row[0]],
                subject=self.subject,
                content=self.construct_msg(row))
            # Spawn a thread for each email delivery
            thr = Thread(target=self.send_async_email, args=[envelope])
            thr.start()
        return thr

    def run(self):
        if self.token and self.sid is not None:
            print "Sending SMS using Twilo..."
            self.init_twilio()
            self.send_sms()
            print "Done sending text messages!"
        elif self.username and self.password is not None:
            print "Sending Emails..."
            self.init_mailthon()
            self.send_emails()
            print "Done sending emails!"
        else:
            print "Run postie --help for usage information"
Esempio n. 21
0
class Email(object):
    """ Provide Emails Sending Service

    Example for config.py:
    "email": {
        "host": "smtp.gmail.com",
        "port": 587,
        "username": "******",
        "password": "******"
    }
    """
    available = False

    host = safe_get_config("email.host", "")
    port = safe_get_config("email.port", 587)
    username = safe_get_config("email.username", "")
    password = safe_get_config("email.password", "")
    postman = None
    error_message = ""

    def __init__(self):
        """check email-service parameters from config.py"""
        if self.host == "":
            self.error_message = "Email Error: host is empty"
        elif self.username == "":
            self.error_message = "Email Error: username is empty"
        elif self.password == "":
            self.error_message = "Email Error: password is empty"
        else:
            self.available = True
            # initial postman
            self.postman = Postman(
                host=self.host,
                port=self.port,
                middlewares=[
                    TLS(force=True),
                    Auth(username=self.username, password=self.password)
                ]
            )

    def send_emails(self, sender, receivers, subject, content, cc=[], bcc=[], attachments=[]):
        """Send emails
        notes: No all email-service providers support.
        if using Gmail, enable "Access for less secure apps" for the sender's account,

        Examples:
            xxx.send_emails("James [email protected]",
                            ['*****@*****.**', '*****@*****.**'],
                            'Subject: Hello',
                            '<b>Hi! Here is the content of email</b>',
                            ['*****@*****.**', '*****@*****.**'],
                            ['*****@*****.**', '*****@*****.**'],
                            ['C:/apache-maven-3.3.3-bin.zip'])

        :type sender: str|unicode
        :param sender: the nickname and email address of sender. Example:"James [email protected]"

        :type receivers: list
        :param receivers: receivers' emails address. Example:['*****@*****.**', '*****@*****.**']

        :type subject: str|unicode
        :param subject: subject of email's header. Example:'Hello'

        :type content: str|unicode
        :param content: content of the email. Example:'<b>Hi!</b>'

        :type cc: list
        :param cc: CarbonCopy. Example:['*****@*****.**', '*****@*****.**']

        :type bcc: list
        :param bcc: BlindCarbonCopy. Example:['*****@*****.**', '*****@*****.**']

        :type attachments: list
        :param attachments: Example:['C:/Users/Administrator/Downloads/apache-maven-3.3.3-bin.zip']

        :rtype boolean
        :return True if send emails successfully. False if fails to send.
        """
        if not self.available:
            log.error(self.error_message)
            return False

        e = email(sender=sender,
                  receivers=receivers,
                  cc=cc,
                  bcc=bcc,
                  subject=subject,
                  content=content)

        try:
            response = self.postman.send(e)
            if response.status_code == EMAIL_SMTP_STATUSCODE.SUCCESS:
                return True
            log.error("Send emails fail: " + response.message)
            return False
        except Exception as e:
            log.error(e)
            return False
Esempio n. 22
0
 def postman(self, smtp):
     p = Postman(self.host, self.port)
     p.transport = smtp
     return p
Esempio n. 23
0
 def test_debuglevel_was_used(self, smtp):
     p = Postman(self.host, self.port, options=dict(debug_level=1))
     p.transport = smtp
     with p.connection() as conn:
         pass
     smtp.set_debuglevel.called_once_with(1)