目次
phpでメール送信するための手順は2つ
①mb_send_mailを動かすphpファイルの作成 ②php.iniファイルの設定 この2つの手順ですすめていきます。mb_send_mail関数のリファレンスを確認

引数などの書き方と返り値
mb_send_mail ( 宛先 , タイトル, 本文, ヘッダー ) となっています。| 引数 | 型 | 説明 |
|---|---|---|
| 宛先 | String | string型で送信先のメールアドレスを指定します。アドレスをカンマで区切れば複数の宛先を指定できます。 |
| タイトル | String | string型でこのメールのタイトルを記述します |
| 本文 | String | string型でこのメールの本文を記述します。 |
| ヘッダー | String Array | メールヘッダの最後に挿入されるstringまたはarrayとなっています。ここで送信元アドレス(From)やCc, Bcc、返信先アドレスを指定したりできます。 |
mb_send_mailをするPHPファイルを用意
以下のPHPファイルを用意します。MAILTOやFromやReturn-Pathは適宜編集してください。 このphpファイルをレンタルサーバーにアップロードしてブラウザでアクセスするだけでメールが送信されます。
<?php
const MAILTO = "info@pg-happy.jp"; //宛先メールアドレス
const SUBJECT = "サンキューメール";
$content = "レンタルサーバーでのメール送信テストです。\n";
$content .= "このメールを受け取ったということはちゃんと送信されていますね。";
$headers = <<<HEAD
From : from@pg-happy.jp //送信元メールアドレス
Return-Path: from@pg-happy.jp //送信元メールアドレス
Content-Type: text/plain;charset=ISO-2022-JP //おまじない(無くてもいいっぽい)
HEAD;
$is_success = mb_send_mail(MAILTO, SUBJECT, $content, $headers);
if(!$is_success) {
die('メール送信失敗');
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>メール送信完了画面</title>
</head>
<body>
<p>メール送信が完了しました。</p>
</body>
</html>
もしこのソースで試すなら、MAILTOはご自身のメールアドレスを設定してください。
$headersにはヘッダー情報を入れていきますが、Fromだけでも大丈夫です。
その際には
$headers = 'From:from@pg-happy.jp';とすればOKです。 ちなみにFromのメールアドレスは架空のでも問題ありませんでした。(本当は良くないと思うけど) レンタルサーバーによってはそのサーバー内で作成したメールアドレスしか受け付けない場合もあるかもしれません。 またPHPのリファレンスによるとFromは必ず記述しなければ以下のWarningが出ると書かれています。
Warning: mail(): “sendmail_from” not set in php.ini or custom “From:” header missingけど私がテストしたときはFromが無くてもメール送信できちゃいました。 その際の送信元はレンタルサーバーのデフォルトメールアドレスになっていました。
サーバーのphp.iniファイルの設定

SMTP = localhost smtp_port = 25 sendmail_path = /usr/sbin/sendmail -t -i最初メール送信ができなくて色々調査してたんですけど、ネットのブログとかでは以下のように編集すべし、とか書かれているブログもありました。
SMTP = sv000.xserver.jp smtp_port = 587 sendmail_path = /usr/sbin/sendmail -t -iSTMPには自分が契約しているサーバーの番号を記述し、smtp_portには25ではなくて587を指定せよ、ということです。 念のためエックスサーバーのphp.iniの編集方法を書いておきます サーバーパネルからログインし
画面下部php.ini設定をクリックし
該当のドメインを選択し
php.ini直接編集をクリック
これで編集画面が出てくるので編集できるようになります。
デフォルト送信元メールアドレスをphp.iniに記述しちゃう
以下の1文をphp.iniに追記してもOKです。sendmail_from = from@pg-happy.jpそうするとデフォルトの送信元メールアドレスがこれに設定されます。 phpファイルのほうで
$headers = 'From:from@pg-happy.jp';というのを書かなくてもいいことになります。書かなければphp.iniの方が使われます。 一通り設定ができたらアップロードしたphpファイルにブラウザでアクセスしてみましょう。
また宛先メールアドレスにメールが届いていることを確認しましょう。
mb_send_mailと各社レンタルサーバー別の挙動

エックスサーバーでmb_send_mail
前述のとおり問題なく動きました。さくらレンタルサーバーでmb_send_mail
特に問題なくメール送信できた。php.iniの編集も必要なくデフォルトのままでOKでした。 php.iniの設定はデフォルトで以下のようになっています。
sendmail_from → no value
SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i
送信元メールアドレスは自動的に「アカウント名@wwwサーバ番号.sakura.ne.jp」となっていました。
ロリポップレンタルサーバーでmb_send_mail
こちらも特に問題なくメール送信できました。php.iniの編集もしておらずデフォルトのままです。 ユーザーによるphp.iniの設定は制限がされていて、ロリポップの標準設定を使うようになってるみたいです。 ちなみにデフォルトの送信元は「アカウント名@phy.lolipop.jp」のようになっていました。適宜Fromを記述して設定しましょう。バリューサーバーでmb_send_mail
こちらもmb_send_mailは正常に使えました。 php.iniは以下のようになっており特に編集はしませんでした。デフォルトの送信元アドレスは「root@契約したバリューサーバードメイン.jp」です。
sendmail_from → no value
SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i
ということでお値段が安めの人気のレンタルサーバー4種に関してmb_send_mailが正常動作することを確認できました。
教材のmb_send_mailが動いたり動かなかったり
私がいまPHPの学習で取り組んでいる教材ではmb_send_mailの記述が以下のようになっていました。 headerに色々と記述してるみたいなんですよね。
const SUBJECT = 'サイト改善アンケート';
const TO = 'info@pg-happy.jp';
$headers = <<<HEAD
From : {$_POST['from']}
Return-Path: {$_POST['from']}
Content-Type: text/plain;charset=ISO-2022-JP
HEAD;
$body = "●●".SUBJECT."●●\n";
mb_send_mail(TO, SUBJECT, $body, $headers);
よく見ると Fromのところが $_POST[‘from’]となっています。これは教材ではNULLが入っているっぽくてphp.iniのデフォルトを使用するようになってるみたいですけど。
Cloud9だとNULLでも問題なくメール送信できて、エックスサーバーだとメール送信できなかったんです。
これだけはいまだに謎です。取り急ぎFromには何も記述しないか、しっかり送信元を記述すれば動くことがわかりました。
プログラミング学習を体系的に進めたい人へ
独学で基礎を確認したあとに、質問できる環境や転職・副業向けの学習サポートも比べたい人は、プログラミングスクールの比較記事も参考にしてください。学習目的、料金、受講期間、サポート範囲を分けて見ると、自分に合う学び方を選びやすくなります。




