Index: trac/ticket/tests/notification.py
===================================================================
--- trac/ticket/tests/notification.py	(revision 7669)
+++ trac/ticket/tests/notification.py	(working copy)
@@ -415,7 +415,7 @@
         """MIME None/ascii encoding"""
         self.env.config.set('notification','mime_encoding', 'none')
         ticket = Ticket(self.env)
-        ticket['reporter'] = 'joe.user'
+        ticket['reporter'] = 'joe.user@example.org'
         ticket['summary'] = u'This is a summary'
         ticket.insert()
         self._validate_mimebody((None, '7bit', 'ascii'), \
Index: trac/ticket/notification.py
===================================================================
--- trac/ticket/notification.py	(revision 7669)
+++ trac/ticket/notification.py	(working copy)
@@ -74,6 +74,7 @@
         change_data = {}
         link = self.env.abs_href.ticket(ticket.id)
         summary = self.ticket['summary']
+        use_u = self._use_unicode
         
         if not self.newticket and modtime:  # Ticket change
             from trac.ticket.web_ui import TicketModule
@@ -82,7 +83,8 @@
                 if not change['permanent']: # attachment with same time...
                     continue
                 change_data.update({
-                    'author': obfuscate_email_address(change['author']),
+                    'author': obfuscate_email_address(change['author'],
+                                                      use_u),
                     'comment': wrap(change['comment'], self.COLS, ' ', ' ',
                                     CRLF)
                     })
@@ -120,8 +122,8 @@
                         self.prev_cc += old and self.parse_cc(old) or []
                     else:
                         if field in ['owner', 'reporter']:
-                            old = obfuscate_email_address(old)
-                            new = obfuscate_email_address(new)
+                            old = obfuscate_email_address(old, use_u)
+                            new = obfuscate_email_address(new, use_u)
                         newv = new
                         l = 7 + len(field)
                         chg = wrap('%s => %s' % (old, new), self.COLS - l, '',
@@ -152,6 +154,7 @@
 
     def format_props(self):
         tkt = self.ticket
+        use_u = self._use_unicode
         fields = [f for f in tkt.fields if f['name'] not in ('summary', 'cc')]
         width = [0, 0, 0, 0]
         i = 0
@@ -180,7 +183,7 @@
                 continue
             fval = tkt[fname]
             if fname in ['owner', 'reporter']:
-                fval = obfuscate_email_address(fval)
+                fval = obfuscate_email_address(fval, use_u)
             if f['type'] == 'textarea' or '\n' in unicode(fval):
                 big.append((fname.capitalize(), CRLF.join(fval.splitlines())))
             else:
@@ -199,11 +202,12 @@
         return filter(lambda x: '@' in x, txt.replace(',', ' ').split())
 
     def diff_cc(self, old, new):
+        use_u = self._use_unicode
         oldcc = NotifyEmail.addrsep_re.split(old)
         newcc = NotifyEmail.addrsep_re.split(new)
-        added = [obfuscate_email_address(x) \
+        added = [obfuscate_email_address(x, use_u) \
                                 for x in newcc if x and x not in oldcc]
-        removed = [obfuscate_email_address(x) \
+        removed = [obfuscate_email_address(x, use_u) \
                                 for x in oldcc if x and x not in newcc]
         return (added, removed)
 
Index: trac/util/text.py
===================================================================
--- trac/util/text.py	(revision 7669)
+++ trac/util/text.py	(working copy)
@@ -183,11 +183,12 @@
     except ImportError:
         return t
 
-def obfuscate_email_address(address):
+def obfuscate_email_address(address, use_unicode=True):
+    ellipsis = use_unicode and u'@\u2026' or '@...'
     if address:
         at = address.find('@')
         if at != -1:
-            return address[:at] + u'@\u2026' + \
+            return address[:at] + ellipsis + \
                    (address[-1] == '>' and '>' or '')
     return address
 
Index: trac/notification.py
===================================================================
--- trac/notification.py	(revision 7669)
+++ trac/notification.py	(working copy)
@@ -219,6 +219,8 @@
             self._charset.output_charset = 'ascii'
         else:
             raise TracError(_('Invalid email encoding setting: %s' % pref))
+        # Whether obfuscated email addresses can use unicode ellipsis
+        self._use_unicode = self._charset.body_encoding is not None
 
     def notify(self, resid, subject):
         self.subject = subject
