PHPでメール送信テストを行う際に、Xamppを使っていると初見では必ず送信エラーが発生する。
これはXamppをDLした際に付随している「php.ini」と「sendmail.ini」というファイルをいじる必要があるからだ。
今回はそれらを修正し、phpから簡単なメール送信を行う方法をメモしておく。
Table of Contents
メール送信用のプログラム作成
まずはPHPにてメール送信を行うプログラムを書いていく。
今回はフォームなどは設けずに、コード内に送信者アドレス、送信先アドレスなどを書く簡易的な仕様でテストしていきたいと思う。
<?php
// 言語とエンコードをセット(お作法として覚えておく)
mb_language("Japanese");//日本語の文字列処理やエンコードが必要な場合には、mb_language("Japanese")を設定しておく
mb_internal_encoding("UTF-8");//文字エンコーディング
//送信者を宛名をセット
$from = "メールの送信者のアドレス入力"; //送信元
$to = "メールの送信先のアドレス入力"; //充て先
//メールヘッダー作成
$encodedFrom = mb_encode_mimeheader($from);//念のため送信元をエンコードしておく(特殊な文字列が使われなければ不要)
$header = "From: $encodedFrom\n";
$header .= "Replay-to: $encodedFrom";
//件名や本文をチェック
$subject = "メールのテスト";
$body = "こんにちはメールの本文(テスト)です。";
//日本語メール送信
$r = mb_send_mail($to, $subject, $body, $header);
//mb_send_mail(宛先, 件名, 本文, 追加ヘッダー); 追加ヘッダーには送信者(from)や返信先(to)が入っている
if ($r) {//もしmb_send_mail関数が実行して成功(true)したら
echo "メール送信成功";
} else {
echo "メール送信失敗";
}
?>
各々のコードの解説はコメントアウトに記載している。
php.iniを編集
まずはphp.iniの中身にひと手間加えていく。Xamppをインストール済みであれば下記のパスでたどり着くことができる。
C:\xampp\php
ファイルを開いたらphp.iniの「[mail function]」という欄を編集していく。その中に「sendmail_path =」という項目があるので、そこを下記のように修正すればオッケー。
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
この部分以外は初期状態でもコメントアウトしても送信には影響しなかった。
ちなみに、自分は=の先は初期状態では入力されていなかったが、気にせず作業してもらってオッケー。
sendmail.ini
お次はsendmail.iniの中身を修正していく。パスは気の通りだ。
C:\xampp\sendmail\sendmail.ini
変える箇所はなんのメールを使っていても同じだが、変える内容は多少異なる。
gmailの場合は主に下記の箇所を書き換えればオッケー。
smtp_server=smtp.gmail.com
smtp_port=587
auth_username=自分のアドレス@gmail.co.jp
auth_password=グーグルアカウントから取得したパスワード
パスワードについては、アカウントのパスワードではなく、メール連携ようにグーグルのアカウント設定ページから取得する必要があるので注意が必要だ。下記はその大まかな手順となっている。
- ①グーグルアカウントページの「セキュリティ」に進む
- ②二段階認証済みのアカウントであれば、「2段階認証プロセス」をクリック
- ③「アプリ パスワード」をクリック
- ④アプリを選択(メール)、デバイス(その他)の順で選択する
- ⑤メール送信に使うパスワードが発行→sendmail.iniにて使用
一連の作業が終わったらappachを再起動してPHPで作ったプログラムをブラウザで叩けばメールがぶじ送信される。
今回のケースは問題なく送信受信が行われたが、レンタルサーバーによっては迷惑メールに振り分けられる可能性もあるので、ローカルの後にテスト環境での検証も必要になるので注意が必要だ。
Xserverのビジネスメールを設定する場合
かなり個人的な設定だが、Xserverのドメインから取得したビジネスメールの設定も載せておく(若干異なる点があるので、注意が必要だ)。
smtp_server=[Xserveのsmtp(メールソフト設定に書かれている)]
smtp_port=587
auth_username=自分のアドレス@ドメイン.com
auth_password=ビジネスメール登録時に取得したパスワード
SMTP=[Xserveのsmtp(メールソフト設定に書かれている)]
smtp_port=587
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"