Postfix 拒否ログとDMARC集計を統合し、WordPress記事として自動投稿する仕組みがついに完成しました。
カテゴリ・タグ・アイキャッチまで全自動。
さらに「過去7日間にDMARC失敗送信元がなかった場合」は「データなし」と出力し、空白記事を防止します。
1. はじめに
PostfixやDMARCのログは、メール運用の健康診断に欠かせない情報です。 しかし「見る人」が限られてしまう。 これをWordPressに自動投稿できれば、運用履歴が可視化され、 SEO・監査・チーム共有にも役立ちます。
2. 全体構成(アーキテクチャ)
- Postfix → MariaDB(
postfix_rejects) - DMARCレポート(IMAP→XML→MariaDB
reports) - WordPress MUプラグイン(
postfix-log-report.php) - 週次cronでWP-CLI実行 → 記事自動投稿
構成図イメージ:
Postfix ─▶ MariaDB(拒否・DMARC集計) │ ▼ MUプラグイン ─▶ WordPress投稿(カテゴリ/タグ/アイキャッチ付) ▲ │ cron(週次)
3. MUプラグイン v1.6.3 の特徴
- タグ100%反映(2段階処理+UIキャッシュ更新)
- 本文ハッシュで重複投稿防止
- アイキャッチ自動登録(
postfix-reject-ogp.png) - Postfix+DMARC実データ表示(7日間集計)
- データが無い週は「過去7日間に失敗なし」メッセージを表示
4. 実データ生成部分(Postfix/DMARC)
Postfix 拒否ログ(過去7日間)
SELECT reason, COUNT(*) AS cnt
FROM postfix_rejects
WHERE log_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY reason
ORDER BY cnt DESC
LIMIT 10; DMARC 失敗送信元(過去7日間)
SELECT source_ip, COUNT(*) AS cnt
FROM reports
WHERE (dkim_passed=0 OR spf_passed=0) AND end_date >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY source_ip
ORDER BY cnt DESC
LIMIT 10; 7日以内に失敗がなければ次の文が自動で出力されます:
<p><em>過去7日間にDMARC失敗送信元はありませんでした。</em></p> 5. WordPressとの連携
- カテゴリ:「Postfix」(自動作成される)
- タグ:「Postfix」「DMARC」「ログ集計」
- 投稿者:「masaやん」
- アイキャッチ:
postfix-reject-ogp.png - DB接続:
dmarc_reports(Postfix/DMARC用)+ WordPress本体DB
6. 週次cron設定(自動実行)
sudo crontab -u apache -e # 毎週月曜 7時に実行(週次レポート)
0 7 * * MON /usr/local/bin/wp-a --path=/var/www/html/wpm postfix-log report \
--tags="Postfix,DMARC,ログ集計" >> /var/log/wp-postfix-report.log 2>&1
成功時ログ例:
[postfix-log-report v1.6.3] [DONE] created post_id=1311 Success: Created post_id=1311 hash=d273f6f5c03f60cc...
7. トラブルシュート(実録)
✅ タグが反映されない
最初の壁でした。プラグインのタグ処理を何度呼び出しても、 WordPress管理画面では「タグなし」と表示。 原因は意外なところにありました。
8. PHP-FPMプール分離環境の罠:タグが入らない理由
現象
投稿自体は成功(post_id発行済)。 しかし wp_term_relationships にタグが登録されない。
原因
- WordPress本体のDBと、DMARC用DBを分けていた。
- さらにPHP-FPMのプールを
wp-admin/wp-frontend/dmarcに分割。 - 結果:タグ追加処理が「DMARC側DB」に対して実行」されていた!
対策
$mysqliでDMARC用DBを使う処理の後は必ず$mysqli->close()。- タグ登録はWordPress本体の
$wpdbを明示的に利用。 wp_update_post()+do_action('save_post')を呼び出し、キャッシュを更新。
結果、タグは完全に反映。 検証用 term-test.php の試行で全パターン比較したところ、 この方法以外はどれも「見かけだけ成功・実際は反映なし」でした。
教訓
「PHP-FPMプール分離 × MUプラグイン × 外部DB」構成では、 接続順序とクローズの管理が命。
PostfixやDMARCなど、別DBを読む場合は常に 「今この瞬間どのDBに接続しているか」を意識することが大切です。
9. カテゴリ・タグ・SEO設計
- カテゴリ:Postfix
- タグ:Postfix, DMARC, ログ集計
- パーマリンク例:/2025/10/postfix-dmarc-weekly-report-1.6/
- OGP画像:青背景+「Postfix × DMARC Weekly Report」
10. おわりに
これで完全自動投稿が実現しました。 Postfixの拒否率やDMARC整合率が、毎週自動でWordPress上に記録される。 しかも「失敗ゼロの週」も確実にログとして残せる。
この仕組みをベースに、今後は次の拡張を予定しています:
--range=14や--range=30など期間指定--forceオプションによる再投稿- 複数ドメイン選択(
hd0.biz/senkeien.net)切替スイッチ
更新履歴
- v1.5.x:タグ反映調整(2段階処理)
- v1.6.0:実データ+アイキャッチ自動登録
- v1.6.1:postfix_rejects対応
- v1.6.3:DMARC7日間で0件時に「データなし」表示
Author:masaやん


コメント