]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/utils/mail.py
OSQA-266
[osqa.git] / forum / utils / mail.py
index 7e4beab01bbe814314155ae308c1a2e239b3bbe5..0d281c234c626c5ce4fc9c0cef757a38965a2b6b 100644 (file)
@@ -2,13 +2,19 @@ import email
 import socket
 import os
 
-from email.mime.multipart import MIMEMultipart
-from email.mime.text import MIMEText
-from email.mime.image import MIMEImage
+try:
+    from email.mime.multipart import MIMEMultipart
+    from email.mime.text import MIMEText
+    from email.mime.image import MIMEImage
+    from email.header import Header
+except:
+    from email.MIMEMultipart import MIMEMultipart
+    from email.MIMEText import MIMEText
+    from email.MIMEImage import MIMEImage
+    from email.Header import Header
 
 from django.core.mail import DNS_NAME
 from smtplib import SMTP
-import email.Charset
 from forum import settings
 from django.template import loader, Context, Template
 from forum.utils.html import sanitize_html
@@ -19,7 +25,7 @@ from threading import Thread
 def send_msg_list(msgs, sender=None):
     if len(msgs):
         connection = SMTP(str(settings.EMAIL_HOST), str(settings.EMAIL_PORT),
-                local_hostname=DNS_NAME.get_fqdn())
+                          local_hostname=DNS_NAME.get_fqdn())
 
         try:
             if (bool(settings.EMAIL_USE_TLS)):
@@ -126,7 +132,7 @@ def send_email(subject, recipients, template, context={}, sender=None, images=[]
         msgs.append((email, msg))
 
     if threaded:
-        thread = Thread(target=send_msg_list,  args=[msgs])
+        thread = Thread(target=send_msg_list, args=[msgs])
         thread.setDaemon(True)
         thread.start()
     else:
@@ -139,12 +145,17 @@ def send_template_email(recipients, template, context):
     t.render(Context(context))
 
 def create_and_send_mail_messages(messages):
-    sender = '%s <%s>' % (unicode(settings.APP_SHORT_NAME), unicode(settings.DEFAULT_FROM_EMAIL))
+    if not settings.EMAIL_HOST:
+        return
 
-    connection = SMTP(str(settings.EMAIL_HOST), str(settings.EMAIL_PORT),
-                local_hostname=DNS_NAME.get_fqdn())
+    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))
 
     try:
+        connection = SMTP(str(settings.EMAIL_HOST), str(settings.EMAIL_PORT),
+                          local_hostname=DNS_NAME.get_fqdn())
+
         if (bool(settings.EMAIL_USE_TLS)):
             connection.ehlo()
             connection.starttls()
@@ -158,17 +169,21 @@ def create_and_send_mail_messages(messages):
 
         for recipient, subject, html, text, media in messages:
             msgRoot = MIMEMultipart('related')
-            msgRoot.set_charset('utf-8')
-            msgRoot['Subject'] = subject
+
+            msgRoot['Subject'] = Header(subject, 'utf-8')
             msgRoot['From'] = sender
-            msgRoot['To'] =  '%s <%s>' % (recipient.username, recipient.email)
+
+            to = Header(recipient.username, 'utf-8')
+            to.append('<%s>' % recipient.email)
+            msgRoot['To'] = to
+
             msgRoot.preamble = 'This is a multi-part message from %s.' % unicode(settings.APP_SHORT_NAME).encode('utf8')
 
             msgAlternative = MIMEMultipart('alternative')
             msgRoot.attach(msgAlternative)
 
-            msgAlternative.attach(MIMEText(text))
-            msgAlternative.attach(MIMEText(html, 'html'))
+            msgAlternative.attach(MIMEText(text.encode('utf-8'), _charset='utf-8'))
+            msgAlternative.attach(MIMEText(html.encode('utf-8'), 'html', _charset='utf-8'))
 
             for alias, location in media.items():
                 fp = open(location, 'rb')
@@ -186,5 +201,5 @@ def create_and_send_mail_messages(messages):
             connection.quit()
         except socket.sslerror:
             connection.close()
-    except:
+    except Exception, e:
         pass