bulk email: parse html2text only once and autocommit on many writes
This commit is contained in:
parent
f354c667d4
commit
847d36408e
2 changed files with 18 additions and 7 deletions
|
|
@ -80,14 +80,21 @@ def send(recipients=None, sender=None, doctype='Profile', email_field='email', f
|
|||
sender = webnotes.conn.get_value('Email Settings', None, 'auto_mail_id')
|
||||
check_bulk_limit(len(recipients))
|
||||
|
||||
from webnotes.utils.email_lib.html2text import html2text
|
||||
try:
|
||||
text_content = html2text(html)
|
||||
except HTMLParser.HTMLParseError:
|
||||
text_content = "[See html attachment]"
|
||||
|
||||
|
||||
for r in recipients:
|
||||
rdata = webnotes.conn.sql("""select * from `tab%s` where %s=%s""" % (doctype,
|
||||
email_field, '%s'), r, as_dict=1)
|
||||
if not is_unsubscribed(rdata):
|
||||
# add to queue
|
||||
add(r, sender, subject, add_unsubscribe_link(r))
|
||||
add(r, sender, subject, add_unsubscribe_link(r), text_content)
|
||||
|
||||
def add(email, sender, subject, message):
|
||||
def add(email, sender, subject, message, text_content = None):
|
||||
"""add to bulk mail queue"""
|
||||
from webnotes.model.doc import Document
|
||||
from webnotes.utils.email_lib.smtp import get_email
|
||||
|
|
@ -95,7 +102,8 @@ def add(email, sender, subject, message):
|
|||
e = Document('Bulk Email')
|
||||
e.sender = sender
|
||||
e.recipient = email
|
||||
e.message = get_email(email, sender=e.sender, msg=message, subject=subject).as_string()
|
||||
e.message = get_email(email, sender=e.sender, msg=message, subject=subject,
|
||||
text_content = text_content).as_string()
|
||||
e.status = 'Not Sent'
|
||||
e.save()
|
||||
|
||||
|
|
|
|||
|
|
@ -31,12 +31,12 @@ import conf
|
|||
from webnotes import msgprint
|
||||
import email
|
||||
|
||||
def get_email(recipients, sender='', msg='', subject='[No Subject]'):
|
||||
def get_email(recipients, sender='', msg='', subject='[No Subject]', text_content = None):
|
||||
"""send an html email as multipart with attachments and all"""
|
||||
email = EMail(sender, recipients, subject)
|
||||
if (not '<br>' in msg) and (not '<p>' in msg) and (not '<div' in msg):
|
||||
msg = msg.replace('\n', '<br>')
|
||||
email.set_html(msg)
|
||||
email.set_html(msg, text_content)
|
||||
|
||||
return email
|
||||
|
||||
|
|
@ -77,7 +77,7 @@ class EMail:
|
|||
part = MIMEText(message.encode('utf-8'), 'plain', 'utf-8')
|
||||
self.msg_multipart.attach(part)
|
||||
|
||||
def set_html(self, message):
|
||||
def set_html(self, message, text_content = None):
|
||||
|
||||
"""Attach message in the html portion of multipart/alternative"""
|
||||
from email.mime.text import MIMEText
|
||||
|
|
@ -86,7 +86,10 @@ class EMail:
|
|||
# this is the first html part of a multi-part message,
|
||||
# convert to text well
|
||||
if not self.html_set:
|
||||
self.set_html_text(message)
|
||||
if text_content:
|
||||
self.set_text(text_content)
|
||||
else:
|
||||
self.set_html_text(message)
|
||||
|
||||
part = MIMEText(message.encode('utf-8'), 'html', 'utf-8')
|
||||
self.msg_multipart.attach(part)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue