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
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
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)
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 = []
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)