チケット更新情報のメール通知

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

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

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

メール通知を受け取る

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

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

SMTP 通知のコンフィグレーション

コンフィグレーション オプション

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

  • smtp_enabled: メール通知を有効にします。
  • smtp_from: 通知メールの Sender-ヘッダに使用するメールアドレス。
  • smtp_from_name: 通知メールの Sender-ヘッダに使用する送信者名。
  • smtp_replyto: 通知メールのReply-To-ヘッダに使用するメールアドレス
  • smtp_default_domain: (0.10 以降) ドメイン名を含んでいないアドレスに特定のドメイン名を追加します。完全修飾されたアドレスは修正されません。ユーザの設定からメールアドレスが分からないときに、デフォルトドメインをすべてのユーザ名 / ログイン名に追加します。
  • smtp_always_cc: 常に通知メールを送信するメールアドレスのリスト。 主に専用MLにチケット更新を通知するのに使用されます。
  • smtp_always_bcc: (0.10 以降) 常に通知メールを送信するメールアドレスの一覧。ただし、通知メールの他の受信者からメールアドレスが見えません。
  • smtp_subject_prefix: (0.10.1 以降) e-mail の subject の前に挿入されるテキスト。デフォルトは "__default__"
  • always_notify_reporter: 報告者フィールドのすべてのメールアドレスに常に通知メールを送信します。 (default: false)
  • always_notify_owner: (0.9 以降) 担当者フィールドのメールアドレスに常に通知メールを送信します。 (default: false)
  • always_notify_updater: (0.10 以降) チケットの更新者に常に通知メールを送信します。 (default: false)
  • use_public_cc: (0.10 以降) To: (担当者, 報告者) と CC: のアドレスのリストがすべての受信者に見えるかどうかを設定します ( デフォルトは Bcc: で見えません)
  • use_short_addr: (0.10 以降) 通知メールの配信でメールアドレスがドメイン名を含むようにするかどうかを設定します (例 @<domain.com> で終わらないようにする)。このオプションは SMTP サーバがローカルアドレスをハンドリングでき、ローカルのメールボックスとユーザ名/ログイン名をマップできるような環境、イントラネット内で使用するときに便利です。
  • mime_encoding: (0.10 以降) 通知メールは常に 7-bit モードで送信されます。このオプションで MIME エンコードの選択ができます。利用可能な値は以下の通りです:
    • base64: デフォルトの値です。どのような種類の内容にも対応できます。 デリケートな アンチスパム / アンチウイルス エンジンにひっかかるかもしれません。
    • qp または quoted-printable: ヨーロッパの言語に適しています。 (base64 よりコンパクトです) non-ASCII テキストには推奨できません。 (base64 のほうがコンパクトになります )
    • none: エンコードしません。英語のみ (ASCII) で使用できます。 non-ASCII 文字を含んでいるメールは配信されないでしょう。
  • ticket_subject_template: (0.11 以降) 通知メールの件名 (Subject) に使用する  Genshi テキストテンプレート

smtp_fromsmtp_replyto の一方 (もしくは両方) が 必ず 設定されていなければなりません。設定されていない場合、 Trac は通知メールの送信を拒否します。

以下のオプションは SMTP でのメッセージ伝送方法を指定するために使用します。

  • smtp_server: 通知メッセージに使用されるSMTPサーバ。
  • smtp_port: (0.9 以降) SMTP サーバが使用するポート番号。
  • smtp_user: (0.9 以降) SMTP認証アカウントのユーザID。
  • smtp_password: (0.9 以降) SMTP認証アカウントのパスワード。
  • use_tls: (0.10 以降) SMTP サーバ経由で通知メールを送信するときに、GMail などの  TLS を使用するかどうかを切り替えます。

コンフィグレーションの例 (SMTP)

[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

メールの件名をカスタマイズする

ticket_subject_template オプションを使用することでメールの件名をカスタマイズできます。このオプションには  Genshi テキストテンプレート を含めることができます。デフォルト値は以下の通りです:

$prefix #$ticket.id: $summary

テンプレートでは以下の変数が使用可能です:

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

Email サンプル

#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/>

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

以下のような設定を使用します

[notification]
smtp_enabled = true
use_tls = true
mime_encoding = base64
smtp_server = smtp.gmail.com
smtp_port = 587
smtp_user = user
smtp_password = password

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

代わりに smtp_port = 25 を使用することもできます。 (訳注: おそらく gmail.com 宛のメールしか届きません)
しかし smtp_port = 465 は使用できません。これは動作しないだけでなく、通知メール送信がデッドロックします。ポート番号 465 は SMTPS プロトコル (訳注: SSMTP とも言います) に使用されますが、 Trac はこれをサポートしていません。詳しくは  #7107 を参照してください。

自分が変更した通知をフィルタする

Gmail では、以下のフィルタを使用できます:

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

通知メールを削除する場合などに使用してください。

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

最良の方法は conf/trac.ini の "always_notify_updater" を false に設定することです。 しかし、この方法では自分が担当者 (owner) になっていたり、報告 (reporter) したチケットへのコメントが取得できなくなります。

プラグインを追加することで解決するかもしれません:  http://trac-hacks.org/wiki/NeverNotifyUpdaterPlugin

トラブルシューティング

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

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

Permission denied エラー

たいていのエラーメッセージ:

  ...
  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 の  MailingList のアーカイブを参照して下さい。

関係のあるメーリングリストのスレッド:

Suspected spam エラー

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 でエンコードされ、さらに BASE64quoted-printable で 7bit-safe な形式にエンコードされます。 ISO-2022-JP エンコーディングでない日本語のメールは Spam 検出エンジンに誤判定されやすくなる傾向があるようです。 また、 MUA がこれらのエンコードに対応していない場合、たとえ受信できたとしても文字化けしたり表示できない可能性があります。)


See also: TracTickets, TracIni, TracGuide