PHPを使ったウェブアプリケーションやウェブサービスの開発において、メール送信機能は重要な要素の一つです。
ユーザーへの確認メール、パスワードリセットの通知、ニュースレターの送信など、さまざまな用途でメール送信が必要となりますが、PHPはそのシンプルさと柔軟性から、メール送信の実現に適した言語の一つです。
この記事では、「PHPを使ったメール送信の基本」に焦点を当て、サンプルコードと解説を提供します。
初心者から中級者まで、どなたでも理解できるように、ステップバイステップで説明します。
このガイドを通じて、PHPを使用したメール送信の手順を習得し、ご自分のプロジェクトに組み込む準備を整えていきましょう。
PHPでメール送信する最短コード
まずは結論として、PHPでメールを送信する一番シンプルなコードを示します。標準の mail() 関数に「宛先・件名・本文」を渡すだけで送信できます。
<?php
// 宛先・件名・本文を渡すだけの最小構成
$to = "to@example.com";
$subject = "テストメール";
$message = "PHPから送信した本文です。";
if (mail($to, $subject, $message)) {
echo "送信に成功しました";
} else {
echo "送信に失敗しました";
}
日本語の件名や本文が文字化けする場合は、日本語のエンコード処理を自動で行ってくれる mb_send_mail() を使うと簡単です。使い方は mail() とほぼ同じで、あらかじめ mb_language("Japanese") と mb_internal_encoding("UTF-8") を指定しておきます。
<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");
// 日本語のエンコードを自動処理してくれる
mb_send_mail("to@example.com", "日本語の件名", "日本語の本文です。");
mail関数・mb_send_mail・SMTP送信の違い
PHPでメールを送る方法は大きく3つあります。用途に合わせて選びましょう。
| 送信方式 | 特徴 | 向いているケース |
|---|---|---|
mail() | PHP標準関数。サーバーの php.ini に設定されたSMTP(sendmail)経由で送信する。日本語はエンコード処理が必要。 | 同一サーバー内で完結する簡単な通知メール |
mb_send_mail() | mail() の日本語対応版。件名・本文のエンコードを自動で処理してくれる。 | 日本語メールを手軽に送りたいとき |
| 外部SMTP送信 (PHPMailer / Symfony Mailer など) | Gmail・SendGrid・SESなど外部のSMTPサーバーにSMTP認証で接続して送信する。到達率が高く、添付ファイルやHTMLメールも扱いやすい。 | 本番サービス・大量送信・迷惑メール判定を避けたいとき |
mail() / mb_send_mail() はサーバー側のメール設定に依存するため手軽ですが、到達率やなりすまし対策の面では外部SMTP(PHPMailerなど)を使う方法が本番運用では一般的です。まずは mail() で挙動を確認し、必要になったら外部SMTPへ切り替えるとよいでしょう。
PHPでメール送信のサンプルコード
<?php
// 送信先メールアドレス
$to = "to@example.com";
// 件名
$subject = "サンプルメール";
// メッセージ本文
$message = <<<EOM
これはPHPを使用して送信したサンプルメールです。\r\n
改行コードは反映されない。<br />
HTMLタグでの改行が反映されて、<b>強調表示</b>などが指定できる。
EOM;
// 送信元情報
$from = "from@example.com";
$fromName = "PHP_mail";
// メールヘッダ
$headers = <<<EOH
From: {$fromName} <{$from}>
Reply-To: {$from}
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
EOH;
// メール送信
if (mail($to, $subject, $message, $headers)) {
echo "メールが送信されました。\n";
} else {
echo "メールの送信に失敗しました。\n";
}
実際に届くメールがこちら

解説
このサンプルコードは、PHPで基本的なメール送信を行うための出発点となります。必要に応じて、SMTP認証を追加したり、エラーハンドリングを強化したりすることができます。
サンプルコードでは mail()関数を使用して送信しています。この関数では php.ini のSMTP情報をもとにメールを送信しており、以下の設定を行なっています。
$ php -i | grep -i smtp
SMTP => localhost => localhost
smtp_port => 25 => 25
Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp
この設定では実行環境内にメール送信用のSMTPサーバーを立ち上げておく事で送信が可能になります。
mail()関数の実行方法は
- 送信先のメールアドレスを記載
- 件名とメッセージを指定
- メールヘッダーに返信先とUTF-8である指定を追加
この指定をするだけでメール送信を行うことができます。
CCやBCCについてもヘッダー情報を編集することで対応可能になります。ぜひ、公式マニュアルを確認して使いこなしてみてください。
https://www.php.net/manual/ja/function.mail.php
メールが送信できない時の確認項目
mail() が false を返す、または true でも相手にメールが届かない場合は、次の項目を順番に確認してみてください。
- SMTPサーバーの設定:
php.iniのSMTP・smtp_port(Windows)や、sendmailのパス(Linux/Mac)が正しく設定されているか。 - 送信元アドレス:
Fromヘッダーが未設定、または実在しないドメインだと拒否されやすい。サーバーのドメインと一致した実在アドレスを指定する。 - 迷惑メール判定:
trueでも届かない場合は迷惑メールフォルダを確認。送信元ドメインに SPF・DKIM・DMARC レコードを設定すると到達率が上がる。 - ヘッダーの改行コード:ヘッダーの区切りは
\r\nを使う。改行コードが正しくないとヘッダーが無視されたり送信に失敗する。 - エラーの内容を確認:
error_get_last()やサーバーのメールログ(/var/log/maillogなど)を確認する。原因が分からない場合は外部SMTP(PHPMailer)に切り替えると詳細なエラーが取得しやすい。
終わりに
PHPでメール送信をする方法について解説してきました。
PHPによるメール送信をする方法はSMTPサーバーに投げるだけなので簡単に実装できることがわかると思います。
ですが、メールの送受信にはPHP以外の知識も必要になります。SMTPサーバーを立ち上げたり、迷惑メールと判定されないためにも送信元のドメインにSPFレコードを追加したり、メールサーバーの構築に精通する必要があります。
今回紹介した内容ではレンタルサーバーのエックスサーバーで検証しました。一般的なレンタルサーバーはメールの送受信に対応しているため、メール処理が簡単に実装できる利点があります。最初からメールの送受信機能が必要なのであればレンタルサーバーでサービス構築するのもオススメします。
以上、お疲れ様でした。

コメントを残す