PHPのmail関数が利用できない

毎日わからないことと格闘の日々です。

タイトルの件も数時間使って解決できず、家に帰っても寝るにも寝れず、家からホスティング会社に問い合わせのメールをしちゃったぐらいです。

で、格闘の記録。

まず、いつも使っているEthnaのMailSenderでメールを送信しても送れないので、Ethna_MailSenderのソースを追ったら、PHPのmail関数を使っていることが判明。
初めてEthnaのソース(アプリ側だけ)をUTF-8にした影響か?と思ったんですが、文字化けとかしてしまうならまだしも、メール自体が送れないってのは変だなと思って、返り値をvar_dumpしてみたら、falseが返ってきました。

こりゃおかしいなと思って、PHPの公式マニュアルに書いてあるようなシンプル&非常に単純なmail関数でもこけるので、こりゃEthnaとかUTF-8とかの次元じゃないことがわかりました。

mail()でメールが送信できるかどうかの確認手順 - よくきたWiki
で、上記のサイトを参考にして問題の切り分けを行ったところ、すべて無事出来ました。
・phpのmail関数は正しいメールデータを生成している
・phpのsendmail_pathで指定されているsendmailのコマンドで入力すると、メールが送られる。

PHPをインストールした時点でsendmailが特定のディレクトリに存在しないと、うまく動かない?時もあるとかないとかってことでしたが、見た感じ動かせるようにインストールはされてる感じがしました。(phpinfo()見た感じでは)

で、なんとなく権限っぽいのかなと思ったのですが、そんなにいじくりまわしていないサーバー状態で、PHPのmail関数が動かないってことは、他のアプリケーション(Xoopsとか)のメール機能も使えないだろうと踏み、ホスティング会社に聞くことにしました。

だって、もうお手上げだから・・・。

そしたら、以下のメールが返ってきました。

メールを送信するケースの場合(CGIからの送信など)送信元のホスト名は
apache@メインホスト名となってしまいます。

CGIプログラムなどできちんとemvelope-fromなどにきちんとサーバーに
設定されたメールアドレスをセットしていただいていれば特に問題はないのですが
そうでない場合、apache@メインホスト名のメールアドレスが
元々定義されていない為にエラーとなってしまいます。

弊社側にてこちらの設定を解除させていただきましたので
送信をお試しいただきますようお願い申し上げます。


結論を良いますと出来ました。
ん~さすがプロ。
すばらしい。
で、折角なのでどこを触ったのか聞いてみました。

設定変更を行った項目は以下の通りでございます。

/etc/mail/virtusertable

ファイル内に以下の項目がございます。

@メインホストドメイン名 error:nouser User unknown

この項目を無効にし(#に拠るコメントアウト)
以下のコマンドからデータベースの再起動をおこないました。

# vnewvirtmaps


「virtusertable」と「error:nouser User unknown」で検索してもなかなか出てこないので、どういったものなのか良くわかりませんが、要はapache@hoge.comってメールアドレスがないので、no userってことで、エラーになってたってことですな。

なんとなくphpの環境関数で「sendmail_from」ってのが「no value」になっていたので、そこになにかしらセットしておけばよかったのかなと思っていましたが、それじゃああんまりにも不便だろうと思っていたら、やっぱりありました↓。
PHPでメール送信する場合にメールサーバで拒否されないために (ITプロフェッショナル部)

・・・奥が深い、また勉強になりました。

あ~いつか試そうかな。
あ~疲れた。

コメント

アーカイブ

2010

2009

2008

2007

コンタクト

longkey1[at]gmail[dot]com