fmlで特定のメンバーにメールが届かない場合の対応

どうも、最近小ネタすら枯渇気味の (っ´∀`)っ ゃーですこんばんは。ニッチなネタに定評のある(と勝手に自分で思っている)私としては非常に遺憾ではありますが、最近久々に障害対応で学んだことがあるので書いちゃいますよー。

先日、USP友の会幹事の某Rちさんから「メーリングリストにメールが届かない」と連絡がありまして、maillogを見たんですが、Statusはsentになっている・・・なんでだろー?と思って今度はfmlのログを見てみることに。ちなみに、同じメールは届いている人とそうでない人がいました。もちろん、membersにいることは確認済。

fmlは、メーリングリストごとにログがあります。「ossan」というメーリングリストがあったとしたら /var/spool/ml/ossan/log にログが記録されます。で、メーリングリスト投稿時刻のログを見てみると・・・

12/07/30 21:02:15 ARTICLE 258 (you@example.com)
12/07/30 21:02:15 SmtpConnect: connect(localhost/25) error[Address family not supported by protocol] (you@example.com)
12/07/30 21:02:15 fml[26522] retry after 4 sec. (you@example.com)
12/07/30 21:02:19 Try mci:prog since smtp connections not established (you@example.com)

確かにエラーおきてる。どうやらSMTP接続に問題ありげ?ということでググってみると、fmはまずsocketでのメール配信を試み、エラーになるとsendmail経由で送るとのこと。こいつの設定はメーリングリストごとのディレクトリにある「config.ph」で行うそうで。

$STRUCT_SOCKADDR = "hogehoge";

ってのがOSごとに異なるパラメータで設定されているそうです(fmlコンパイル時に決定される)。旧友の会サーバはさくらの共用サーバ(FreeBSD)で、現友の会サーバはCentOS(さくらVPS)なのですが、これがビンゴっぽい。

たまたま、旧サーバから移行したメーリングリストの他に、新しく作ったメーリングリストが新友の会サーバにあったのでdiffってみました。
※ 旧サーバから移行したML = ossan 、 新サーバで新しく作ったML = youjo とします

[fml@www5276ue ossan]$ diff config.ph ../youjo/config.ph
1444,1445c1444
< $STRUCT_SOCKADDR = "n n a4 x8";
 ---
> $STRUCT_SOCKADDR = "S n a4 x8";

ということで、FreeBSD 4.x から CentOS 6.x にfmlを移行した際、ちゃんとmembersに登録されているメンバーにメールが届かない場合は config.ph の STRUCT_SOCKADDR のパラメータを “n n a4 x8” から “S n a4 x8” に変えることをおすすめします。