sendmailの設定

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
一つ、本題に入る前に。

僕はサーバーの設定のことはほとんどと言っていいくらいに理解していないし、いじれない。

そんな僕がこれからそれらしいことに触れるわけなんですけども、理解してない人間の書くことだから、あまり参考にはならないかもしれない。でももしかしたら理解の足りない俺に愛のムチともいえる容赦ないツッコミコメントが来るかもしれないから、記しておきたいと思います。



メールがね、送信できなかったんですよ。

全部ではない。Gmailなんかには普通にメールが届く。問題はケータイ。

簡単にいうと、とあるウェブサイトで、一度にたくさんの人にメールを送るシステムを作っていまして、結構たくさんの人に送るから処理時間も長くなってしまうってことで、cronを動かして定期的にバックグラウンドでDBに登録されている内容をメールで送信したいと思ってたんですよ。

で、そのメールがケータイの方にだけ届かない。


はっきりいって、何が原因かさっぱり分からなかった。

メールの送信にはQdmailっていうPHPのライブラリを使っているんですけど、Qdmailのログを見ると、ちゃんと「Send Success」的なログが出てる。

だから問題は、サーバーに入ってるメール配送用の、え~……ライブラリ? ソフト? まあそのへんの言い方はよく分かりませんが、MTAとかいうやつの設定なんだろうなというところまではこぎつけたわけです。

そのとあるウェブサイトを動かしてるサーバーにはsendmailが入ってまして、どうにかしてこいつの設定をいじってやれば、ケータイにもメールが送信されるかもしれないなぁと漠然と思いつつ、でも何して良いか分からないから無駄にログを眺めたりしながら一日を過ごしていたんですわ。いや、ログを見るのは決して無駄ではないけどね。見ても内容が理解できない僕のような人間が見る分には、無駄以外のなにものでもないと、そういう話です。

ログ見て一つずつエラーを出してそうっぽいテキストをコピーしてGoogle先生に検索していただいて、いろいろなサイトをあさって原因を調べたんですが、皆目さっぱり答えが見つからない。そもそもどうなれば正解なのかが分かってないからね。闇雲ってのはまさにこういうことなんでしょうね。

で、何をどう調べたかを全部書くと相当めんどいことになるんで(ってかもう思い出せない)、とりあえず結論を言いますと、sendmailの設定をいくつかいじることで、無事にケータイにメールが届くようになりました。


いじったのは、sendmail.mcというファイルです。おそらくだいたいの場合は、/etc/mail/の下にそのファイルがあると思われる。

SSHで接続して、viでこのファイルを編集してみました。いじったところだけ書きます。

もうしわけないですが、細かい説明はなしです。というのも、俺自身、それが何を意味してるのかあまり分かってない。ただこうすれば動くようになったぜっていうことしか言えない。



FEATURE(masquerade_envelope)dnlのコメントアウトをはずす

もしsendmail.mcのファイルの中を見て、FEATURE(masquerade_envelope)dnlってやつがコメントアウトされていたら、それをはずします。

dnl FEATURE(masquerade_envelope)dnl
↓
FEATURE(masquerade_envelope)dnl

sendmail.mcでは、先頭にdnlがついているとコメントアウトになるらしいです。だからもしついていたら先頭のdnlを取っちゃう。



マスカレードの設定

以下の一文をファイルに書き足します。

MASQUERADE_AS(ドメイン名)dnl

マスカレード……MASQUERADEってのは、TRFの歌です。

嘘です。いや、実際にTRFの歌にあるんだけど、今は別の話だ。

これは本当によく分かってないんで伝わり辛い拙い説明になりますが、マスカレードの設定をすると、メール送信者がその設定したやつになるみたいです。

root@ドメイン名

みたいな感じですね。

この設定をしないと、root@localhost.localdomainみたいな感じになる。

どうやら送信者がこのlocalhost~ってのになってると、身元不明でケータイからはスパム扱いされたりして送信できなかったりするみたいです。でもごめん。詳しいことは分からない。



一応、この二つの設定を変更することで、システム上ではメールが送れるようにはなりました。システム上ってのはあれです。テスト用のファイルにメール送信のプログラムを書いて、URLを直接叩いて送信を実行した場合って意味。

ただ、クーロンの方で送信処理を行う方については、相変わらず駄目でした。

で、次に設定したのが↓これ。



rootの場合もマスカレードされるように

こんな感じに書き換えます。

EXPOSED_USER(`root')dnl
↓
dnl EXPOSED_USER(`root')dnl

EXPOSED_USER()ってところコメントアウトするわけですね。このEXPOSED~ってのは、マスカレードしないユーザーを設定するものらしいです。つまり上の一文がコメントアウトされてないと、rootのときはマスカレードされない、送信者が自分で設定したドメイン名とかにならないってことですね。

どうやらこれがいけなかったらしい。システムから送るときはユーザーがrootじゃなくてapacheだったので、マスカレードされていたようなんですが、バッチ動かすときはユーザーはrootだからね。

ってなことで、EXP~をコメントアウトすることで、rootのときもマスカレードされるようになり、身元不明者ではなくなったと、そんな感じです。



あ、ちなみにsendmail.mcを編集したら、sendmailを再起動する必要があるみたいです。あとsendmail.cfというファイルを再構築だか再設定だかする必要もあるみたいです。

このsendmail.cfってのは、sendmailの設定ファイルのようです。ただこのファイルを自分で書いて設定するのは結構大変みたいで、代わりとしてsendmail.mcを編集して、その内容をcfの方に反映させることで設定がしやすくなっている……という認識で良いのか? 本当に良いのか?

まあ分からないことはさておき、やり方はこうです。

//m4プロセッサーでsendmail.cf に設定を反映
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

//sendmailを再起動
service sendmail restart

これでOKです。

もしサーバーからメールを送信する際に、ケータイにだけなぜか届かないぞ~っていう現象が出たら、上記のような設定をすれば動くようになるかもしれない。



いや、本当はね、上記のような設定が何を意味しているのかってのももっとちゃんと理解しておきたいところなんですけど(今後の役にも立つかもしれないし)、今回はそのへんはすっ飛ばしました。

納期も短くて、しかもこの設定にたどりつくまでに丸一日を費やしてうわ~……って気持になってるときの深夜に、そんな気力を沸かすのはもうムリですわい。
 もしかしたら何か関連しているかも? 
 みんなからのコメント 
2013年03月05日 15:36:37
[...] sendmailの設定 [...]