Vagrant上のCentOSからmail関数を使ってメールを送る

  • 41
    Like
  • 0
    Comment
More than 1 year has passed since last update.

VagrantでPHPのmail()を使いたい

タイトル通りです。PHPでmail()関数を使おうと思ったのですが、どうしたらいいかわからなかったので調べたことをメモ。

※PHPって書いてますけどほとんどLinuxの話です()

mail()関数の仕様

php.iniにsendmailのパスの設定があります。

php.ini
[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.providersmtp:使用する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サーバのドメインに変更すればいけるはず、らしいです。
送れない場合は設定とかいろいろあるそうです。正直よく知りません()