Mercurial > p > roundup > code
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' |
