Code

- updated email package address formatting (deprecation)
authorrichard <richard@57a73879-2fb5-44c3-a270-3262357dd7e2>
Tue, 5 Nov 2002 22:59:46 +0000 (22:59 +0000)
committerrichard <richard@57a73879-2fb5-44c3-a270-3262357dd7e2>
Tue, 5 Nov 2002 22:59:46 +0000 (22:59 +0000)
- copied email address quoting from email v2.4.3 so we're consistent with 2.2
- email summary extraction now takes the first whole sentence or line -
  whichever is longer

git-svn-id: http://svn.roundup-tracker.org/svnroot/roundup/trunk@1373 57a73879-2fb5-44c3-a270-3262357dd7e2

CHANGES.txt
TODO.txt
doc/customizing.txt
doc/index.txt
roundup/mailgw.py
roundup/roundupdb.py
roundup/scripts/roundup_server.py
test/test_mailgw.py

index 4c9d42c33cbe328f0686e1c9aadcc103f545a57c..2d29c38134c4db353c911cad39ddfbed272b3c15 100644 (file)
@@ -13,6 +13,10 @@ are given with the most recent entry first.
 - force non-word boundary to match re: in subject (sf bug 626303)
 - handle sqlite bug (<2.7.2) (sf bug 630828)
 - handle missing props in anydbm stringFind
 - force non-word boundary to match re: in subject (sf bug 626303)
 - handle sqlite bug (<2.7.2) (sf bug 630828)
 - handle missing props in anydbm stringFind
+- updated email package address formatting (deprecation)
+- copied email address quoting from email v2.4.3 so we're consistent with 2.2
+- email summary extraction now takes the first whole sentence or line -
+  whichever is longer
 
 
 2002-10-16 0.5.1
 
 
 2002-10-16 0.5.1
index dbe7c133aa9050b55eafa7fac38284c7e09cecec..e37e0a63c20afa17b6592e6b0fd77e1b9b4a490e 100644 (file)
--- a/TODO.txt
+++ b/TODO.txt
@@ -15,6 +15,7 @@ pending hyperdb   range searching of values (dates in particular).
                   comparison functions: lt, le, eq, ge, gt. eq and
                   [value, value, ...] implies "in"
 pending hyperdb   migrate "id" property to be Number type
                   comparison functions: lt, le, eq, ge, gt. eq and
                   [value, value, ...] implies "in"
 pending hyperdb   migrate "id" property to be Number type
+pending hyperdb   multilink sorting by length is dumb
 pending tracker   split instance.open() into open() and login()
 pending mailgw    allow commands (feature request #556996)
                   like "help", "dump issue123" (would send all info about
 pending tracker   split instance.open() into open() and login()
 pending mailgw    allow commands (feature request #556996)
                   like "help", "dump issue123" (would send all info about
@@ -61,10 +62,8 @@ pending web       search "refinement" - pre-fill the search page with the
 pending web       column-heading sort stuff isn't implemented
 
 active  web       UNIX init.d script for roundup-server
 pending web       column-heading sort stuff isn't implemented
 
 active  web       UNIX init.d script for roundup-server
-bug     docs      need to mention somewhere how sorting works
-                  - it's mentioned in the design doc
-                  - multilink sorting by length is dumb
 bug     web       query editing isn't fully implemented
 bug     web       no testing for parsePropsFromForm
 bug     web       query editing isn't fully implemented
 bug     web       no testing for parsePropsFromForm
+active  web       revert to showing entire message in classic issue display
 ======= ========= =============================================================
 
 ======= ========= =============================================================
 
index b75388b842de0b6019dfd032dcf741fa254b797d..60ec72115ee1308d2091910cc0c50619ef19093b 100644 (file)
@@ -2,7 +2,7 @@
 Customising Roundup
 ===================
 
 Customising Roundup
 ===================
 
-:Version: $Revision: 1.60 $
+:Version: $Revision: 1.61 $
 
 .. This document borrows from the ZopeBook section on ZPT. The original is at:
    http://www.zope.org/Documentation/Books/ZopeBook/current/ZPT.stx
 
 .. This document borrows from the ZopeBook section on ZPT. The original is at:
    http://www.zope.org/Documentation/Books/ZopeBook/current/ZPT.stx
@@ -2582,7 +2582,7 @@ able to give a summary of the total time spent on a particular issue.
 Using a UN*X passwd file as the user database
 ---------------------------------------------
 
 Using a UN*X passwd file as the user database
 ---------------------------------------------
 
-On some systems, the primary store of users is the UN*X passwd file. It holds
+On some systems the primary store of users is the UN*X passwd file. It holds
 information on users such as their username, real name, password and primary
 user group.
 
 information on users such as their username, real name, password and primary
 user group.
 
@@ -2600,9 +2600,11 @@ day, or several times an hour if more immediate access is needed. In short, it:
 
 1. parses the passwd file, finding usernames, passwords and real names,
 2. compares that list to the current roundup user list:
 
 1. parses the passwd file, finding usernames, passwords and real names,
 2. compares that list to the current roundup user list:
+
    a. entries no longer in the passwd file are *retired*
    b. entries with mismatching real names are *updated*
    c. entries only exist in the passwd file are *created*
    a. entries no longer in the passwd file are *retired*
    b. entries with mismatching real names are *updated*
    c. entries only exist in the passwd file are *created*
+
 3. send an email to administrators to let them know what's been done.
 
 The retiring and updating are simple operations, requiring only a call to
 3. send an email to administrators to let them know what's been done.
 
 The retiring and updating are simple operations, requiring only a call to
index 7973569ff7b62f89a7fad4453077cde6438c8d95..731d58e873b31ac7772f30f8a0144167eab7c64f 100644 (file)
@@ -65,6 +65,7 @@ project and those who just report bugs:
 Anthony Baxter,
 Jeff Blaine,
 Duncan Booth,
 Anthony Baxter,
 Jeff Blaine,
 Duncan Booth,
+Seb Brezel,
 Titus Brown,
 Roch'e Compaan,
 Engelbert Gruber,
 Titus Brown,
 Roch'e Compaan,
 Engelbert Gruber,
@@ -74,6 +75,7 @@ James Kew,
 Detlef Lannert,
 Gordon McMillan,
 Patrick Ohly,
 Detlef Lannert,
 Gordon McMillan,
 Patrick Ohly,
+Will Partain,
 Bernhard Reiter,
 Dougal Scott,
 Stefan Seefeld,
 Bernhard Reiter,
 Dougal Scott,
 Stefan Seefeld,
index 3aa50b9afdfec1b7ea01775de637494bb4e55c4c..8b4f95e6de567160cee5a5f0b85788fb3f455a9e 100644 (file)
@@ -73,7 +73,7 @@ are calling the create() method to create a new node). If an auditor raises
 an exception, the original message is bounced back to the sender with the
 explanatory message given in the exception. 
 
 an exception, the original message is bounced back to the sender with the
 explanatory message given in the exception. 
 
-$Id: mailgw.py,v 1.98 2002-10-21 22:03:09 richard Exp $
+$Id: mailgw.py,v 1.99 2002-11-05 22:59:46 richard Exp $
 '''
 
 import string, re, os, mimetools, cStringIO, smtplib, socket, binascii, quopri
 '''
 
 import string, re, os, mimetools, cStringIO, smtplib, socket, binascii, quopri
@@ -913,17 +913,16 @@ def parseContent(content, keep_citations, keep_body,
                     l.append(section)
                 continue
             # keep this section - it has reponse stuff in it
                     l.append(section)
                 continue
             # keep this section - it has reponse stuff in it
-            if not summary:
-                # and while we're at it, use the first non-quoted bit as
-                # our summary
-                summary = line
             lines = lines[lines.index(line):]
             section = '\n'.join(lines)
             lines = lines[lines.index(line):]
             section = '\n'.join(lines)
+            # and while we're at it, use the first non-quoted bit as
+            # our summary
+            summary = section
 
         if not summary:
             # if we don't have our summary yet use the first line of this
             # section
 
         if not summary:
             # if we don't have our summary yet use the first line of this
             # section
-            summary = lines[0]
+            summary = section
         elif signature.match(lines[0]) and 2 <= len(lines) <= 10:
             # lose any signature
             break
         elif signature.match(lines[0]) and 2 <= len(lines) <= 10:
             # lose any signature
             break
@@ -934,6 +933,16 @@ def parseContent(content, keep_citations, keep_body,
         # and add the section to the output
         l.append(section)
 
         # and add the section to the output
         l.append(section)
 
+    # figure the summary - find the first sentence-ending punctuation or the
+    # first whole line, whichever is longest
+    sentence = re.search(r'^([^!?\.]+[!?\.])', summary)
+    if sentence:
+        sentence = sentence.group(1)
+    else:
+        sentence = ''
+    first = eol.split(summary)[0]
+    summary = max(sentence, first)
+
     # Now reconstitute the message content minus the bits we don't care
     # about.
     if not keep_body:
     # Now reconstitute the message content minus the bits we don't care
     # about.
     if not keep_body:
index e94632babe073edde0046aa9bf6a94a0720560d7..8fd9b287bf552ad1920678dca470a16adfc62d94 100644 (file)
@@ -15,7 +15,7 @@
 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 # 
 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 # 
-# $Id: roundupdb.py,v 1.72 2002-10-08 07:28:34 richard Exp $
+# $Id: roundupdb.py,v 1.73 2002-11-05 22:59:46 richard Exp $
 
 __doc__ = """
 Extending hyperdb with types specific to issue-tracking.
 
 __doc__ = """
 Extending hyperdb with types specific to issue-tracking.
@@ -26,9 +26,19 @@ import MimeWriter, cStringIO
 import base64, quopri, mimetypes
 # if available, use the 'email' module, otherwise fallback to 'rfc822'
 try :
 import base64, quopri, mimetypes
 # if available, use the 'email' module, otherwise fallback to 'rfc822'
 try :
-    from email.Utils import dump_address_pair as straddr
+    from email.Utils import formataddr as straddr
 except ImportError :
 except ImportError :
-    from rfc822 import dump_address_pair as straddr
+    # code taken from the email package 2.4.3
+    def straddr(pair, specialsre = re.compile(r'[][\()<>@,:;".]'),
+            escapesre = re.compile(r'[][\()"]')):
+        name, address = pair
+        if name:
+            quotes = ''
+            if specialsre.search(name):
+                quotes = '"'
+            name = escapesre.sub(r'\\\g<0>', name)
+            return '%s%s%s <%s>' % (quotes, name, quotes, address)
+        return address
 
 import hyperdb
 
 
 import hyperdb
 
index 4f4b213f65dc52a7f21ad96a51c7a0e9bbc9fced..aa0975529838ed2b4476efbd276735335adf55a8 100644 (file)
@@ -16,7 +16,7 @@
 # 
 """ HTTP Server that serves roundup.
 
 # 
 """ HTTP Server that serves roundup.
 
-$Id: roundup_server.py,v 1.14 2002-10-08 03:31:09 richard Exp $
+$Id: roundup_server.py,v 1.15 2002-11-05 22:59:46 richard Exp $
 """
 
 # python version check
 """
 
 # python version check
@@ -158,6 +158,7 @@ class RoundupRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
         co = filter(None, self.headers.getheaders('cookie'))
         if co:
             env['HTTP_COOKIE'] = ', '.join(co)
         co = filter(None, self.headers.getheaders('cookie'))
         if co:
             env['HTTP_COOKIE'] = ', '.join(co)
+        env['HTTP_AUTHORIZATION'] = self.headers.getheader('authorization')
         env['SCRIPT_NAME'] = ''
         env['SERVER_NAME'] = self.server.server_name
         env['SERVER_PORT'] = str(self.server.server_port)
         env['SCRIPT_NAME'] = ''
         env['SERVER_NAME'] = self.server.server_name
         env['SERVER_PORT'] = str(self.server.server_port)
index af81ce6a81a627855944b9c63f67d6475046133e..f8332b618c3f8d9605bb6781302d818ad8fdd8c5 100644 (file)
@@ -8,7 +8,7 @@
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 #
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 #
-# $Id: test_mailgw.py,v 1.32 2002-09-26 03:04:24 richard Exp $
+# $Id: test_mailgw.py,v 1.33 2002-11-05 22:59:46 richard Exp $
 
 import unittest, cStringIO, tempfile, os, shutil, errno, imp, sys, difflib
 
 
 import unittest, cStringIO, tempfile, os, shutil, errno, imp, sys, difflib
 
@@ -81,13 +81,14 @@ class MailgwTestCase(unittest.TestCase, DiffHelper):
         # and open the database
         self.db = self.instance.open('admin')
         self.db.user.create(username='Chef', address='chef@bork.bork.bork',
         # and open the database
         self.db = self.instance.open('admin')
         self.db.user.create(username='Chef', address='chef@bork.bork.bork',
-            roles='User')
+            realname='Bork, Chef', roles='User')
         self.db.user.create(username='richard', address='richard@test',
             roles='User')
         self.db.user.create(username='mary', address='mary@test',
         self.db.user.create(username='richard', address='richard@test',
             roles='User')
         self.db.user.create(username='mary', address='mary@test',
-            roles='User')
+            roles='User', realname='Contrary, Mary')
         self.db.user.create(username='john', address='john@test',
         self.db.user.create(username='john', address='john@test',
-            alternate_addresses='jondoe@test\njohn.doe@test', roles='User')
+            alternate_addresses='jondoe@test\njohn.doe@test', roles='User',
+            realname='John Doe')
 
     def tearDown(self):
         if os.path.exists(os.environ['SENDMAILDEBUG']):
 
     def tearDown(self):
         if os.path.exists(os.environ['SENDMAILDEBUG']):
@@ -204,15 +205,15 @@ TO: chef@bork.bork.bork, mary@test, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, mary@test, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, mary@test, richard@test
-From: "Chef" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: "Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+From: "Bork, Chef" <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 MIME-Version: 1.0
 Message-Id: <dummy_test_message_id>
 X-Roundup-Name: Roundup issue tracker
 Content-Transfer-Encoding: quoted-printable
 
 
 MIME-Version: 1.0
 Message-Id: <dummy_test_message_id>
 X-Roundup-Name: Roundup issue tracker
 Content-Transfer-Encoding: quoted-printable
 
 
-New submission from Chef <chef@bork.bork.bork>:
+New submission from Bork, Chef <chef@bork.bork.bork>:
 
 This is a test submission of a new issue.
 
 
 This is a test submission of a new issue.
 
@@ -223,10 +224,10 @@ messages: 1
 nosy: Chef, mary, richard
 status: unread
 title: Testing...
 nosy: Chef, mary, richard
 status: unread
 title: Testing...
-_________________________________________________________________________
-"Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 http://your.tracker.url.example/issue1
 http://your.tracker.url.example/issue1
-_________________________________________________________________________
+_______________________________________________________________________
 ''')
 
     # BUG
 ''')
 
     # BUG
@@ -259,8 +260,8 @@ TO: chef@bork.bork.bork, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, richard@test
-From: "mary" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: "Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+From: "Contrary, Mary" <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
@@ -268,17 +269,17 @@ X-Roundup-Name: Roundup issue tracker
 Content-Transfer-Encoding: quoted-printable
 
 
 Content-Transfer-Encoding: quoted-printable
 
 
-mary <mary@test> added the comment:
+Contrary, Mary <mary@test> added the comment:
 
 This is a second followup
 
 
 ----------
 status: unread -> chatting
 
 This is a second followup
 
 
 ----------
 status: unread -> chatting
-_________________________________________________________________________
-"Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 http://your.tracker.url.example/issue1
 http://your.tracker.url.example/issue1
-_________________________________________________________________________
+_______________________________________________________________________
 ''')
 
     def testFollowup(self):
 ''')
 
     def testFollowup(self):
@@ -307,8 +308,8 @@ TO: chef@bork.bork.bork, john@test, mary@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, john@test, mary@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, john@test, mary@test
-From: "richard" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: "Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+From: richard <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
@@ -325,10 +326,10 @@ This is a followup
 assignedto:  -> mary
 nosy: +john, mary
 status: unread -> chatting
 assignedto:  -> mary
 nosy: +john, mary
 status: unread -> chatting
-_________________________________________________________________________
-"Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 http://your.tracker.url.example/issue1
 http://your.tracker.url.example/issue1
-_________________________________________________________________________
+_______________________________________________________________________
 ''')
 
     def testFollowupTitleMatch(self):
 ''')
 
     def testFollowupTitleMatch(self):
@@ -353,8 +354,8 @@ TO: chef@bork.bork.bork, john@test, mary@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, john@test, mary@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, john@test, mary@test
-From: "richard" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: "Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+From: richard <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
@@ -371,10 +372,10 @@ This is a followup
 assignedto:  -> mary
 nosy: +john, mary
 status: unread -> chatting
 assignedto:  -> mary
 nosy: +john, mary
 status: unread -> chatting
-_________________________________________________________________________
-"Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 http://your.tracker.url.example/issue1
 http://your.tracker.url.example/issue1
-_________________________________________________________________________
+_______________________________________________________________________
 ''')
 
     def testFollowupNosyAuthor(self):
 ''')
 
     def testFollowupNosyAuthor(self):
@@ -400,8 +401,8 @@ TO: chef@bork.bork.bork, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, richard@test
-From: "john" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: "Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+From: John Doe <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
@@ -409,7 +410,7 @@ X-Roundup-Name: Roundup issue tracker
 Content-Transfer-Encoding: quoted-printable
 
 
 Content-Transfer-Encoding: quoted-printable
 
 
-john <john@test> added the comment:
+John Doe <john@test> added the comment:
 
 This is a followup
 
 
 This is a followup
 
@@ -417,10 +418,10 @@ This is a followup
 ----------
 nosy: +john
 status: unread -> chatting
 ----------
 nosy: +john
 status: unread -> chatting
-_________________________________________________________________________
-"Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 http://your.tracker.url.example/issue1
 http://your.tracker.url.example/issue1
-_________________________________________________________________________
+_______________________________________________________________________
 
 ''')
 
 
 ''')
 
@@ -448,8 +449,8 @@ TO: chef@bork.bork.bork
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork
-From: "richard" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: "Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+From: richard <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
@@ -465,10 +466,10 @@ This is a followup
 ----------
 nosy: +john
 status: unread -> chatting
 ----------
 nosy: +john
 status: unread -> chatting
-_________________________________________________________________________
-"Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 http://your.tracker.url.example/issue1
 http://your.tracker.url.example/issue1
-_________________________________________________________________________
+_______________________________________________________________________
 
 ''')
 
 
 ''')
 
@@ -496,8 +497,8 @@ TO: chef@bork.bork.bork, john@test, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, john@test, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, john@test, richard@test
-From: "john" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: "Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+From: John Doe <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
@@ -505,7 +506,7 @@ X-Roundup-Name: Roundup issue tracker
 Content-Transfer-Encoding: quoted-printable
 
 
 Content-Transfer-Encoding: quoted-printable
 
 
-john <john@test> added the comment:
+John Doe <john@test> added the comment:
 
 This is a followup
 
 
 This is a followup
 
@@ -513,10 +514,10 @@ This is a followup
 ----------
 nosy: +john
 status: unread -> chatting
 ----------
 nosy: +john
 status: unread -> chatting
-_________________________________________________________________________
-"Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 http://your.tracker.url.example/issue1
 http://your.tracker.url.example/issue1
-_________________________________________________________________________
+_______________________________________________________________________
 
 ''')
 
 
 ''')
 
@@ -543,8 +544,8 @@ TO: chef@bork.bork.bork, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, richard@test
-From: "john" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: "Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+From: John Doe <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
@@ -552,17 +553,17 @@ X-Roundup-Name: Roundup issue tracker
 Content-Transfer-Encoding: quoted-printable
 
 
 Content-Transfer-Encoding: quoted-printable
 
 
-john <john@test> added the comment:
+John Doe <john@test> added the comment:
 
 This is a followup
 
 
 ----------
 status: unread -> chatting
 
 This is a followup
 
 
 ----------
 status: unread -> chatting
-_________________________________________________________________________
-"Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 http://your.tracker.url.example/issue1
 http://your.tracker.url.example/issue1
-_________________________________________________________________________
+_______________________________________________________________________
 
 ''')
 
 
 ''')
 
@@ -590,8 +591,8 @@ TO: chef@bork.bork.bork
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork
-From: "richard" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: "Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+From: richard <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
@@ -606,10 +607,10 @@ This is a followup
 
 ----------
 status: unread -> chatting
 
 ----------
 status: unread -> chatting
-_________________________________________________________________________
-"Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 http://your.tracker.url.example/issue1
 http://your.tracker.url.example/issue1
-_________________________________________________________________________
+_______________________________________________________________________
 
 ''')
 
 
 ''')
 
@@ -698,8 +699,8 @@ TO: chef@bork.bork.bork, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, richard@test
-From: "mary" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: "Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+From: "Contrary, Mary" <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
@@ -707,16 +708,16 @@ X-Roundup-Name: Roundup issue tracker
 Content-Transfer-Encoding: quoted-printable
 
 
 Content-Transfer-Encoding: quoted-printable
 
 
-mary <mary@test> added the comment:
+Contrary, Mary <mary@test> added the comment:
 
 A message with encoding (encoded oe =F6)
 
 ----------
 status: unread -> chatting
 
 A message with encoding (encoded oe =F6)
 
 ----------
 status: unread -> chatting
-_________________________________________________________________________
-"Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 http://your.tracker.url.example/issue1
 http://your.tracker.url.example/issue1
-_________________________________________________________________________
+_______________________________________________________________________
 ''')
 
 
 ''')
 
 
@@ -752,8 +753,8 @@ TO: chef@bork.bork.bork, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, richard@test
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork, richard@test
-From: "mary" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: "Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+From: "Contrary, Mary" <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
@@ -761,16 +762,16 @@ X-Roundup-Name: Roundup issue tracker
 Content-Transfer-Encoding: quoted-printable
 
 
 Content-Transfer-Encoding: quoted-printable
 
 
-mary <mary@test> added the comment:
+Contrary, Mary <mary@test> added the comment:
 
 A message with first part encoded (encoded oe =F6)
 
 ----------
 status: unread -> chatting
 
 A message with first part encoded (encoded oe =F6)
 
 ----------
 status: unread -> chatting
-_________________________________________________________________________
-"Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 http://your.tracker.url.example/issue1
 http://your.tracker.url.example/issue1
-_________________________________________________________________________
+_______________________________________________________________________
 ''')
 
     def testFollowupStupidQuoting(self):
 ''')
 
     def testFollowupStupidQuoting(self):
@@ -796,8 +797,8 @@ TO: chef@bork.bork.bork
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork
 Content-Type: text/plain
 Subject: [issue1] Testing...
 To: chef@bork.bork.bork
-From: "richard" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: "Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+From: richard <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
 MIME-Version: 1.0
 Message-Id: <followup_dummy_id>
 In-Reply-To: <dummy_test_message_id>
@@ -812,10 +813,10 @@ This is a followup
 
 ----------
 status: unread -> chatting
 
 ----------
 status: unread -> chatting
-_________________________________________________________________________
-"Roundup issue tracker" <issue_tracker@your.tracker.email.domain.example>
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
 http://your.tracker.url.example/issue1
 http://your.tracker.url.example/issue1
-_________________________________________________________________________
+_______________________________________________________________________
 ''')
 
 def suite():
 ''')
 
 def suite():