メール取込

概要

メール取込はサーバーで受信したメールを SHIRASAGIのページ として公開する機能です。
SHIRASAGI側のメール取込インターフェースとして、2つの方法を実装しています。

  1. 標準入力からメール(EML形式の文字列)を読み込んで、ページとして保存する
  2. 公開画面にメール(EML形式の文字列)をPOSTして、ページとして保存する

取り込み時に緊急災害レイアウトの切り替えも可能です。

メール取込フォルダー

受信したメールをページとして保存し、格納するフォルダーです。
取り込まれたページは、このフォルダー配下に保存されます。
メールの取り込みを行う場合はあらかじめ管理画面から作成して、以下の項目を設定する必要があります。

基本情報

基本情報は通常のフォルダー設定と変わりません。

メール取込設定

緊急災害レイアウト設定

取り込み時、緊急災害レイアウトの切り替えを行う場合に設定します。

メール取込ページ

取り込んだメールは「メール取込ページ」という種類のページとして保存されます。
メールの本文がページの本文に設定され、公開状態で保存されます。
緊急情報表示用の設定があります。

緊急情報表示

緊急情報パーツ

メール取込ページ一覧をリスト表示することができるパーツです。
緊急情報表示開始〜終了内にあるページ一覧を表示します。
トップページなどに配置して、一覧を表示する運用を想定していますが、パーツの動的表示を有効にすることで、即時更新とすることができます。
パーツを動的にする方法は、他のパーツと同様に管理画面を編集し、「動的表示」を有効に設定ください。

メール取込タスク

以下の rake コマンドを実行すると標準入力にメールを受け付けて、ページ保存を行います。

# bundle exec rake mail_page:import site=www

※引数 site は対象のサイトのホスト名

入力は EML形式の文字列 に対応しています。
Content-Type は一般的なメーラーで作成した UTF-8 と ISO-2022-JP の動作を確認しています。

動作確認

以下はメール取込タスクの動作確認の例です。
(サーバー側のメール受信およびSHIRASAGIへの転送設定の動作確認ではありません)

1. SHIRASAGI をインストールしてサンプルサイトを立ち上げます。

2. 管理画面からメール取込フォルダーを作成します。
送信者メールアドレスに sample@example.jp を設定します。
宛先メールアドレスに sample@example.jp を設定します。

3. 以下のコマンドで、テスト用のメールを取り込みます。

# cd /var/www/shirasagi
# cat spec/fixtures/mail_page/UTF-8.eml | bundle exec rake mail_page:import site=www

4. 成功するとメール取込フォルダー配下にページが作成されます。
サイト設定のジョブにも取り込んだログが残ります。

POST取込

rake コマンドの他に、メール取込フォルダーの公開画面にメール本文をPOSTして、ページとして保存することができます。

# cat mail.eml | curl -H 'X-SS-API-Key: XXXX' -X POST -F data=@- http://$domain:$port/$node/mail

POST先はメール取込フォルダーの公開側URLになります。

ヘッダー X-SS-API-Key に連携用APIトークンを設定する必要があります。

APIトークン

公開画面にPOSTする際に、APIトークンをヘッダーに付与する必要があります。
以下の手順により、APIトークンを発行してください。

  1. サイト管理者で管理画面にログインしサイト設定へ移動します。
  2. サイト設定から連携用APIトークンに移動します。
  3. 新規作成をクリックして、名前と利用ユーザーを設定して保存します。
  4. 作成した連携設定のAPIトークンを控えます。

※ 利用ユーザーはメール連携を実行するユーザーとなり、メール取込の権限が必要です。

サーバー側メール取り込み設定

サーバーでメールを受信し、SHIRASAGIのタスクに標準入力として引き渡す設定が必要になります。
以下、取り込みメールのアドレスは sample@example.jp として説明します。

1.メールサーバを設定します。
外部より sample@example.jp のメールが受信できるように設定します。

2.取り込みコマンドの実行ユーザを作成します。
sudoがNOPASSWDで利用できるユーザを作成します。以下、mailinfo ユーザとします。

# visudo
#Defaults   !visiblepw
Defaults visiblepw

# Mail Hook
Defaults:mailinfo !requiretty
%mailinfo   ALL=(ALL)   NOPASSWD: ALL

3.受信メールをSHIRASAGIに反映する為のシェルスクリプトを準備します。

# mkdir /var/www/mailhook/shirasagi -p
# cd /var/www/mailhook/shirasagi
# vi hook.sh
"| sudo /var/www/mailhook/shirasagi/script.sh"
# chown mailinfo. hook.sh
# vi script.sh

メール取込インターフェースによって3.1または3.2のいずれかのスクリプトを用意します。

3.1 標準入力からメール取込する場合のスクリプト

#!/bin/bash

. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash
umask 022

data=$( cat - )
data=$( echo "$data" | sed "s/$/\r/g" )

cd /var/www/shirasagi
echo "$data" | bundle exec rake mail_page:import site=www

※ rvmを使用している場合はrubyの実行PATHを通してください。

3.2 公開画面にメール本文をPOSTする場合のスクリプト

#!/bin/bash

umask 022

data=$( cat - )
data=$( echo "$data" | sed "s/$/\r/g" )

echo "$data" | curl -H 'X-SS-API-Key: XXXX' -X POST -F data=@- http://$domain:$port/$node/mail

※ XXXX, $domain, $portおよび$nodeは適時読み替えてください。

3.3 スクリプトに実行権限を付与

# chmod 777 script.sh

4.メール受信にて取り込みスクリプトを動作させるようにエイリアスを設定します。

# vi /etc/aliases
# Shirasagi Mail Hook
sample: mailinfo, :include:/var/www/mailhook/shirasagi/hook.sh
# newaliases