예제 #1
0
def config_mail():
    message = Mail()
    message.add_to("<*****@*****.**>")
    message.add_to_name("Kumar, Palani")
    message.set_from("*****@*****.**")
    message.set_from_name("Kavin");
    message.set_subject("Test message.,")
    message.set_text("Test text")
    message.set_html("<i><b>Test HTML</b></i>")
    message.set_replyto("*****@*****.**")
    message.set_date(rfc822.formatdate())
    return message
예제 #2
0
def config_mail():
    message = Mail()
    message.add_to("<*****@*****.**>")
    message.add_to_name("Kumar, Palani")
    message.set_from("*****@*****.**")
    message.set_from_name("Kavin")
    message.set_subject("Test message.,")
    message.set_text("Test text")
    message.set_html("<i><b>Test HTML</b></i>")
    message.set_replyto("*****@*****.**")
    message.set_date(rfc822.formatdate())
    return message
예제 #3
0
    def run(self, schedule, content, recipient_queues, sharding_count_name):
        futures = []
        for recipient in json.loads(recipient_queues.data):
            message = Mail()
            message.set_subject(schedule.subject)
            message.set_html(
                replace_edm_csv_property(content, recipient,
                                         schedule.replace_edm_csv_property))
            message.set_from('%s <%s>' %
                             (schedule.sender_name, schedule.sender_email))
            if schedule.reply_to:
                message.set_replyto(schedule.reply_to)
            message.add_to(recipient.get('email'))
            message.add_category(schedule.category)

            status, msg = self._send(message, schedule.is_dry_run,
                                     schedule.dry_run_fail_rate)
            futures.append(dict(recipient=recipient, status=status, msg=msg))

        send_success = filter(lambda f: f.get('status') == 200, futures)
        send_fail = filter(lambda f: f.get('status') != 200, futures)

        # save success send log
        if send_success:
            self.to_put.extend(
                self.success_log(schedule, send_success, self.sender))

        # save fail send log
        if send_fail:
            self.to_put.extend(
                self.fail_log(schedule, send_fail, self.sender, content))

        recipient_queues.status = 'executed'
        self.to_put.append(recipient_queues)

        if self.to_put:
            ndb.put_multi(self.to_put)
            self.to_put = []

        general_counter.increment(sharding_count_name)
예제 #4
0
    def resend(self, retries):
        futures = []
        for fail_log in ndb.get_multi([retry.failEmail for retry in retries]):
            if not fail_log:
                continue

            sendgrid = settings.SENDGRID[fail_log.sendgrid_account]

            self.set_sendgrid_client(sendgrid['USERNAME'],
                                     sendgrid['PASSWORD'])

            log_mail = LogEmail.query(LogEmail.fails_link.IN([fail_log.key
                                                              ])).get()
            if log_mail:
                logging.info('fail mail %s-%s has been retry success.' %
                             (fail_log.subject, fail_log.to))

            else:
                message = Mail()
                message.set_subject(fail_log.subject)
                message.set_html(fail_log.body)
                message.set_from('%s <%s>' %
                                 (fail_log.sender_name, fail_log.sender_email))
                if fail_log.reply_to:
                    message.set_replyto(fail_log.reply_to)
                message.add_to(fail_log.to)
                message.add_category(fail_log.category)

                status, msg = self._send(message, fail_log.is_dry_run,
                                         fail_log.dry_run_fail_rate)
                futures.append(dict(fail_log=fail_log, status=status, msg=msg))

        # split log to another task to save
        send_success = filter(lambda f: f.get('status') == 200, futures)
        send_fail = filter(lambda f: f.get('status') != 200, futures)

        if send_success:

            def clear_body(send):
                send.get('fail_log').body = None
                return send

            self.to_put.extend(
                self.success_log_retry(map(clear_body, send_success)))

            # retry fail log has been send succes and need to remove
            keys = [
                r.key for r in filter(
                    lambda r: any(s == r.failEmail for s in map(
                        lambda s: s.get('fail_log').key, send_success)),
                    retries)
            ]
            if keys:
                self.to_delete.extend(keys)

        if send_fail:
            self.to_put.extend(self.fail_log_retry(send_fail))

        if self.to_put:
            ndb.put_multi(self.to_put)
            self.to_put = []

        if self.to_delete:
            ndb.delete_multi(self.to_delete)
            self.to_delete = []
예제 #5
0
    def test_send(self):
        m = Mail()
        m.add_to('John, Doe <*****@*****.**>')
        m.set_subject('test')
        m.set_html('WIN')
        m.set_text('WIN')
        m.set_from('*****@*****.**')
        m.set_asm_group_id(42)
        m.add_cc('*****@*****.**')
        m.add_bcc('*****@*****.**')
        m.add_substitution('subKey', 'subValue')
        m.add_section('testSection', 'sectionValue')
        m.add_category('testCategory')
        m.add_unique_arg('testUnique', 'uniqueValue')
        m.add_filter('testFilter', 'filter', 'filterValue')
        m.add_attachment_stream('testFile', 'fileValue')
        m.set_replyto('John, Doe <*****@*****.**>')
        url = self.sg._build_body(m)
        url.pop('api_key', None)
        url.pop('api_user', None)
        url.pop('date', None)
        test_url = json.loads('''
            {
                "to[]": ["*****@*****.**"],
                "toname[]": ["John Doe"],
                "html": "WIN",
                "text": "WIN",
                "subject": "test",
                "files[testFile]": "fileValue",
                "from": "*****@*****.**",
                "cc[]": ["*****@*****.**"],
                "bcc[]": ["*****@*****.**"]
                
            }
            ''')
        test_url['headers'] = "{\"Reply-To\": \"John, Doe <*****@*****.**>\"}"

        test_url['x-smtpapi'] = json.dumps(json.loads('''
            {
                "sub": {
                    "subKey": ["subValue"]
                },
                "section": {
                    "testSection":"sectionValue"
                },
                "category": ["testCategory"],
                "unique_args": {
                    "testUnique":"uniqueValue"
                },
                "filters": {
                    "testFilter": {
                        "settings": {
                            "filter": "filterValue"
                        }
                    }
                },
                "asm_group_id": 42
            }
            '''))
        
        self.assertEqual(url, test_url)