11月 092011
 
シェアする

sendmailのmaillogの ctladdr 

Nov 9 11:30:03 hostname sm-mta[20227]: pA92U2St020227: from=<user@hostname.domain.com>, size=314,, nrcpts=1, msgid=<201111090230.pA92U2qY020226@hostname.domain.com>, proto=ESMTP, daemon=MTA-v4, relay=localhost.localdomain [127.0.0.1]
Nov 9 11:30:03 hostname sm-mta[20228]: pA92U2St020227: to=<user@hostname.domain.com>, ctladdr=<user@hostname.domain.com> (502/502), delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30633, dsn=2.0.0, stat=Sent

ctladdr」とは、メール配信をコントロールしているメールアドレスとUID/GIDを記述します。

Web上のメールフォームからメールを送ったりすると、ctladdrはApacheになったりします。その場合はメール送信に利用するコマンド「sendmail」にオプション「-f 送信元にしたいメールアドレス」を追加すれば解決できます。ってこれは蛇足です。

この「ctladdr」がどのように設定されているかを確認していたところ、まず分かったのはenvelop-fromアドレスがctladdrとして利用されることです。Fromに指定したものが「ctladdr」に表示され、そしてそのメールアドレスのローカル部分(ここ@domain.com)と同じIDでユーザが存在する場合は該当ユーザのUIDとGIDも記述するようです。

さて、私が「ctladdrのログが無い」のを経験したSendmail環境にはvirtusertableを利用する設定が組み込まれておりました。

このvirtusertableの設定状況によって、ctladdrの表示が変わったり、ctladdrの記録すらなくなったりしました。原因はvirtusertableに有りましたので、以下
ctladdrを確認できたvirtusertableの設定 と
ctladdrを確認できなかったvirtusertableの設定 を書いておきます。

VirtuserTableの記述その1:メールアドレスの@前と配信先が同じ場合

user@hostname.domain.com   user

使用したFrom:「user@hostname.domain.com 」
結果: ctladdr=<user@hostname.domain.com> (userのUID/userのGID)

VirtuserTableの記述その2:メールアドレスの@前と配信先が異なる場合

user100@hostname.domain.com    user2

使用したFrom:「user100@hostname.domain.com」
結果: ctladdr=<user100@hostname.domain.com> (user2のUID/user2のGID)

VirtuserTableの記述その3:メールアドレスの@前を指定せずCatchAll設定の場合

@hostname.domain.com    admin

使用したFrom:「tetetetekitou@hostname.domain.com」
結果: ctladdr=<tetetetekitou@hostname.domain.com>(adminのUID/adminのGID)

VirtuserTableの記述その4:配信先が外部メールアドレスの場合

user4@hostname.domain.com    user4@other.com

使用したFrom:「user4@hostname.domain.com」
結果: なし

VirtuserTableの記述その5:配信先がエイリアスを向いている

user5@hotname.domain.com            user5~aliases

使用したFrom:「user5@hotname.domain.com」
結果: なし

 

なので、ctladdrの表示がおかしい場合は、/etc/mail/virtusertableも疑ってみましょうね。

以上

このエントリーをはてなブックマークに追加

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ