« [#Redmine] 立っているものはJenkinsでも使え! - ALMiniumで外道Jenkins - | トップページ | [#Agile] 自己組織化あるいは自律的組織 #UAS3 »

[#Redmine] Redmineによるメール対応管理(その2) - 検証編 -

RxTstudyの記事にまとめた様にでRedmineのメール処理を教えてもらったついでに、少し試してみました。

メールの取得法

いつもお世話になっているRedmine.jpの「メールによるチケットの登録」によると、rdm-mailhandler.rbによる方法と、rakeによる方法があって、それぞれ以下のような特長があります。

(1)rdm-mailhandler.rbによる方法

メール受信のためのAPIを有効にした後、メール処理専用のAPIキーを用いてRedmineに登録します。これは個人のAPIキーではなく、Redmine全体で共通のものになります。

通常、メールサーバ上の/etc/aliasesに登録するもので、メール受信時に標準入力を即時処理します。APIでアクセスしますので、rdm-mailhandler.rbを登録したメールサーバとRedmineサーバは異なって良い様です。

/etc/aliasesを修正するには管理者権限が必要ですが、UNIX系の環境なら、ホームディレクトリの.fowardでも同じ様に、パイプ処理をしつつ残したり、別のアドレスに転送する事も可能です(UNIXの部屋 コマンド検索: ~/.forward)。

(2)rakeよる方法

Redmineサーバ上で動作します。入力はIMAPによるメールの読み込みと標準入力による方法があります。IMAPなのでメールサーバの管理者権限は不要で、メーラーと同じ様に一定時間ごとにメールを取り込み、フォルダの振り分けることもできます。もちろんメールサーバはRedmineサーバと異なって構いません。

標準入力の場合は、メールの内容をリダイレクトできれば、そのデータがどのように作られていても構いませんので、メーラーからコピーして登録する事も可能です(これはrdm-mailhandler.rbも同じです)。

RubyならIMAPを使ってGMailにアクセスするにあるように、rubyで簡単にメールサーバにアクセスできますので(サンプルの半分は認証用のコードです)、前処理をする目的で、標準入力を使っても良いかもしれません。

メールの前処理

@akipiiさんのまとめられた「メールからRedmineのチケットを自動登録する時の注意点」には、スFrom、To、CCなどヘッダー情報の保存、テータスの変更、という2つがありました。

From、To、CCなどヘッダー情報の保存

これは、上記の標準入力の前処理として、メールの初めから改行のみの行まで(つまりメールヘッダー)のうち、必要なデータを残しておいて本文にコピーすると良いでしょう。

ステータスの変更

もともと、メールでステータスを変更できますので、「フィールド名: 値」の行を本文に追加します。許されているフィールドの設定行は成功しても失敗しても消えますので注意してください。

しかし、実際にやってみると、ステータスを「新規」に変更仕様としてもうまくいきませんでした。どうも値が日本語の場合はうまくいかないか、私のスクリプトが悪かったようで、新たにreopenというステータスを作り、ワークフローを追加すると、「status: reopen」と言う行を追加する事で、ステータスが変更できました。

スクリプト

/etc/aliasesに追加する場合、前処理を|(パイプ)でつなげて書く事ができませんでした。そこで、ラッパーにして、前処理と本来書くべきrdm-mailhandler.rbの処理をパイプでつないだシェルスクリプトを登録してみました。ざっくりしたものですが、20行程度でした。

日本語のステータスの問題は残っていますが、課題はひとまずこなせました(タイムラグができますが、@akipiiさんが書かれている様にrakeのオプションで設定すると良いかもしれません)。

rakeの検証結果(2013年7月12日追記)

rakeの標準入力で確認したところ、オプションでステータスを変更する事はできませんでした。本文中に「status: 新規」と記入する方法で、ステータスを変更できました。

試しに/etc/aliasesにrakeを設定してみたところ、project意外の多くのオプションでエラーになりました。ただし、allow_overrideが指定できないものの、ステータスの変更はできました。rakeのトラブル報告もありますので、何らかの不具合があるのかもしれません(追記終了

まとめ

もともとCRMのツールではないですが、多機能が特長のRedmineだけあって、ちょっと工夫するだけで色々使えそうです。真剣に作り込むなら色々と考えないといけない事が出てくると思いますが、目先のちょっとした利用なら、かなり使い出のあるツールだと思います。


« [#Redmine] 立っているものはJenkinsでも使え! - ALMiniumで外道Jenkins - | トップページ | [#Agile] 自己組織化あるいは自律的組織 #UAS3 »

Redmine」カテゴリの記事

コメント

阪井さん、こんにちは。

ユーザさんのリクエストを受けて、わたしも /etc/aliases 方式で検証中です。

ただ、そのままではRedmineに渡せないので、パイプの前処理を取り入れています。
Subject/To/Ccを本文にも追加しておく、というのは参考にさせていただきます!

あと、本文の文字列がカスタムフィールドにマッチする場合、ちゃんとカスタムフィールドに反映されるのですが、本文からは削除されてしまいます。これもちょっと悩みどころです。

わたしの場合は、新規メールだけを取り込みたい...という状況なので、メール本文を添付ファイルとして登録したほうがいいのかな...なんてことも思っています。

コメントありがとうございます。

添付にするとカッコいいですね。

そこまでパワーがなかったので、こんなことをしました。

・ヘッダーと本文は空白業で区切られていることを利用して、本文を判定
・本文中の半角":"を全角":"に置き換え

本来は、全てのキーワードを認識すべきでしょうけど、
とりあえずこんな感じで、、

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« [#Redmine] 立っているものはJenkinsでも使え! - ALMiniumで外道Jenkins - | トップページ | [#Agile] 自己組織化あるいは自律的組織 #UAS3 »