comparison roundup/mailer.py @ 5473:3afda04c96a1

mailer string encoding fixes
author Christof Meerwald <cmeerw@cmeerw.org>
date Sun, 29 Jul 2018 01:31:48 +0100
parents bc2e682e0305
children 725266c03eab
comparison
equal deleted inserted replaced
5472:e903835f0822 5473:3afda04c96a1
13 from email.mime.base import MIMEBase 13 from email.mime.base import MIMEBase
14 from email.mime.text import MIMEText 14 from email.mime.text import MIMEText
15 from email.mime.multipart import MIMEMultipart 15 from email.mime.multipart import MIMEMultipart
16 16
17 from roundup.anypy import email_ 17 from roundup.anypy import email_
18 from roundup.anypy.strings import b2s, s2u 18 from roundup.anypy.strings import b2s, s2b, s2u
19 19
20 try: 20 try:
21 import pyme, pyme.core 21 import pyme, pyme.core
22 except ImportError: 22 except ImportError:
23 pyme = None 23 pyme = None
25 25
26 class MessageSendError(RuntimeError): 26 class MessageSendError(RuntimeError):
27 pass 27 pass
28 28
29 def encode_quopri(msg): 29 def encode_quopri(msg):
30 orig = msg.get_payload() 30 orig = s2b(msg.get_payload())
31 encdata = quopri.encodestring(orig) 31 encdata = quopri.encodestring(orig)
32 msg.set_payload(encdata) 32 msg.set_payload(b2s(encdata))
33 del msg['Content-Transfer-Encoding'] 33 del msg['Content-Transfer-Encoding']
34 msg['Content-Transfer-Encoding'] = 'quoted-printable' 34 msg['Content-Transfer-Encoding'] = 'quoted-printable'
35 35
36 def nice_sender_header(name, address, charset): 36 def nice_sender_header(name, address, charset):
37 # construct an address header so it's as human-readable as possible 37 # construct an address header so it's as human-readable as possible
90 name = author[0] 90 name = author[0]
91 else: 91 else:
92 name = s2u(author[0]) 92 name = s2u(author[0])
93 author = nice_sender_header(name, author[1], charset) 93 author = nice_sender_header(name, author[1], charset)
94 try: 94 try:
95 message['Subject'] = subject.encode('ascii') 95 subject.encode('ascii')
96 message['Subject'] = subject
96 except UnicodeError: 97 except UnicodeError:
97 message['Subject'] = Header(subject, charset) 98 message['Subject'] = Header(subject, charset)
98 message['To'] = ', '.join(to) 99 message['To'] = ', '.join(to)
99 message['From'] = author 100 message['From'] = author
100 message['Date'] = formatdate(localtime=True) 101 message['Date'] = formatdate(localtime=True)
102 # add a Precedence header so autoresponders ignore us 103 # add a Precedence header so autoresponders ignore us
103 message['Precedence'] = 'bulk' 104 message['Precedence'] = 'bulk'
104 105
105 # Add a unique Roundup header to help filtering 106 # Add a unique Roundup header to help filtering
106 try: 107 try:
107 message['X-Roundup-Name'] = tracker_name.encode('ascii') 108 tracker_name.encode('ascii')
109 message['X-Roundup-Name'] = tracker_name
108 except UnicodeError: 110 except UnicodeError:
109 message['X-Roundup-Name'] = Header(tracker_name, charset) 111 message['X-Roundup-Name'] = Header(tracker_name, charset)
110 112
111 # and another one to avoid loops 113 # and another one to avoid loops
112 message['X-Roundup-Loop'] = 'hello' 114 message['X-Roundup-Loop'] = 'hello'

Roundup Issue Tracker: http://roundup-tracker.org/