Edgewall Software

Changes between Initial Version and Version 1 of 1.1/TracNotification


Ignore:
Timestamp:
Mar 28, 2015, 9:11:54 AM (9 years ago)
Author:
Peter Suter
Comment:

Copied from TracNotification@88

Legend:

Unmodified
Added
Removed
Modified
  • 1.1/TracNotification

    v1 v1  
     1= Email Notification of Ticket Changes =
     2[[TracGuideToc]]
     3[[TranslatedPages]]
     4
     5Trac supports notification of ticket changes via email.
     6
     7Email notification is useful to keep users up-to-date on tickets/issues of interest, and also provides a convenient way to post all ticket changes to a dedicated mailing list. For example, this is how the [http://lists.edgewall.com/archive/trac-tickets/ Trac-tickets] mailing list is set up.
     8
     9Disabled by default, notification can be activated and configured in [wiki:TracIni trac.ini].
     10
     11== Receiving Notification Mails ==
     12When reporting a new ticket or adding a comment, enter a valid email address or your Trac username in the ''reporter'', ''assigned to/owner'' or ''cc'' field. Trac will automatically send you an email when changes are made to the ticket, depending on how notification is configured.
     13
     14=== How to use your username to receive notification mails ===
     15
     16To receive notification mails, you can either enter a full email address or your Trac username. To get notified with a simple username or login, you need to specify a valid email address in the ''Preferences'' page.
     17
     18Alternatively, a default domain name ('''`smtp_default_domain`''') can be set in the TracIni file, see [#ConfigurationOptions Configuration Options] below. In this case, the default domain will be appended to the username, which can be useful for an "Intranet" kind of installation.
     19
     20When using apache and mod_kerb for authentication against Kerberos / Active Directory, usernames take the form ('''`username@EXAMPLE.LOCAL`'''). To avoid this being interpreted as an email address, add the Kerberos domain to  ('''`ignore_domains`''').
     21
     22=== Ticket attachment notifications
     23
     24Since 1.0.3 Trac will send notifications when a ticket attachment is added or deleted. Usually attachment notifications will be enabled in an environment by default. To disable the attachment notifications for an environment the `TicketAttachmentNotifier` component must be disabled:
     25{{{#!ini
     26[components]
     27trac.ticket.notification.TicketAttachmentNotifier = disabled
     28}}}
     29
     30== Configuring SMTP Notification ==
     31
     32'''Important:''' For TracNotification to work correctly, the `[trac] base_url` option must be set in [wiki:TracIni trac.ini].
     33
     34=== Configuration Options ===
     35These are the available options for the `[notification]` section in trac.ini:
     36
     37[[TracIni(notification)]]
     38
     39=== Example Configuration (SMTP) ===
     40{{{
     41[notification]
     42smtp_enabled = true
     43smtp_server = mail.example.com
     44smtp_from = notifier@example.com
     45smtp_replyto = myproj@projects.example.com
     46smtp_always_cc = ticketmaster@example.com, theboss+myproj@example.com
     47}}}
     48
     49=== Example Configuration (`sendmail`) ===
     50{{{
     51[notification]
     52smtp_enabled = true
     53email_sender = SendmailEmailSender
     54sendmail_path = /usr/sbin/sendmail
     55smtp_from = notifier@example.com
     56smtp_replyto = myproj@projects.example.com
     57smtp_always_cc = ticketmaster@example.com, theboss+myproj@example.com
     58}}}
     59
     60=== Customizing the e-mail subject ===
     61The e-mail subject can be customized with the `ticket_subject_template` option, which contains a [http://genshi.edgewall.org/wiki/Documentation/text-templates.html Genshi text template] snippet. The default value is:
     62{{{
     63$prefix #$ticket.id: $summary
     64}}}
     65The following variables are available in the template:
     66
     67 * `env`: The project environment (see [trac:source:/trunk/trac/env.py env.py]).
     68 * `prefix`: The prefix defined in `smtp_subject_prefix`.
     69 * `summary`: The ticket summary, with the old value if the summary was edited.
     70 * `ticket`: The ticket model object (see [trac:source:/trunk/trac/ticket/model.py model.py]). Individual ticket fields can be addressed by appending the field name separated by a dot, eg `$ticket.milestone`.
     71
     72=== Customizing the e-mail content ===
     73
     74The notification e-mail content is generated based on `ticket_notify_email.txt` in `trac/ticket/templates`. You can add your own version of this template by adding a `ticket_notify_email.txt` to the templates directory of your environment. The default looks like this:
     75
     76{{{
     77$ticket_body_hdr
     78$ticket_props
     79{% choose ticket.new %}\
     80{%   when True %}\
     81$ticket.description
     82{%   end %}\
     83{%   otherwise %}\
     84{%     if changes_body %}\
     85${_('Changes (by %(author)s):', author=change.author)}
     86
     87$changes_body
     88{%     end %}\
     89{%     if changes_descr %}\
     90{%       if not changes_body and not change.comment and change.author %}\
     91${_('Description changed by %(author)s:', author=change.author)}
     92{%       end %}\
     93$changes_descr
     94--
     95{%     end %}\
     96{%     if change.comment %}\
     97
     98${changes_body and _('Comment:') or _('Comment (by %(author)s):', author=change.author)}
     99
     100$change.comment
     101{%     end %}\
     102{%   end %}\
     103{% end %}\
     104
     105--
     106${_('Ticket URL: <%(link)s>', link=ticket.link)}
     107$project.name <${project.url or abs_href()}>
     108$project.descr
     109}}}
     110
     111== Sample Email ==
     112{{{
     113#42: testing
     114---------------------------+------------------------------------------------
     115       Id:  42             |      Status:  assigned               
     116Component:  report system  |    Modified:  Fri Apr  9 00:04:31 2004
     117 Severity:  major          |   Milestone:  0.9                     
     118 Priority:  lowest         |     Version:  0.6                     
     119    Owner:  anonymous      |    Reporter:  jonas@example.com               
     120---------------------------+------------------------------------------------
     121Changes:
     122  * component:  changeset view => search system
     123  * priority:  low => highest
     124  * owner:  jonas => anonymous
     125  * cc:  daniel@example.com =>
     126         daniel@example.com, jonas@example.com
     127  * status:  new => assigned
     128
     129Comment:
     130I'm interested too!
     131
     132--
     133Ticket URL: <http://example.com/trac/ticket/42>
     134My Project <http://myproj.example.com/>
     135}}}
     136
     137== Customizing e-mail content for MS Outlook ==
     138
     139MS Outlook normally presents plain text e-mails with a variable-width font, and as a result the ticket properties table will most certainly look like a mess in MS Outlook. This can be fixed with some customization of the [#Customizingthee-mailcontent e-mail template].
     140
     141Replace the following second row in the template:
     142{{{
     143$ticket_props
     144}}}
     145
     146with this (requires Python 2.6 or later):
     147{{{
     148--------------------------------------------------------------------------
     149{% with
     150   pv = [(a[0].strip(), a[1].strip()) for a in [b.split(':') for b in
     151         [c.strip() for c in
     152          ticket_props.replace('|', '\n').splitlines()[1:-1]] if ':' in b]];
     153   sel = ['Reporter', 'Owner', 'Type', 'Status', 'Priority', 'Milestone',
     154          'Component', 'Severity', 'Resolution', 'Keywords'] %}\
     155${'\n'.join('%s\t%s' % (format(p[0]+':', ' <12'), p[1]) for p in pv if p[0] in sel)}
     156{% end %}\
     157--------------------------------------------------------------------------
     158}}}
     159
     160The table of ticket properties is replaced with a list of a selection of the properties. A tab character separates the name and value in such a way that most people should find this more pleasing than the default table when using MS Outlook.
     161{{{#!div style="margin: 1em 1.75em; border:1px dotted"
     162{{{#!html
     163#42: testing<br />
     164--------------------------------------------------------------------------<br />
     165<table cellpadding=0>
     166<tr><td>Reporter:</td><td>jonas@example.com</td></tr>
     167<tr><td>Owner:</td><td>anonymous</td></tr>
     168<tr><td>Type:</td><td>defect</td></tr>
     169<tr><td>Status:</td><td>assigned</td></tr>
     170<tr><td>Priority:</td><td>lowest</td></tr>
     171<tr><td>Milestone:</td><td>0.9</td></tr>
     172<tr><td>Component:</td><td>report system</td></tr>
     173<tr><td>Severity:</td><td>major</td></tr>
     174<tr><td>Resolution:</td><td> </td></tr>
     175<tr><td>Keywords:</td><td> </td></tr>
     176</table>
     177--------------------------------------------------------------------------<br />
     178Changes:<br />
     179<br />
     180&nbsp;&nbsp;* component: &nbsp;changeset view =&gt; search system<br />
     181&nbsp;&nbsp;* priority: &nbsp;low =&gt; highest<br />
     182&nbsp;&nbsp;* owner: &nbsp;jonas =&gt; anonymous<br />
     183&nbsp;&nbsp;* cc: &nbsp;daniel@example.com =&gt;<br />
     184&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;daniel@example.com, jonas@example.com<br />
     185&nbsp;&nbsp;* status: &nbsp;new =&gt; assigned<br />
     186<br />
     187Comment:<br />
     188I'm interested too!<br />
     189<br />
     190--<br />
     191Ticket URL: &lt;http://example.com/trac/ticket/42&gt;<br />
     192My Project &lt;http://myproj.example.com/&gt;<br />
     193}}}
     194}}}
     195
     196**Important**: Only those ticket fields that are listed in `sel` are part of the HTML mail. If you have defined custom ticket fields which are to be part of the mail, then they have to be added to `sel`. Example:
     197{{{
     198   sel = ['Reporter', ..., 'Keywords', 'Custom1', 'Custom2']
     199}}}
     200
     201However, the solution is still a workaround to an automatically HTML-formatted e-mail.
     202
     203== Using GMail as the SMTP relay host ==
     204
     205Use the following configuration snippet:
     206{{{
     207[notification]
     208smtp_enabled = true
     209use_tls = true
     210mime_encoding = base64
     211smtp_server = smtp.gmail.com
     212smtp_port = 587
     213smtp_user = user
     214smtp_password = password
     215}}}
     216
     217where ''user'' and ''password'' match an existing GMail account, ie the ones you use to log in on [http://gmail.com].
     218
     219Alternatively, you can use `smtp_port = 25`.[[br]]
     220You should not use `smtp_port = 465`. Doing so may deadlock your ticket submission. Port 465 is reserved for the SMTPS protocol, which is not supported by Trac. See [trac:comment:2:ticket:7107 #7107] for details.
     221 
     222== Filtering notifications for one's own changes and comments ==
     223In Gmail, use the filter:
     224{{{
     225from:(<smtp_from>) (("Reporter: <username>" -Changes -Comment) OR "Changes (by <username>)" OR "Comment (by <username>)")
     226}}}
     227
     228to delete these notifications.
     229
     230In Thunderbird, there is no such solution if you use IMAP, see http://kb.mozillazine.org/Filters_(Thunderbird)#Filtering_the_message_body.
     231
     232You can also add this plugin:
     233http://trac-hacks.org/wiki/NeverNotifyUpdaterPlugin, or vote for [trac:#2247] to be fixed.
     234
     235== Troubleshooting ==
     236
     237If you cannot get the notification working, first make sure the log is activated and have a look at the log to find if an error message has been logged. See TracLogging for help about the log feature.
     238
     239Notification errors are not reported through the web interface, so the user who submits a change or a new ticket never gets notified about a notification failure. The Trac administrator needs to look at the log to find the error trace.
     240
     241=== ''Permission denied'' error ===
     242
     243Typical error message:
     244{{{
     245  ...
     246  File ".../smtplib.py", line 303, in connect
     247    raise socket.error, msg
     248  error: (13, 'Permission denied')
     249}}}
     250
     251This error usually comes from a security settings on the server: many Linux distributions do not allow the web server (Apache, ...) to post email messages to the local SMTP server.
     252
     253Many users get confused when their manual attempts to contact the SMTP server succeed:
     254{{{
     255telnet localhost 25
     256}}}
     257This is because a regular user may connect to the SMTP server, but the web server cannot:
     258{{{
     259sudo -u www-data telnet localhost 25
     260}}}
     261
     262In such a case, you need to configure your server so that the web server is authorized to post to the SMTP server. The actual settings depend on your Linux distribution and current security policy. You may find help in the Trac [trac:MailingList MailingList] archive.
     263
     264Relevant ML threads:
     265 * SELinux: http://article.gmane.org/gmane.comp.version-control.subversion.trac.general/7518
     266
     267For SELinux in Fedora 10:
     268{{{
     269$ setsebool -P httpd_can_sendmail 1
     270}}}
     271
     272=== ''Suspected spam'' error ===
     273
     274Some SMTP servers may reject the notification email sent by Trac.
     275
     276The default Trac configuration uses Base64 encoding to send emails to the recipients. The whole body of the email is encoded, which sometimes trigger ''false positive'' spam detection on sensitive email servers. In such an event, change the default encoding to "quoted-printable" using the `mime_encoding` option.
     277
     278Quoted printable encoding works better with languages that use one of the Latin charsets. For Asian charsets, stick with the Base64 encoding.
     279
     280----
     281See also: TracTickets, TracIni, TracGuide, [trac:TracDev/NotificationApi]