読者です 読者をやめる 読者になる 読者になる

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

phpでメールを送ったらエラーで躓いたメモ

phpでメールを送ろうと思ったらとあるエラーで躓いたので調査&対応のメモ
結果たいしたことない問題だったんですけど汗

先に結果だけ書いておくと
qmailが正常に入っているサーバだったのでqmailでのsendをしてほしかったわけですが
このときはpostfixが動いてないってエラーを見て
postfixをなんとか動かそうって方向で四苦八苦してしまいました。。お恥ずかしい。。的な感じですw

postfixが何者かほとんど知らなかったってことも起因してますが。。
MTAについてはこのサイトがわかりやすいです
sendmail、qmail、Postfixのそれぞれの良さと違い

状況

メール送るプログラムと叩いてみたエラーはこんな感じです

vi mail.php
<?php
$to      = 'hoge@hoge.com';
$subject = 'test';
$message = 'body';
$headers = 'From: hoge@hoge.com' . "\n" .
    'Reply-To: hoge@hoge.com' . "\n" .
        'X-Mailer: PHP/' . phpversion();

mb_send_mail($to, $subject, $message, $headers);
?>
叩いた結果
# php mail.php
sendmail: fatal: file /etc/postfix/main.cf: parameter mail_owner: unknown user name value: postfix

正常にqmailがインストールされている確認も含めてechoでメール出してみるテスト

# echo to: hoge@hoge.com | /var/qmail/bin/qmail-inject
→正常にメールが来た

# echo to:hoge@hoge.com | /var/qmail/bin/sendmail -t
→正常にメールが来た

# php -r "mail('hoge@hoge.com', 'subject', 'body');"
sendmail: fatal: file /etc/postfix/main.cf: parameter mail_owner: unknown user name value: postfix
→ダメ

ちなみにpostfixはこんな感じ

sudo /etc/init.d/postfix status
master が停止していますが PID ファイルが残っています

このあたりからpostfixについて
設定やら起動やらを試行錯誤して正常に動かそうとしてたわけですが
整理すると
qmailでsendしたいのに動かない
postfixは使わないようにしたい
なのでphpが使うMTAをqmailにすればいいだけじゃんと気づきましたw

php.iniを確認する

※locate
/usr/local/php/lib/php.ini
/usr/local/php/lib/php.ini.20131124
/usr/local/php/lib/php.ini.20131126
/usr/local/src/php-5.4.14/php.ini-development
/usr/local/src/php-5.4.14/php.ini-production
/usr/local/src/php-5.4.14.20131207/php.ini-development
/usr/local/src/php-5.4.14.20131207/php.ini-production
・・・省略・・・

※いっぱいでてきてアレなのでphpコマンドで
# php -i | grep php.ini
Loaded Configuration File => /usr/local/php/lib/php.ini

※php.iniのsendmail_pathを確認
# cat /usr/local/php/lib/php.ini | grep sendmail_path
;sendmail_path =

※コメントアウトされたままな上に指定してないのでqmailのpathを指定
# vi 
--vi編集--
;sendmail_path = 
↓
sendmail_path = "/var/qmail/bin/qmail-inject"
----------

※設定が変わったかを確認
# php -i | grep sendmail_path
sendmail_path => /var/qmail/bin/qmail-inject => /var/qmail/bin/qmail-inject

※phpコマンドでメール確認
# php -r "mail('hoge@hoge.com', 'subject', 'body');"
→無事送れた!

ってことで結果php.iniのsendmail_pathをqmailに向けてやるだけで解決でした!