Alfresco メール取り込み設定ガイド
getmail + postfix + SpamAssassin + Alfresco Community 26.1(Ansible インストール)/ Ubuntu 24.04
1. システム構成の概要
メールサーバーから自動受信したメールをSpamAssassinでフィルタリングし、Alfrescoに取り込む構成です。
| コンポーネント | 役割 | 備考 |
|---|---|---|
| getmail 6.x | POP3S でメール取得 | cron で5分毎に実行 |
| SpamAssassin 4.0 | スパム判定・件名に ***SPAM*** 追加 | スコア10以上は破棄 |
| postfix 3.8 | Alfresco への配送・遅延制御 | 5秒/通の遅延設定 |
| Alfresco 26.1 | メール格納・振り分け | Community版 Ansible インストール |
2. Alfresco 事前設定(alfresco-global.properties)
Alfresco のメール受信機能を有効にするため、設定ファイルにメール関連プロパティを追加します。
① サンプルファイルから設定を確認
サンプルファイルからメール関連の設定を参照します。
サンプルファイル内のメール関連の記述(抜粋):
② alfresco-global.properties に追記
上記サンプルを参考に、実際の設定ファイルへ追記します。
ファイル末尾の ### Begin - Custom user properties - ANSIBLE MANAGED BLOCK セクションに以下を追記します。
email.server.port=25 はpostfixなどのMTAが使用しているため、1025など別のポートに変更してください。postfix の relayhost に指定するポートと一致させます。
email.inbound.unknownUser=admin は、送信者がAlfrescoのユーザーとして登録されていない場合に使用するユーザーです。後述のルール設定でフォルダへの書き込み権限が必要なため、管理者権限を持つユーザーを指定します。
③ Alfrescoサービスを再起動
3. Postfix のインストールと設定
Ubuntu 24.04 に postfix をインストールし、Alfresco への遅延配送を設定します。
インストール
/etc/postfix/main.cf の設定
4. getmail のインストールと設定
インストール
~/.getmail/getmailrc の設定
%(sender) を引数として渡すことで、SpamAssassin処理後も送信者アドレスが正しくpostfixに渡されます。
cron 設定(5分毎)
5. SpamAssassin の導入
インストール
/etc/default/spamd の設定
Ubuntu 24.04 では /etc/default/spamd の OPTIONS に --siteconfigpath を追加しないと、local.cf のブラックリスト設定が spamd に読み込まれません。
spamassassin -t ではブラックリストが有効でも、spamc 経由では無効になります。必ず設定してください。
/etc/spamassassin/local.cf の設定
設定反映・動作確認
| スコア | 対応 |
|---|---|
| 5.0 以上 | スパム判定(件名に ***SPAM*** 追加) |
| 7.0 以上 | 破棄(Alfresco に配送しない) |
| 5.0 未満 | 正常メール(Alfresco へ配送) |
spamc-wrapper.sh の SCORE_INT -ge 7 で設定しています。環境に合わせて調整してください。
6. spamc-wrapper スクリプト
getmail から呼び出され、SpamAssassin でフィルタリング後に postfix 経由で Alfresco へ配送します。
content_filter = spamassassin を設定するとメールループが発生します。必ずコメントアウトし、getmailrc からラッパースクリプトを直接呼び出す方式を採用してください。
破棄条件
| 条件 | 内容 |
|---|---|
| MAILER-DAEMON | バウンスメールを破棄 |
| スコア 7 以上 | ローカルSpamAssassinのスコアが7以上 |
| X-Spam-Flag: YES | ローカル・メールサーバー側問わずスパムフラグあり |
| 件名に SPAM 含む | Subject・X-Spam-Prev-Subject に SPAM が含まれる |
/tmp/spamc-wrapper.log に DISCARDED(score)・DISCARDED(flag-yes)・DISCARDED(subject) として記録されます。定期的に確認して誤判定がないか確認してください。
7. Alfresco スクリプト群
メール格納フォルダのルールに登録するJavaScriptスクリプトです。
リポジトリ > Data Dictionary > Scripts に登録し、メール格納フォルダのルールに設定します。
sortAdd.js のみ各振り分け先フォルダのルールに設定します。
| スクリプト | 役割 | 実行設定 |
|---|---|---|
| mailRename.js | 件名に送信日時を付加・URLエンコード文字を全角に置換 | 通常実行 |
| mailFolderCreate.js | メール本体受信時にフォルダを作成・アスペクト付与 | 通常実行 |
| mailFolderMove.js | メールをフォルダへ移動 | バックグラウンド実行 |
| mailSort.js | 送信者アドレスで振り分け・スパムは「spam」フォルダへ | 通常実行 |
| mailSortAdd.js | 手動振り分け時に送信者アドレスを登録 | 各振り分けフォルダのルール |
mailRename.js — ファイル名に送信日時を追加
同名メールの重複を防ぐため送信日時を付加し、URLエンコードされた記号を全角に置換します。
拡張子を判定して正しいMIMEタイプを設定します。PDF・Excel・Word等の添付ファイルがHTMLと誤判定されるのを防ぎます。
text/html に誤設定される問題があります。拡張子を先にチェックして正しいMIMEタイプを設定することで解決します。
| 拡張子 | 設定されるMIMEタイプ |
|---|---|
| application/pdf | |
| xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
| xls | application/vnd.ms-excel |
| docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
| doc | application/msword |
| pptx | application/vnd.openxmlformats-officedocument.presentationml.presentation |
| ppt | application/vnd.ms-powerpoint |
| csv | text/csv |
| zip | application/zip |
| 上記以外 | HTMLタグ数で判定(5回以上でtext/html) |
mailFolderCreate.js — メールフォルダ作成
メール本体(送信者情報あり)受信時にフォルダを作成し、発行日・送信者アスペクトを付与します。次のメールまでフォルダのノードを cs:address に一時保存します。
mailFolderMove.js — メールをフォルダへ移動(バックグラウンド実行)
一時保存されたフォルダのノードへメールを移動します。発行日アスペクトを付与して送信者・送信日時も引き継ぎます。
mailSort.js(振り分けスクリプト v1.4)
件名に SPAM を含むメールは最優先で spam フォルダへ、自組織ドメインのメールは別サイトの提出箱フォルダへ直接移動します。それ以外は各振り分けフォルダの cs:address に登録されたアドレスと照合して移動します。
| 優先順位 | 条件 | 移動先 |
|---|---|---|
| ① | 件名に SPAM を含む | spam フォルダ(sa-learn学習用) |
| ② | 送信元が自組織ドメイン(@example.com) | 別サイトの提出箱フォルダへ直接移動 |
| ③ | cs:address に登録済みのアドレス | 各振り分けフォルダ |
| - | いずれにも該当しない | 移動なし(mail フォルダに残る) |
getAdd('フォルダ名') を追加・削除して用途に合わせてカスタマイズしてください。
各振り分けフォルダの
cs:address プロパティは最大50,000文字(d:text型)です。特に「その他」フォルダは多数のアドレスが蓄積されやすく、上限に達するとルール実行時にエラーが大量ループし、サーバー全体の負荷が急増する原因になります。定期的にアドレスリストを整理することを推奨します。
mailSortAdd.js(アドレス登録スクリプト)
8. カスタムモデルの設定
モデルマネージャーで作成したカスタムモデルの構成です。
| アスペクト名 | プロパティ | 型 | 用途 |
|---|---|---|---|
| cs:published | cs:publishdate | d:date | 発行日(ソート用) |
| cs:publisher | d:text | 発行者 | |
| cs:maillist | cs:address | d:text(maxLength=50000) | 振り分けアドレスリスト |
d:text 型・maxLength=50000 で設定してください。上限の50,000文字を超えるとルール実行時にエラーが大量ループし、サーバー全体の負荷が急増します。定期的に不要なアドレスを整理してください。
モデルマネージャーでの設定
| 項目 | 設定値 |
|---|---|
| 名前 | address |
| タイトル | アドレスリスト |
| 型 | d:text |
| 必須 | いいえ |
| 複数値 | いいえ |
| 制約(LENGTH)maxLength | 50000 |
d:text + maxLength=50000 の場合、1件あたり平均30文字のアドレスで約1500件以上登録可能です。
モデルXMLでの設定(直接編集する場合)
振り分け先フォルダへのアスペクト設定
各振り分け先フォルダに cs:maillist アスペクトを適用する必要があります。適用されていない場合、cs:address プロパティが利用できず振り分けが機能しません。
cs:maillist アスペクトを適用する必要があります。適用されていない場合、cs:address プロパティが利用できず振り分けが機能しません。
cs:maillist(メール一覧) を選択し、「追加」 をクリックします。
cs:address(アドレスリスト)フィールドが表示されます。手動振り分け時は mailSortAdd.js が自動でアドレスを追記します。
/alfresco/api/-default-/public/search/versions/1/search)でノードを検索し、一括除去します。
10. spamフォルダの定期学習・自動整理
件名に ***SPAM*** が付いたメールを専用フォルダへ振り分け、定期的に SpamAssassin のベイジアンフィルタへ学習させたうえで、学習済みメールをゴミ箱経由で自動整理する仕組みです。cs:address の容量超過(上限50,000文字)を未然に防ぐ目的も兼ねています。
spamフォルダの準備
- Shared/mail 配下に
spamフォルダを作成 - フォルダに
cs:maillistアスペクトを付与(cs:address プロパティが使えるようになる)
mailSort.js — SPAM件名メールの振り分け先を変更
件名に SPAM を含むメールは、他の振り分け条件より先に判定し、spam フォルダへ直接移動します。
spamc-wrapper.sh が付与する ***SPAM*** 表記、または送信元メールサーバー側のSpamAssassinが付与した表記の両方を拾えます。
clearAndDeleteSpam.js — 学習後のクリーンアップ
spamフォルダの cs:address をクリアし、配下のメールフォルダを ゴミ箱(アーカイブ)経由で削除します。remove()はAlfrescoの標準アーカイブストアへ移動するだけのため、誤判定があった場合は一定期間内であれば復元可能です。
spam-learn-and-clear.sh — 学習・整理を一括実行するシェルスクリプト
spamフォルダ内のメール本体をエクスポートし、sa-learn --spam で学習させたうえで、上記スクリプトを呼び出してクリーンアップします。
cron登録
sudo crontab -eとcrontab -eは別ファイルとして管理されるため、既存のgetmail設定と混在させる場合は同じ実行ユーザーに揃えるのが安全です。
運用上の注意:大量削除によるサーバー負荷
spamフォルダのノード削除処理は、Alfresco内部でレンディション再生成・検索インデックス更新イベントを発行します。蓄積件数が多い状態で一括削除を実行すると、検索サービス(Solr)のメモリ使用量が一時的に急増し、サーバー全体の応答が著しく低下することがあります。
| 対策 | 内容 |
|---|---|
| 実行時間帯 | 業務影響の少ない深夜帯にcronを設定する |
| 事前テスト | spamメールが少量たまった状態で一度手動実行し、所要時間・負荷を確認してから自動化する |
| 異常時の対処 | 応答が著しく遅い場合は検索サービスを再起動するとメモリが解放される場合がある |
11. トラブルシューティング
添付ファイルのMIMEタイプ誤設定(PDF・Excel・Wordが表示されない)
- 原因:メール取り込み時に添付ファイルのMIMEタイプが
text/htmlに誤設定される - 新規メール:修正版
mailRename.jsで自動的に正しいMIMEタイプが設定される - 既存ファイル:以下の
fixMime.jsをData Dictionary/Scriptsに登録してREST API経由で実行
fixMime.js の実行方法(REST API経由)
メールループ(too many hops)
content_filter = spamassassin を設定するとメールループが発生します。必ずコメントアウトしてください。
振り分けアドレス上限超過
- 原因:
cs:address(d:text型・最大50,000文字)の容量超過 - 症状:ルール実行のたびに
IntegrityException: String length is not in range [0; 50,000]エラーが大量ループし、サーバー全体の応答が著しく低下する - 対処:対象フォルダの
cs:addressを REST API でnullにクリアし、必要なアドレスのみ再登録する - 予防:spamフォルダの定期学習・自動整理(10章参照)を設定してアドレスを定期的に整理する
ログ確認コマンド
設定確認チェックリスト
- postfix の
content_filterがコメントアウトされている - spamc-wrapper.sh に実行権限がある(
chmod +x) - getmailrc の destination が spamc-wrapper.sh を参照している
- SpamAssassin(spamd)が起動している
- 振り分けフォルダに
cs:maillistアスペクトが適用されている - share-config-custom.xml の XML 構文エラーがない(
xmllint --nooutで確認)