X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/2058efeef13c648867d0810a98da1f7aea8f64ba..e5cc68e7511d5c57b88a7acab4119f3cef55b1ce:/forum/utils/mail.py diff --git a/forum/utils/mail.py b/forum/utils/mail.py index 5f93b05..b6081ae 100644 --- a/forum/utils/mail.py +++ b/forum/utils/mail.py @@ -24,16 +24,16 @@ from forum.context import application_settings from forum.utils.html2text import HTML2Text from threading import Thread -def send_template_email(recipients, template, context): +def send_template_email(recipients, template, context, sender=None, reply_to = None): t = loader.get_template(template) - context.update(dict(recipients=recipients, settings=settings)) + context.update(dict(recipients=recipients, settings=settings, sender=sender, reply_to=reply_to)) t.render(Context(context)) def create_connection(): connection = SMTP(str(settings.EMAIL_HOST), str(settings.EMAIL_PORT), local_hostname=DNS_NAME.get_fqdn()) - if (bool(settings.EMAIL_USE_TLS)): + if bool(settings.EMAIL_USE_TLS): connection.ehlo() connection.starttls() connection.ehlo() @@ -44,13 +44,24 @@ def create_connection(): return connection -def create_and_send_mail_messages(messages): +def create_and_send_mail_messages(messages, sender_data=None, reply_to=None): if not settings.EMAIL_HOST: return sender = Header(unicode(settings.APP_SHORT_NAME), 'utf-8') - sender.append('<%s>' % unicode(settings.DEFAULT_FROM_EMAIL)) - sender = u'%s <%s>' % (unicode(settings.APP_SHORT_NAME), unicode(settings.DEFAULT_FROM_EMAIL)) + + if sender_data == None: + sender.append('<%s>' % unicode(settings.DEFAULT_FROM_EMAIL)) + sender = u'%s <%s>' % (unicode(settings.APP_SHORT_NAME), unicode(settings.DEFAULT_FROM_EMAIL)) + else: + sender.append('<%s>' % unicode(sender_data['email'])) + sender = u'%s <%s>' % (unicode(sender_data['name']), unicode(sender_data['email'])) + + + if reply_to == None: + reply_to = unicode(settings.DEFAULT_REPLY_TO_EMAIL) + else: + reply_to = unicode(reply_to) try: connection = None @@ -59,18 +70,20 @@ def create_and_send_mail_messages(messages): sender = str(settings.DEFAULT_FROM_EMAIL) for recipient, subject, html, text, media in messages: - if connection is None: - connection = create_connection() + if connection is None: + connection = create_connection() msgRoot = MIMEMultipart('related') msgRoot['Subject'] = Header(subject, 'utf-8') msgRoot['From'] = sender - to = Header(recipient.username, 'utf-8') - to.append('<%s>' % recipient.email) + to = Header(u"%s <%s>" % (recipient.username, recipient.email), 'utf-8') msgRoot['To'] = to + if reply_to: + msgRoot['Reply-To'] = reply_to + msgRoot.preamble = 'This is a multi-part message from %s.' % unicode(settings.APP_SHORT_NAME).encode('utf8') msgAlternative = MIMEMultipart('alternative') @@ -88,18 +101,21 @@ def create_and_send_mail_messages(messages): try: connection.sendmail(sender, [recipient.email], msgRoot.as_string()) - except SMTPRecipientsRefused, e: - logging.error("Email address not accepted. Exception: %s" % e) + except SMTPRecipientsRefused, e: + logging.error("Email address not accepted. Exception: %s" % e) except Exception, e: logging.error("Couldn't send mail using the sendmail method: %s" % e) - try: - connection.quit() - connection = None - except Exception: - connection = None + try: + connection.quit() + except Exception, e: + logging.error(e) + finally: + connection = None try: connection.quit() + except AttributeError: + pass except socket.sslerror: connection.close() except Exception, e: