メール取込
概要
メール取込はサーバーで受信したメールを SHIRASAGIのページ として公開する機能です。
SHIRASAGI側のメール取込インターフェースとして、2つの方法を実装しています。
取り込み時に緊急災害レイアウトの切り替えも可能です。
メール取込フォルダー
受信したメールをページとして保存し、格納するフォルダーです。
取り込まれたページは、このフォルダー配下に保存されます。
メールの取り込みを行う場合はあらかじめ管理画面から作成して、以下の項目を設定する必要があります。
基本情報
基本情報は通常のフォルダー設定と変わりません。
- ページレイアウト
- 取り込んだページのレイアウトとして設定されます。
メール取込設定
- 送信者メールアドレス
- 受信したメールの From 条件を設定します。
- メールアドレスもしくはホスト名を改行区切りで入力します。
- 入力した値とメールの From ヘッダが一致した時のみ、取り込んだメールをページとして保存します。
- 宛先メールアドレス
- 受信したメールの To 条件を設定します。
- メールアドレスもしくはホスト名を改行区切りで入力します。
- 入力した値とメールの To ヘッダが一致した時のみ、取り込んだメールをページとして保存します。
- 緊急情報表示期間
- メール取込/緊急情報 パーツ(後述)に表示する期間を設定します。
緊急災害レイアウト設定
取り込み時、緊急災害レイアウトの切り替えを行う場合に設定します。
- 切り替え
- 有効/無効を設定します。
- フォルダー
- 切り替えの対象となる 緊急災害レイアウトフォルダー を設定します。
メール取込ページ
取り込んだメールは「メール取込ページ」という種類のページとして保存されます。
メールの本文がページの本文に設定され、公開状態で保存されます。
緊急情報表示用の設定があります。
緊急情報表示
- 緊急情報表示開始日時
- 取り込んだ日時が保存されます。
- 緊急情報表示終了日時
- 取り込んだ日時から、フォルダーに設定した表示期間分を足した日時を保存します。
- 例えばフォルダーの緊急情報表示期間を2日に設定した場合、取り込んだ日時から2日後が保存されます。
緊急情報パーツ
メール取込ページ一覧をリスト表示することができるパーツです。
緊急情報表示開始〜終了内にあるページ一覧を表示します。
トップページなどに配置して、一覧を表示する運用を想定していますが、パーツの動的表示を有効にすることで、即時更新とすることができます。
パーツを動的にする方法は、他のパーツと同様に管理画面を編集し、「動的表示」を有効に設定ください。
メール取込タスク
以下の 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になります。
$domain
と$port
の部分は、設定するサイトに応じて適時読み替えてください。$node
をメール取込フォルダーのフォルダー名に読み替えてください。
ヘッダー X-SS-API-Key
に連携用APIトークンを設定する必要があります。
APIトークン
公開画面にPOSTする際に、APIトークンをヘッダーに付与する必要があります。
以下の手順により、APIトークンを発行してください。
- サイト管理者で管理画面にログインしサイト設定へ移動します。
- サイト設定から連携用APIトークンに移動します。
- 新規作成をクリックして、名前と利用ユーザーを設定して保存します。
- 作成した連携設定の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