= チケット更新情報のメール通知 = #EmailNotificationofTicketChanges
[[TracGuideToc]]

Trac はチケット更新情報をメールで通知出来ます。 (英語版では Notification)

メールによる更新通知は、ユーザに関係するチケットについての最新情報を随時に提供したり、専用 ML にチケットの更新情報を配信したりするのに便利な機能です。例えば、 [http://lists.edgewall.com/archive/trac-tickets/ Trac-tickets] を見るとどのようにセットアップされているか見ることができます。

通知機能はデフォルトでは無効になっています。有効化とコンフィグレーションは [wiki:TracIni trac.ini] で行うことができます。

== 通知メールを受け取る == #ReceivingNotificationMails
新しいチケットを登録したりコメントを追加する際、 ''報告者'' (英語版では ''reporter'')、 ''担当者'' (英語版では ''assigned to/owner'') もしくは ''関係者'' (英語版では ''cc'') フィールドに有効なメールアドレスやユーザ名を入力してください。チケットに更新があると、 Trac が自動的にメールを送信します。 (どのように通知メール機能を設定しているかによります)

これは、興味のあるチケットや機能追加に関する最新情報を随時受け取りたい場合に便利な機能です。

=== 通知メールで受信するメールアドレスを設定する方法 === #Howtouseyourusernametoreceivenotificationmails

完全なメールアドレスあるいはユーザー名を入力することで、通知メールを受け取ることができます。 単純なユーザ名やログイン名で通知を受け取るには、''ユーザ設定 (Preferences)'' ページで、正しいメールアドレスを入力する必要があります。

TracIni ファイルにデフォルトドメイン名 ('''`smtp_default_domain`''') を指定することでも、単純なユーザ名で通知を受け取ることができるようになります。 (後述する [#ConfigurationOptions コンフィグレーション オプション] を参照してください) 。この場合、ユーザ名にデフォルトドメインが追加されますので、 "イントラネット" 環境で仕様している場合は便利です。

Kerberos / Active Directory 認証に Apache と mod_kerb を使用する際、ユーザ名は ('''`username@EXAMPLE.LOCAL`''') という形式を取ります。これをメールアドレスとして解釈されない様にするためには、 ('''`ignore_domains`''') に Kerberos ドメインを追加します。

== SMTP 通知の設定 == #ConfiguringSMTPNotification

'''重要:''' TracNotification を正しく動作させるには、[wiki:TracIni trac.ini] に `[trac] base_url` を設定する必要があります。

=== コンフィグレーション オプション === #ConfigurationOptions
trac.ini の `[notification]` セクションで設定できるオプションです。[[BR]](訳注: 0.10 以降では `TracIni` マクロを使用することで正確なオプション一覧を取得できます。以下のリストは必要に応じて `[[TracIni(notification)]]` に置き換えて使用してください。)

[[TracIni(notification)]]

=== コンフィグレーションの例 (SMTP) === #ExampleConfigurationSMTP
{{{
[notification]
smtp_enabled = true
smtp_server = mail.example.com
smtp_from = notifier@example.com
smtp_replyto = myproj@projects.example.com
smtp_always_cc = ticketmaster@example.com, theboss+myproj@example.com
}}}

=== コンフィグレーションの例 (`sendmail`) === #ExampleConfigurationsendmail
{{{
[notification]
smtp_enabled = true
email_sender = SendmailEmailSender
sendmail_path = /usr/sbin/sendmail
smtp_from = notifier@example.com
smtp_replyto = myproj@projects.example.com
smtp_always_cc = ticketmaster@example.com, theboss+myproj@example.com
}}}

=== メールの件名をカスタマイズする === #Customizingthee-mailsubject
`ticket_subject_template` オプションを使用することでメールの件名をカスタマイズできます。このオプションには [http://genshi.edgewall.org/wiki/Documentation/text-templates.html Genshi テキストテンプレート] を含めることができます。デフォルト値は以下の通りです:
{{{
$prefix #$ticket.id: $summary
}}}
テンプレートでは以下の変数が使用可能です:

 * `env`: プロジェクトの Environemnt ([http://trac.edgewall.org/browser/trunk/trac/env.py env.py] 参照)
 * `prefix`: `smtp_subject_prefix` で定義したプレフィックス
 * `summary`: チケットの概要 (Summary), 概要が変更されている場合は古い値
 * `ticket`: ticket model オブジェクト ([http://trac.edgewall.org/browser/trunk/trac/ticket/model.py model.py] 参照)。個別のチケット属性は `$ticket.milestone` のように、ドット (.) で区切って (訳注: 英語での) 属性名を加えることで、参照可能

=== メールの内容をカスタマイズする === #Customizingthee-mailcontent

通知メールの内容は `trac/ticket/templates` の `ticket_notify_email.txt` を基に生成されます。編集した `ticket_notify_email.txt` を Environment の templates ディレクトリに配置することで、カスタマイズすることができます。デフォルトはこのようになっています:

{{{
$ticket_body_hdr
$ticket_props
{% choose ticket.new %}\
{%   when True %}\
$ticket.description
{%   end %}\
{%   otherwise %}\
{%     if changes_body %}\
${_('Changes (by %(author)s):', author=change.author)}

$changes_body
{%     end %}\
{%     if changes_descr %}\
{%       if not changes_body and not change.comment and change.author %}\
${_('Description changed by %(author)s:', author=change.author)}
{%       end %}\
$changes_descr
--
{%     end %}\
{%     if change.comment %}\

${changes_body and _('Comment:') or _('Comment (by %(author)s):', author=change.author)}

$change.comment
{%     end %}\
{%   end %}\
{% end %}\

--
${_('Ticket URL: <%(link)s>', link=ticket.link)}
$project.name <${project.url or abs_href()}>
$project.descr
}}}
== Email サンプル == #SampleEmail
{{{
#42: testing
---------------------------+------------------------------------------------
       Id:  42             |      Status:  assigned
Component:  report system  |    Modified:  Fri Apr  9 00:04:31 2004
 Severity:  major          |   Milestone:  0.9
 Priority:  lowest         |     Version:  0.6
    Owner:  anonymous      |    Reporter:  jonas@example.com
---------------------------+------------------------------------------------
Changes:
  * component:  changset view => search system
  * priority:  low => highest
  * owner:  jonas => anonymous
  * cc:  daniel@example.com =>
         daniel@example.com, jonas@example.com
  * status:  new => assigned

Comment:
I'm interested too!

--
Ticket URL: <http://example.com/trac/ticket/42>
My Project <http://myproj.example.com/>
}}}

== MS Outlook 向け E メールカスタマイズ == #Customizinge-mailcontentforMSOutlook

通常何も設定していなければ、 MS Outlook では可変長フォントのプレーンテキストメールを提示します。そのため、チケットプロパティの表は確実にゴチャゴチャしたように見えます。この問題は、 [#Customizingthee-mailcontent メールテンプレート] のカスタマイズにより解決することができます。


テンプレートの2行目を次のように置き換えます:
{{{
$ticket_props
}}}

この代わりに (''Python 2.6 以降が必要''):
{{{
--------------------------------------------------------------------------
{% with
   pv = [(a[0].strip(), a[1].strip()) for a in [b.split(':') for b in
         [c.strip() for c in
          ticket_props.replace('|', '\n').splitlines()[1:-1]] if ':' in b]];
   sel = ['Reporter', 'Owner', 'Type', 'Status', 'Priority', 'Milestone',
          'Component', 'Severity', 'Resolution', 'Keywords'] %}\
${'\n'.join('%s\t%s' % (format(p[0]+':', ' <12'), p[1]) for p in pv if p[0] in sel)}
{% end %}\
--------------------------------------------------------------------------
}}}

チケットプロパティの表は、選択するプロパティのリストに置き換えられます。MS Outlook を使用する際に、デフォルトの表よりわかりやすくなるように、タブ文字で名前と値を分離しています。
{{{#!div style="margin: 1em 1.75em; border:1px dotted"
{{{#!html
#42: testing<br />
--------------------------------------------------------------------------<br />
<table cellpadding=0>
<tr><td>Reporter:</td><td>jonas@example.com</td></tr>
<tr><td>Owner:</td><td>anonymous</td></tr>
<tr><td>Type:</td><td>defect</td></tr>
<tr><td>Status:</td><td>assigned</td></tr>
<tr><td>Priority:</td><td>lowest</td></tr>
<tr><td>Milestone:</td><td>0.9</td></tr>
<tr><td>Component:</td><td>report system</td></tr>
<tr><td>Severity:</td><td>major</td></tr>
<tr><td>Resolution:</td><td> </td></tr>
<tr><td>Keywords:</td><td> </td></tr>
</table>
--------------------------------------------------------------------------<br />
Changes:<br />
<br />
&nbsp;&nbsp;* component: &nbsp;changset view =&gt; search system<br />
&nbsp;&nbsp;* priority: &nbsp;low =&gt; highest<br />
&nbsp;&nbsp;* owner: &nbsp;jonas =&gt; anonymous<br />
&nbsp;&nbsp;* cc: &nbsp;daniel@example.com =&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;daniel@example.com, jonas@example.com<br />
&nbsp;&nbsp;* status: &nbsp;new =&gt; assigned<br />
<br />
Comment:<br />
I'm interested too!<br />
<br />
--<br />
Ticket URL: &lt;http://example.com/trac/ticket/42&gt;<br />
My Project &lt;http://myproj.example.com/&gt;<br />
}}}
}}}

**重要**: `sel` にリストされているチケットフィールドのみ HTML メールに含まれます。もし、メールに当然含まなくてはならないカスタムチケットフィールドを定義するのであれば、`sel` に追加しなければなりません。例:
{{{
   sel = ['Reporter', ..., 'Keywords', 'Custom1', 'Custom2']
}}}

しかしながら、 自動的なHTMLフォーマットのメールのように完璧ではありません。それでも、現状のチケットのプロパティをマイクロソフトのアウトルックによって少なくとも読むことは出来ます。。。


== SMTP リレーホストとして GMail を使用する == #UsingGMailastheSMTPrelayhost

以下のような設定を使用します
{{{
[notification]
smtp_enabled = true
use_tls = true
mime_encoding = base64
smtp_server = smtp.gmail.com
smtp_port = 587
smtp_user = user
smtp_password = password
}}}

''user'' と ''password'' の箇所は、 GMail のアカウントで置き換えてください。 ''たとえば'' [http://gmail.com] にログインするときに使用しているものです。

代わりに `smtp_port = 25` を使用することもできます。[[br]]
しかし `smtp_port = 465` は使用できません。これは動作しないだけでなく、通知メール送信がデッドロックします。
ポート番号 465 は SMTPS プロトコルに使用されますが、Trac はこれをサポートしていません。
詳しくは [trac:comment:2:ticket:7107 #7107] を参照してください。

== 自分の変更やコメントによる通知をフィルタする == #Filteringnotificationsforonesownchangesandcomments
Gmail では、以下のフィルタを使用できます:

{{{
from:(<smtp_from>) (("Reporter: <username>" -Changes -Comment) OR "Changes (by <username>)" OR "Comment (by <username>)")
}}}

通知メールを削除する場合などにも使用できます。

Thunderbird で IMAP を使用している場合は、この方法は使えません
(http://kb.mozillazine.org/Filters_(Thunderbird)#Filtering_the_message_body 参照)。

プラグインを追加することで解決するかもしれません:
[[http://trac-hacks.org/wiki/NeverNotifyUpdaterPlugin]]、もしくは [trac:#2247] の解決に投票してください。

== トラブルシューティング == #Troubleshooting

通知メールの設定がうまくいかないとき、最初にログが出力されるようになっているか確かめて下さい。そしてどういうエラーメッセージが出力されているかを見てください。[trac:TracLogging TracLogging] にログについて書いてあるので見て下さい。

通知メールのエラーは Web インタフェースで報告されないので、誰かがチケットを更新したり、新規のチケットを登録しても通知メールが届かないことにまったく気づかないでしょう。 Trac の管理者はエラートレースを追い、ログをみる必要があります。

=== ''Permission denied'' エラー === #Permissiondeniederror

たいていのエラーメッセージ:
{{{
  ...
  File ".../smtplib.py", line 303, in connect
    raise socket.error, msg
  error: (13, 'Permission denied')
}}}

このエラーはたいていサーバのセキュリティの設定に起因します: 多くの Linux のディストリビューションでは Web サーバ (Apache など ...) からローカルの SMTP サーバにメールを送信させません。

多くのユーザはマニュアルに SMTP サーバに接続できるか試すよう書いてあり、成功するので混乱するでしょう:
{{{
telnet localhost 25
}}}
トラブルの原因は、一般ユーザは SMTP サーバに接続できるけれども、 Web サーバは接続できないということです:
{{{
sudo -u www-data telnet localhost 25
}}}

このような場合、 Web サーバ が SMTP サーバにメールを送信するときに認証を行うように設定する必要があります。実際の設定は使用している Linux のディストリビューションと現在のセキュリティのポリシーによります。 Trac の [trac:MailingList MailingList] のアーカイブを参照して下さい。

関係のあるメーリングリストのスレッド:
 * SELinux: http://article.gmane.org/gmane.comp.version-control.subversion.trac.general/7518

Fedora 10 の SELinux では下記のコマンドで対処できます:
{{{
$ setsebool -P httpd_can_sendmail 1
}}}
=== ''Suspected spam'' エラー === #Suspectedspamerror

SMTP サーバの中には Trac によって送信される通知メールを拒否するのもあるでしょう。

Trac はデフォルトで通知メールを Base64 エンコーディングして受信者に送信します。メールの本文 (Body) 全体がエンコードされる (訳注:チケットのタイトルに日本語が含まれる場合、通知メールの Subject ヘッダも utf-8 base64 エンコーディングされます) ので、繊細なメールサーバ上の ''false positive'' な SPAM 発見プログラムのトリガになってしまいます。このような状況に遭遇した場合、 `mime_encoding` オプションでデフォルトのエンコーディングを "quoted-printable" に変更することを推奨します。

"quoted-printable" エンコーディングは ラテン系の文字セットで使用すると効果があります。アジア系の文字セットでは、 Base64 エンコーディングに固定することを推奨します。 (訳注: 日本語のメールで主に使用されるエンコードは `ISO-2022-JP` ですが、 Trac が送信する通知メールは `UTF-8` でエンコードされ、さらに `BASE64` か `quoted-printable` で 7bit-safe な形式にエンコードされます。 `ISO-2022-JP` エンコーディングでない日本語のメールは Spam 検出エンジンに誤判定されやすくなる傾向があるようです。また、 MUA がこれらのエンコードに対応していない場合、たとえ受信できたとしても文字化けしたり表示できない可能性があります。)

=== ''501, 5.5.4 Invalid Address'' エラー === #a5015.5.4InvalidAddresserror

IIS 6.0 で
{{{
Failure sending notification on change to ticket #1: SMTPHeloError: (501, '5.5.4 Invalid Address')
}}}
上記のエラーが trac のログにでる場合、 [http://support.microsoft.com/kb/291828 ここ]を参考に解決してください。


----
See also: TracTickets, TracIni, TracGuide
