summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortkikuchi2007-03-24 06:01:35 +0000
committertkikuchi2007-03-24 06:01:35 +0000
commita8b5ce78a7c5ec7c4e9dabfef37f83c153b53d36 (patch)
tree81805fe2fffca0ae3758662dfee1e336269e7cab
parent8b83e896dfdbf349190fc9e70a258221907b7a84 (diff)
downloadmailman-a8b5ce78a7c5ec7c4e9dabfef37f83c153b53d36.tar.gz
mailman-a8b5ce78a7c5ec7c4e9dabfef37f83c153b53d36.tar.zst
mailman-a8b5ce78a7c5ec7c4e9dabfef37f83c153b53d36.zip
-rw-r--r--Mailman/Handlers/CookHeaders.py23
-rw-r--r--Mailman/testing/test_handlers.py84
2 files changed, 77 insertions, 30 deletions
diff --git a/Mailman/Handlers/CookHeaders.py b/Mailman/Handlers/CookHeaders.py
index 11f08acc8..7b5579fad 100644
--- a/Mailman/Handlers/CookHeaders.py
+++ b/Mailman/Handlers/CookHeaders.py
@@ -281,27 +281,10 @@ def prefix_subject(mlist, msg, msgdata):
prefix = prefix % mlist.post_id
except TypeError:
pass
- # If charset is 'us-ascii', try to concatnate as string because there
- # is some weirdness in Header module (TK)
- if cset == 'us-ascii':
- try:
- if old_style:
- h = u' '.join([recolon, prefix, subject])
- else:
- h = u' '.join([prefix, recolon, subject])
- h = h.encode('us-ascii')
- h = uheader(mlist, h, 'Subject', continuation_ws=ws)
- del msg['subject']
- msg['Subject'] = h
- ss = u' '.join([recolon, subject])
- ss = ss.encode('us-ascii')
- ss = uheader(mlist, ss, 'Subject', continuation_ws=ws)
- msgdata['stripped_subject'] = ss
- return
- except UnicodeError:
- pass
# Get the header as a Header instance, with proper unicode conversion
- if old_style:
+ if not recolon:
+ h = uheader(mlist, prefix, 'Subject', continuation_ws=ws)
+ elif old_style:
h = uheader(mlist, recolon, 'Subject', continuation_ws=ws)
h.append(prefix)
else:
diff --git a/Mailman/testing/test_handlers.py b/Mailman/testing/test_handlers.py
index 931a7ca44..59fd4de08 100644
--- a/Mailman/testing/test_handlers.py
+++ b/Mailman/testing/test_handlers.py
@@ -580,6 +580,70 @@ Subject: Re: [XTEST] About Mailman...
CookHeaders.process(self._mlist, msg, {})
self.assertEqual(msg['subject'], 'Re: [XTEST] About Mailman...')
+ def test_subject_munging_i18n(self):
+ self._mlist.subject_prefix = '[XTEST]'
+ msg = Message.Message()
+ msg['Subject'] = '=?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?='
+ CookHeaders.process(self._mlist, msg, {})
+ self.assertEqual(unicode(msg['subject']),
+ u'[XTEST] \u30e1\u30fc\u30eb\u30de\u30f3')
+ self.assertEqual(msg['subject'],
+ '[XTEST] =?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?=')
+ self._mlist.subject_prefix = '[XTEST %d]'
+ self._mlist.post_id = 456
+ msg = Message.Message()
+ msg['Subject'] = '=?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?='
+ CookHeaders.process(self._mlist, msg, {})
+ self.assertEqual(unicode(msg['subject']),
+ u'[XTEST 456] \u30e1\u30fc\u30eb\u30de\u30f3')
+ self.assertEqual(msg['subject'],
+ '[XTEST 456] =?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?=')
+ msg = Message.Message()
+ msg['Subject'
+ ] = 'Re: [XTEST 123] =?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?='
+ CookHeaders.process(self._mlist, msg, {})
+ # next code suceeds if python email patch tracker #1681333 is applied.
+ #self.assertEqual(unicode(msg['subject']),
+ # u'[XTEST 456] Re: \u30e1\u30fc\u30eb\u30de\u30f3')
+ self.assertEqual(msg['subject'],
+ '[XTEST 456] Re: =?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?=')
+
+ def test_subject_munging_prefix_number(self):
+ self._mlist.subject_prefix = '[XTEST %d]'
+ self._mlist.post_id = 456
+ msg = Message.Message()
+ msg['Subject'] = 'About Mailman...'
+ CookHeaders.process(self._mlist, msg, {})
+ self.assertEqual(msg['subject'], '[XTEST 456] About Mailman...')
+ msg = Message.Message()
+ msg['Subject'] = 'Re: [XTEST 123] About Mailman...'
+ CookHeaders.process(self._mlist, msg, {})
+ self.assertEqual(msg['subject'], '[XTEST 456] Re: About Mailman...')
+
+ def test_subject_munging_prefix_newstyle(self):
+ self._mlist.subject_prefix = '[XTEST]'
+ config.OLD_STYLE_PREFIXING = False
+ msg = Message.Message()
+ msg['Subject'] = 'Re: [XTEST] About Mailman...'
+ CookHeaders.process(self._mlist, msg, {})
+ self.assertEqual(msg['subject'], '[XTEST] Re: About Mailman...')
+
+ def test_subject_munging_prefix_crooked(self):
+ # In this test case, we get an extra space between the prefix and
+ # the original subject. It's because the original is crooked.
+ # Note that isubject starting by '\n ' is generated by some version of
+ # Eudora Japanese edition.
+ self._mlist.subject_prefix = '[XTEST]'
+ msg = Message.Message()
+ msg['Subject'] = '\n About Mailman...'
+ CookHeaders.process(self._mlist, msg, {})
+ self.assertEqual(str(msg['subject']), '[XTEST] About Mailman...')
+ del msg['subject']
+ msg['Subject'] = '\n =?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?='
+ CookHeaders.process(self._mlist, msg, {})
+ self.assertEqual(str(msg['subject']),
+ '[XTEST] =?iso-2022-jp?b?IBskQiVhITwlayVeJXMbKEI=?=')
+
def test_reply_to_list(self):
eq = self.assertEqual
mlist = self._mlist
@@ -1609,7 +1673,7 @@ Here is message %(i)d
def test_send_i18n_digest(self):
eq = self.assertEqual
mlist = self._mlist
- mlist.preferred_language = 'fr'
+ mlist.preferred_language = 'fr'
msg = email.message_from_string("""\
From: aperson@example.org
To: _xtest@example.com
@@ -1622,23 +1686,23 @@ Content-Transfer-Encoding: 7bit
""")
mlist.digest_size_threshhold = 0
ToDigest.process(mlist, msg, {})
- files = self._sb.files()
+ files = self._sb.files()
eq(len(files), 2)
for filebase in files:
- qmsg, qdata = self._sb.dequeue(filebase)
+ qmsg, qdata = self._sb.dequeue(filebase)
if qmsg.get_content_maintype() == 'multipart':
mimemsg = qmsg
mimedata = qdata
else:
rfc1153msg = qmsg
rfc1153data = qdata
- eq(rfc1153msg.get_content_type(), 'text/plain')
- eq(rfc1153msg.get_content_charset(), 'utf-8')
- eq(rfc1153msg['content-transfer-encoding'], 'base64')
- toc = mimemsg.get_payload()[1]
- eq(toc.get_content_type(), 'text/plain')
- eq(toc.get_content_charset(), 'utf-8')
- eq(toc['content-transfer-encoding'], 'base64')
+ eq(rfc1153msg.get_content_type(), 'text/plain')
+ eq(rfc1153msg.get_content_charset(), 'utf-8')
+ eq(rfc1153msg['content-transfer-encoding'], 'base64')
+ toc = mimemsg.get_payload()[1]
+ eq(toc.get_content_type(), 'text/plain')
+ eq(toc.get_content_charset(), 'utf-8')
+ eq(toc['content-transfer-encoding'], 'base64')