いつかエンジニアになりたい

Nothing is too late to start

Redmine2.3のGmailを利用したメールでのチケット登録方法

Redmineのメールでのチケット登録でつまったので、その時のメモ。

メールでのRedmineのチケット登録方法

Redmineのメールでのチケット登録方法は、大きく分けて以下の3つがありますが、 (1)、(3) は設定するのが面倒だったので、メールアドレスを新規で作るだけの 一番簡単そうな (2) の方法を実施する。

(1) メールサーバからメールを転送:

- 利点: メールサーバがRedmineとは異なるサーバでもよい, メールが即座に処理される, 高速(アプリケーションのリロードが不要)
- 欠点: needs some configuration on your mail transfer agent (eg. Postfix, Sendmail…)

(2) IMAPサーバからの受信:

- 利点: 設定が容易、MTAの設定が不要, メールサーバがRedmineとは異なるサーバでもよい
- 欠点: メールの処理が即座には行われない (定期的にメールの取得を行うためのcronのジョブを追加する必要がある)

(3) 標準入力からのメール読み込み:

- 利点: テスト用途に最適
- 欠点: 遅い(メールが到着するごとにRedmineのアプリケーションのリロードが行われる), MTA上での設定が必要

参考:http://redmine.jp/guide/RedmineReceivingEmails/

Gamilを用いたチケットの登録、通知の設定手順

設定方法としては、IMAPサーバに送られたメールをチェックして、更新があるならメール通知するだけの以下の図の感じ。 f:id:berukann:20131006171009p:plain

設定環境は以下のようになります。

Redmine構築環境
 ・OS:CentOS 6.4
 ・Redmine:2.3.3
Redmineユーザ用アカウント:sender@gmail.com
Redmine用メールアカウント:recever@gmail.com
Redmine 構築手順

Redmine 構築方法は良いサイトがいろいろとあるので割愛。 注意点としては、Ruby 2系だとPassengerがうまく動作しないので、Ruby 1.9.3を使用する。

Gmailアカウント作成し、IMAP機能を有効にする

redmineチケット登録用のIMAPが利用可能なメールアドレスを取得。

色々とあるとは思いますが、私はGmailアカウントを新規に作成しました。

※ デフォルトだとIMAP機能は無効なので、[設定] → [メール転送とPOP/IMAP] → [IMAPアクセス] → [IMAPを有効にする] よりIMAP機能を有効にする。

Gmailアカウントからのチケット登録設定

Redmine登録ユーザのメールアドレス(sender@gmail.com)より、Redmine用メールアドレス(receiver@gmail.com)にチケット登録メールを送る。メールでのチケット登録でも、プロジェクトだけでなく、担当者や優先度など様々な項目をきめれるので、詳細については次のサイトを参照

メールサンプル例:
 宛先:receiver@gmail.com
 件名:チケット登録テスト
 本文:
  チケット登録テストメール。
  start date: YYYY-MM-DD
  assigned to: test

メール送信後、Redmineサーバより以下のコマンドを実行し、Redmineを更新する。

rake -f /var/www/html/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" port=993 ssl=1 host=imap.gmail.com username=receiver@gmail.com password=****** project=sample

Rakefileの場所は、自身がインストールしたRedmineRakefileを指定。 ※「username」と「password」は、Redmine用のメールアドレスを指定。 ※「project」は更新するプロジェクトを指定しているので、省略可能。

毎回、redmineに入って、上記のコマンドを実行するのは現実的ではないので、 以下の用に設定ファイルを変更し、cronで定期的に実行。(例:一分毎にコマンドを実行)crontabの設定ファイルにPATHを追加しても、「/usr/bin/env ruby そのようなファイルやディレクトリはありません」というふうに怒られるので、コマンド実行前に「source /root/.bashrc」するシェルスクリプトを作成し、それをcronに登録しました。(20131006 追記)

  • 修正前:
% vim /etc/crontab
 SHELL=/bin/bash
 PATH=/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
 MAILTO=root
 HOME=/
% crontab -e
 */1 * * * * /usr/local/bin/rake -f /var/www/html/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" port=993 ssl=1 host=imap.gmail.com username=receiver@gmail.com password=****** project=sample
  • 修正後:
% vim CronFile/redmine_mail.sh
#!/bin/bash
 source /root/.bashrc
 rake -f /var/www/html/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" port=993 ssl=1 host=imap.gmail.com username=receiver@gmail.com password=****** project=sample
% crontab -e
 */1 * * * * /root/CronFile/redmine_mail.sh
% service crond restart
Gmailアカウントからの通知設定

以下の用に設定することで、チケットが登録、更新された際にRedmineGmailアカウントからRedmineユーザに通知がいく。

  • Redmineの[管理] → [設定] → [メール通知] → [送信元メールアドレス] → receiver@gmail.com

  • Redmineの設定ファイルを以下のように変更

% vim /root/redmine/config/configuration.yml
 production:
     email_delivery:
       delivery_method: :smtp
     smtp_settings:
       enable_starttls_auto: true
       address: "smtp.gmail.com"
       port: 587
       domain: "smtp.gmail.com"
       authentication: :plain
       user_name: "receive@gmail.com"
       password: "******"

これで、通知がきたメールに返信するだけで、チケットが更新されるので、便利。

以上