通知メールの送信元(Return-Path)を変更する。

会社でRedmineをかなりヘビーに使っており、自分の管理してるRedmineのサーバを他のチームにも相乗りで提供しているのですが、メール配信関係でトラブル。

Redmineにはチケットの更新を各担当者(チケットの担当者+ウォッチリストに入っている人)にメールでお知らせする機能があるのですが、この配信先の人のメールがUser Unknownで届かなかった場合にSMTPサーバ側から送信される配信エラーのメールがどこにも届かず、不着になってしまうとの事。

メールのヘッダーを確認すると該当のメールは

From: 管理用として登録したメーリングリスト(Redmine上で指定した配信元メアド)
Return-Path:

となっており、SMTPサーバ側はReturn-Pathのアドレスに向けてメールを送ろうとして、メール配信エラーを起こした模様。このRedmineのユーザ名@サーバホスト名ではメールは受信できないので、当たり前ですね。

このサーバ、メール送信の構成としては RedminePostfix → 社内メールサーバ という風にメールをリレーしており、どうもPostfix側が怪しい。

ログを確認しても

Jan 9 10:24:31 サーバホスト名 postfix/pickup[27594]: 8B8DB140058: uid=XX from=
Jan 9 10:24:31 サーバホスト名 postfix/cleanup[29756]: 8B8DB140058: message-id=
Jan 9 10:24:31 サーバホスト名 postfix/qmgr[11947]: 8B8DB140058: from=, size=3034, nrcpt=7 (queue active)

となってるので、やはりおかしくなってるのはここかな?
Redmine側でもconfiguration.ymlでメール送信の設定を変更できますが、どうもsendmailを指定した場合は細かいオプションが指定できそうな項目がない。
ということで、Postfix側で設定の変更をして対応する事にしました。

  1. /etc/postfix/main.cf に 「sender_canonical_maps = hash:/etc/postfix/canonical」を追加
  2. /etc/postfix/canonical へ「Redmineのユーザ名@サーバホスト名 指定したメールアドレス」の書式でアドレスの変換マッピングを指定。
  3. テキストファイルを書き換えたらインデックスファイルを再作成
  4. postfixを再起動。

$ vi /etc/postfix/canonical
redmine@localhost.localdomain redmine_sender@example.com
$ postmap /etc/postfix/canonical
$ /etc/init.d/postfix restart

これでRedmineからの通知メール送信時のログを見てみると

Jan 9 14:55:46 サーバホスト名 postfix/pickup[4669]: 0D2CF140058: uid=XX from=
Jan 9 14:55:46 サーバホスト名 postfix/cleanup[5879]: 0D2CF140058: message-id=
Jan 9 14:55:46 サーバホスト名 postfix/qmgr[4670]: 0D2CF140058: from=<指定したメールアドレス>, size=1680, nrcpt=1 (queue active)

という風になったのでとりあえず一安心かな?

しかし、今まで自分のプロジェクトで届いてた通知メールにはずっとReturn-Pathついてなかったのに、なぜそのプロジェクトの通知メールだけReturn-Pathが指定されたのかは謎・・・。しばらくログを監視するようにしておきますかね。