Postfix Alias

Postfixのaliasを設定するには通常/etc/aliasesに書けばいいんですが、宛先に設定するアドレスはサーバ上の別ファイルで管理されており、どうしたもんかと悩んでました。

  • 宛先ファイルが更新されたら、/etc/aliasesを手動で編集 → 忘れそう&面倒
  • 宛先ファイルが更新されたら、sedか何かで/etc/aliasesを置換 → ミスるとファイル壊しそう
  • メールが飛んで来たら、パイプからperl起動し、perlから宛先ファイル読む → 送信処理書くのやだ


どれもイマイチな案だと思って調べたところ、aliasは複数ファイル設定できるじゃないか!

alias_maps = hash:/etc/aliases, hash:/etc/aliases.warnings
alias_database = hash:/etc/aliases, hash:/etc/aliases.warnings


ということで、新たに/etc/aliases.warningsというファイルをalias_mapsとalias_databaseに設定し、ファイル更新したら以下のスクリプト叩くことにした。

my $target = 'warnings';
my @mails = @CONF::MAILS;

my $val = join q{,}, @mails;
my $path = "/etc/aliases.$target";
open my $out, '>', $path or die $!;
print {$out} "$target: $val";
close $out;

my $cmd = "/usr/sbin/postalias $path";
print "$cmd\n";
system($cmd) == 0 or die;

スクリプト叩かなきゃいけないけど、それくらいはやむなし。

おまけ

service postfix reload
or
/etc/init.d/postfix reload
  • /etc/aliasesの反映
postalias /etc/aliases/
or
newaliases