VagrantでPHPのmail()を使いたい
タイトル通りです。PHPでmail()関数を使おうと思ったのですが、どうしたらいいかわからなかったので調べたことをメモ。
※PHPって書いてますけどほとんどLinuxの話です()
mail()関数の仕様
php.iniにsendmailのパスの設定があります。
[mail function]
sendmail_path = /usr/sbin/sendmail -t -i
PHPのmail()関数は、sendmailコマンドを使ってメールを送信するそうです。
つまり、 sendmailが入ってなければメールを送れません。
sendmailが動いているかどうか確認
まずはsendmailにパスが通ってるかどうか確認してみましょう。
$ whereis sendmail
/usr/sbin/sendmail
が出力されればパスが通っています。
存在しなければ、sendmailのインストールをしましょう。
sendmailのインストール
参考:http://programming-10000.hatenadiary.jp/entry/20130517/1368803251
yum install sendmail
yum install sendmail-cf
で、yumリポジトリからインストールしましょう。
sendmailのコピー
sendmailにSMTPの設定が必要です。
が、その前にsendmail.mcやcfを直接弄ってますが、念のためcpしておきましょう。
$ cd /etc/mail
$ cp -p sendmail.mc sendmail_yyyymmdd.mc
$ cp -p sendmail.cf sendmail_yyyymmdd.cf
yyyymmddは年月日を入れておきましょう(言わなくてもわかると思いますが)。
sendmailの設定
参考:http://makisuke.seesaa.net/article/9381075.html
sendmail.mcを編集してSMTPサーバを設定します。
$ vi sendmail.mc
この中にあるdnl define('SMART_HOST','smtp.your.provider')
の先頭のdnlを削除し、smtp.your.provider
をsmtp:使用するSMTPサーバドメイン
に変更します。
sendmail.mcの内容をsendmail.cfに適用
mcはcfのファイルを編集するためのマクロらしいので、mcを使ってcfを書き換える必要があります。
$ m4 sendmail.mc > sendmail.cf
適用したらsendmailを再起動しましょう。
$ /etc/init.d/sendmail restart
sendmailでメールが送れるか確認
mail()関数を使う前に、sendmailコマンドでメールが送れなければそもそもメールは送れません。
参考:http://d.hatena.ne.jp/shinjo-kou/20110125/1295948242
$ sendmail 送信先のメールアドレス
From: 送信元のメールアドレス
To: 送信先のメールアドレス
Subject: 件名
(空行)
文面
.(ドットで入力終了)
これで送信先メールアドレスにメールが送信できればsendmailの設定は完了です。
PHPによるメール送信
mail関数はマルチバイトによるメール送信をカバーしてないので注意しましょう。
mail関数の使い方は... ググって下さい!(おい)
※XAMPP環境の場合
XAMPP環境の人は、[mail function]
の中にSMTP = localhost
と書かれている場所があるので、そこをSMTPサーバのドメインに変更すればいけるはず、らしいです。
送れない場合は設定とかいろいろあるそうです。正直よく知りません()