🔔

Tracでチケットメール送信の有無を指定する

チケット更新のタイミングでメールを飛ばすようにしたら、飛び交うメールの量が劇的に増えて、メールボックスがすぐ一杯になってしまうことが出てきた。リリースが近いので、仕方ない部分もあるんだけど。

で、こちら を参考にして、チケットを登録したり更新したりするときに、チェックボックスで送信するかどうか指定できるようにした。

trac/ticket/web_ui.py

 def _do_create(self, req, ticket):
 (略)

 # Notify

         try:
-            tn = TicketNotifyEmail(self.env)
-            tn.notify(ticket, newticket=True)
+            if 'sendmail' in req.args:
+                tn = TicketNotifyEmail(self.env)
+                tn.notify(ticket, newticket=True)
         except Exception, e:
 (略)

 def _do_save(self, req, ticket, action):
 (略)
         try:
-            tn = TicketNotifyEmail(self.env)
-            tn.notify(ticket, newticket=False, modtime=now)
+            if 'sendmail' in req.args:
+                tn = TicketNotifyEmail(self.env)
+                tn.notify(ticket, newticket=False, modtime=now)
         except Exception, e:
 (略)

あとは、チケットの編集画面のテンプレートにチェックボックスを付ける。

trac/ticket/templates/ticket.html

         </td>
       </py:for>
     </tr>
   </table>

 </fieldset>

+      <p class="mailcheckbox">
+        <label>
+          <input type="checkbox" name="sendmail" value="1" checked="checked" />
+          この登録/変更をメールで通知します。(メール送信設定されているTracのみ有効)
+        </label>
+      </p>

 <!--! Workflow support -->
 <py:if test="ticket.id"> <!--! do not display the actions for New tickets -->
 <fieldset id="action">
 <legend>${_('Action')}</legend>
 <div py:for="key, label, controls, hints in action_controls">

こんな感じでOK。

あとは、メールを送信する際の運用ルールを決めてやればうまく回ると思う。チケットを作るときとステータスを更新するときは必ずメール通知ONにする、とかね。