
PHPMailerでメールを送る方法は?具体的な手順を紹介
PHPでメール送信機能を実装したいとき、よく候補に挙がるのが「PHPMailer」です。PHPMailerは、SMTP認証や暗号化、HTMLメール、添付ファイル送信などに対応した定番ライブラリで、PHP標準のmail()関数よりも柔軟で扱いやすい点が特長です。PHPMailerの開発元が公開しているGitHubページでもComposer経由での導入が一般的とされており、SMTPを使うことでローカルのメール送信プログラムサーバに依存せず、外部SMTPサーバを使って送信できる点が大きな利点です。この記事では、PHPでメールを送る方法の違いを整理したうえで、PHPMailerの導入手順、実装例、活用事例、注意点まで分かりやすく解説します。
目次[非表示]
- 1.PHPでメールを送信する方法
- 1.1.mail()関数を使う方法
- 1.2.PHPMailerを使う方法
- 1.3.その他のメールライブラリを使う方法
- 2.PHPMailerでメールを送る手順
- 2.1.手順1:PHPMailerをインストールする
- 2.2.手順2:SMTPの接続情報を準備する
- 2.3.手順3:送信プログラムを作成する
- 2.4.手順4:送信内容や宛先を設定する
- 2.5.手順5:実行してデバッグしながら確認する
- 3.PHPMailerの活用事例
- 3.1.ユーザ登録時の確認メール送信
- 3.2.パスワードリセットメールの送信
- 4.PHPMailerの注意点
- 5.より安定したメール配信を実現するには「アララ メッセージ」へ
- 6.まとめ
PHPでメールを送信する方法
PHPでメールを送信する方法はいくつかあり、用途や必要な機能によって適した手段が異なります。もっとも手軽なのはPHP標準のmail()関数を使う方法です。しかし、サーバ環境に依存しやすく、細かな設定や高い到達性が求められる場面には向いていません。そのため、一般的にSMTP認証や暗号化、HTMLメール送信などに対応した外部ライブラリを利用します。代表的な選択肢としては、mail()関数、PHPMailer、Symfony MailerやLaminas\Mailなどのメール送信ライブラリが挙げられます。
なお、かつて広く利用されていたSwiftMailerは現在開発が終了しており、代替としてSymfony Mailerの利用が推奨されています。それぞれに特徴があるため、開発規模や運用要件に応じて適切な方法を選ぶことが重要です。
mail()関数を使う方法
PHPには標準でmail()関数が用意されており、追加ライブラリなしでメール送信機能を実装できます。簡易的な通知メールを送る程度であれば、少ないコードで手軽に実装できるのが特徴です。ただし、サーバ環境に依存しやすく、SPF・DKIMなどのメール認証が適切に設定されていない場合、迷惑メールに振り分けられやすく、メール到達率が低下するケースがあります。実運用では十分に注意しましょう。
メリット
- PHPに標準搭載されているため、追加ライブラリが不要
- 基本的なメール送信であれば、少ないコードで簡単に実装できる
- 小規模な開発や簡易的な通知用途に向いている
デメリット
- サーバ環境(sendmail設定など)に依存しやすい
- SMTP認証や添付ファイル送信などの高度な機能に対応しづらい
- 到達率や信頼性の面で不安が残る場合がある
PHPMailerを使う方法
PHPMailerは、PHPでメールを送信するための代表的なライブラリです。SMTP認証、TLS/SSLによる暗号化通信に対応しており、安全にメールを送信できます。さらに、HTMLメール、添付ファイル、複数宛先への送信など、実務で必要になりやすい機能を幅広く備えています。
単純なメール送信だけでなく、会員登録確認メールやパスワードリセットメールなどにも活用しやすいライブラリです。
メリット
- SMTP認証や暗号化通信に対応している
- HTMLメールや添付ファイルの送信を簡単に実装できる
- 柔軟性が高く、実務向けの機能が充実している
- エラー確認やデバッグがしやすい
デメリット
- mail()関数よりも初期設定がやや複雑
- SMTPサーバ情報の準備が必要
- 初心者には設定項目が多く、難易度が高く感じられることがある
その他のメールライブラリを使う方法
PHPではPHPMailer以外にも、メール送信に利用できるライブラリがあります。過去にはSwiftMailerがよく利用されていましたが、現在は開発が終了しているため、新規導入の際には注意が必要です。代替としては、Symfony Mailerなどの後継ライブラリの利用が推奨されています。また、LaravelやSymfonyなどのフレームワークに標準搭載されているメール送信機能を利用する方法もあります。開発体制やシステム構成によっては、PHPMailer以外の選択肢が適している場合もあります。
メリット
- ライブラリによっては拡張性や設計の柔軟性が高い
- フレームワークと連携しやすい場合がある
- 開発要件に応じて最適な手段を選べる
デメリット
- 情報量や導入実績はPHPMailerが比較的多い傾向にある
- ライブラリによっては学習コストがかかる
- SwiftMailerのように開発が終了しているものもある
PHPMailerでメールを送る手順
PHPMailerを使えば、PHPでSMTP認証付きのメール送信を比較的分かりやすく実装できます。mail()関数よりも設定項目は増えますが、認証情報の管理や暗号化通信、HTMLメールへの対応など、実務で使いやすい点が大きなメリットです。
基本的な流れは、ライブラリを準備し、SMTPサーバの接続情報(ホスト名・ポート番号・認証情報)を整理し、送信スクリプトを作成して実行します。あらかじめ必要なものを揃えておくと、スムーズに導入できます。
用意が必要なもの
- PHPの実行環境
- PHPMailer
- Composer(Composerで導入する場合)
- SMTPサーバの接続情報
- 送信元メールアドレス
- 送信テスト用の宛先メールアドレス
手順1:PHPMailerをインストールする
最初にPHPMailerを利用できる状態にします。一般的にはComposerを使ってインストールする方法が簡単ですが、環境によってはzipファイルをダウンロードして手動で設置できます。Composerを使う場合は依存関係もまとめて管理できるため、保守性の面でも扱いやすくなります。手動導入の場合は、PHPMailer本体のファイルを配置したうえで、必要なクラスを個別に読み込む必要があります。まずは利用する導入方法を決めましょう。
composer require phpmailer/phpmailer |
Composerを利用しない場合の読み込み例は以下の通りです。
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; use PHPMailer\PHPMailer\SMTP; require 'path/to/PHPMailer/src/PHPMailer.php'; require 'path/to/PHPMailer/src/Exception.php'; require 'path/to/PHPMailer/src/SMTP.php'; |
手順2:SMTPの接続情報を準備する
次に、SMTPサーバへ接続するための情報を整理します。メール送信では以下の情報が必要です。
SMTPサーバのホスト名
ポート番号
認証用のユーザ名とパスワード
送信元アドレス
これらをコードに直接書くこともできますが、設定ファイルに切り出しておくと管理しやすくなります。送信環境を切り替える際にも便利なため、実務では設定情報を分離しておく方法がよく使われます。
<?php return [ 'host' => 'smtp.example.com', 'username' => 'user@example.com', 'password' => 'your_password', 'port' => 587, 'use_tls' => true, 'from_email' => 'no-reply@example.com', 'from_name' => 'Example Service', 'envelope_from' => 'bounce@example.com', ]; |
このようにしておくと、メール本文や送信ロジックと接続設定を分けて管理できるため、修正や運用がしやすくなります。
手順3:送信プログラムを作成する
設定情報を準備したら、PHPMailerを使った送信プログラムを作成します。ここでは、SMTP認証を利用してテキストメールを1通送る基本的な例を紹介します。メール送信の流れは、以下の通りです。まずは最小構成で動かしてみると理解しやすいでしょう。
- PHPMailerのインスタンスを生成
- SMTP接続情報を設定
- 送信元と宛先、件名、本文を指定して送信する
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'vendor/autoload.php'; $config = require 'smtp_config.php'; $mail = new PHPMailer(true); try { $mail->isSMTP(); $mail->Host = $config['host']; $mail->SMTPAuth = true; $mail->Username = $config['username']; $mail->Password = $config['password']; if ($config['use_tls']) { $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; } else { $mail->SMTPSecure = ''; } $mail->Port = $config['port']; $mail->setFrom($config['from_email'], $config['from_name']); $mail->Sender = $config['envelope_from']; $mail->addAddress('to@example.com', '受信者名'); $mail->isHTML(false); $mail->Subject = 'テストメール'; $mail->Body = 'PHPMailerから送信したテストメールです。'; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; } |
手順4:送信内容や宛先を設定する
基本の送信処理ができたら、実際の用途に応じて送信内容を調整します。PHPMailerでは、宛先の追加、CCや返信先の設定、差出人名の指定なども簡単におこなえます。また、HTMLメールを送る場合はisHTML(true)を指定し、本文にHTMLを記述します。
テキストメールだけでなく、問い合わせ受付メールや会員登録確認メールのような表現力のあるメールも作成しやすいのが特徴です。
$mail->setFrom('from@example.com', '差出人名'); $mail->addAddress('user1@example.com', '受信者1'); $mail->addAddress('user2@example.com', '受信者2'); $mail->addReplyTo('support@example.com', 'お問い合わせ窓口'); $mail->addCC('cc@example.com', '共有先'); $mail->isHTML(true); $mail->Subject = '会員登録のご案内'; $mail->Body = '<h1>ご登録ありがとうございます</h1><p>以下のリンクから登録を完了してください。</p>'; $mail->AltBody = 'ご登録ありがとうございます。HTMLメールが表示できない場合はこちらをご確認ください。'; |
なお、日本語の差出人名が文字化けする場合は、エンコード処理をおこなうと安定しやすくなります。
$mail->setFrom('from@example.com', mb_encode_mimeheader('差出人名')); |
手順5:実行してデバッグしながら確認する
最後に、作成したPHPファイルを実行して送信結果を確認します。送信に成功すれば、宛先メールアドレスにメールが届きます。もし送信に失敗した場合は、原因を一つずつ切り分けて確認しましょう。例えば、SMTPの接続情報の誤りポート番号の不一致、認証情報の入力ミスなどがよくある原因です。
こうしたときは、PHPMailerのデバッグモードを有効にすると原因を追いやすくなります。接続から認証、送信までの流れがログとして確認できるため、初期設定時には特に役立ちます。
$mail->SMTPDebug = 2; |
さらに詳細なログを画面出力したい場合は、次のように設定できます。
$mail->SMTPDebug = 3; $mail->Debugoutput = function($str, $level) { echo "debug level $level; message: $str<br>"; }; |
実行例は以下の通りです。
php send_mail.php "test@example.com" "Test Mail From PHP" "PHPから送信したテストメールです。" |
送信エラーが出た場合は、以下の項目を確認しましょう。
- SMTPサーバ名
- ポート番号
- ユーザ名・パスワード
- TLS設定
開発環境によっては、メールサーバへの接続自体が制限されていることもあります。、その場合はテスト用のメール送信サービスを活用するのも有効です。
PHPMailerの活用事例
PHPMailerは、簡単なテストメール送信から本番環境でのメール配信まで対応できるライブラリであり、Webサービスや業務システム、Webアプリケーション開発のさまざまな場面で活用されています。SMTP認証やHTMLメール送信に対応しているため、ユーザ向けの案内メールから自動通知メールまで幅広く実装しやすいのが特長です。
特に、会員登録時の確認メールやパスワードリセットメールは代表的な活用例であり、多くのWebサービスで利用されています。ここでは、実際に使われることの多い2つの活用事例を紹介します。
ユーザ登録時の確認メール送信
Webサービスでは、ユーザ登録後に確認メールを送信し、メールアドレスが本人のものであるかを確認する仕組みがよく使われます。PHPMailerを使えば、登録時に発行したトークン付きURLをメール本文に埋め込み、ユーザがリンクをクリックすることでアカウントを有効化する処理を実装できます。
また、HTMLメールに対応しているため、テキストだけでなく見やすいデザインの案内メールを送れる点もメリットです。会員登録の完了率を高めたい場面や、ブランドイメージを意識したメールを送りたい場面で活用しやすいでしょう。
<?php require 'vendor/autoload.php'; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; $config = require 'smtp_config.php'; $to = 'user@example.com'; $token = bin2hex(random_bytes(16)); $mail = new PHPMailer(true); try { $mail->isSMTP(); $mail->Host = $config['host']; $mail->SMTPAuth = true; $mail->Username = $config['username']; $mail->Password = $config['password']; if ($config['use_tls']) { $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; } else { $mail->SMTPSecure = ''; } $mail->Port = $config['port']; $mail->setFrom($config['from_email'], $config['from_name']); $mail->Sender = $config['envelope_from']; $mail->addAddress($to); $mail->isHTML(true); $mail->Subject = '会員登録の確認をお願いします'; $mail->Body = ' <html> <body> <h2>ご登録ありがとうございます</h2> <p>以下のリンクをクリックして登録を完了してください。</p> <p><a href="https://example.com/confirm.php?token=' . htmlspecialchars($token, ENT_QUOTES, 'UTF-8') . '">登録を完了する</a></p> </body> </html>'; $mail->AltBody = '以下のURLにアクセスして登録を完了してください: https://example.com/confirm.php?token=' . $token; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; } |
パスワードリセットメールの送信
PHPMailerの代表的な活用例として、パスワードを忘れたユーザ向けに、再設定用のURLをメールで送信するケースが挙げられます。これはPHPMailerの代表的な活用例の一つです。ログインフォームからメールアドレスを受け取り、一定時間で失効するトークンを発行し、そのリンクを自動で送ることで安全に再設定フローを実装できます。
パスワードリセットメールはHTML形式でも送信できますが、内容の明確さを重視してテキスト形式で送るケースも多くあります。PHPMailerを使えば、SMTP認証を利用しながらメール到達率や信頼性を確保して送信できるため、ユーザサポートに関わる重要なメールにも活用しやすいです。
<?php require 'vendor/autoload.php'; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; $config = require 'smtp_config.php'; $to = 'user@example.com'; $resetToken = bin2hex(random_bytes(16)); $mail = new PHPMailer(true); try { $mail->isSMTP(); $mail->Host = $config['host']; $mail->SMTPAuth = true; $mail->Username = $config['username']; $mail->Password = $config['password']; if ($config['use_tls']) { $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; } else { $mail->SMTPSecure = ''; } $mail->Port = $config['port']; $mail->setFrom($config['from_email'], $config['from_name']); $mail->Sender = $config['envelope_from']; $mail->addAddress($to); $mail->isHTML(false); $mail->Subject = 'パスワード再設定のご案内'; $mail->Body = "パスワード再設定のリクエストを受け付けました。\n\n" . "以下のURLから新しいパスワードを設定してください。\n" . "https://example.com/reset.php?token=" . urlencode($resetToken) . "\n\n" . "この操作に心当たりがない場合は、本メールを破棄してください。"; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; } |
PHPMailerの注意点
PHPMailerは便利なライブラリですが、実際に運用する際はいくつか注意点があります。まず、SMTPサーバの設定が正しくないとメールは送信できません。特に以下の項目に誤りがあると、認証エラーや接続エラーが発生しやすくなります。
- Host
- Port
- Username/Password
- SMTPSecure
また、GmailなどのSMTPサーバを利用する場合は、通常のログインパスワードではなく、2段階認証を有効にしたうえでアプリパスワードの利用が推奨されます。さらに、HTMLメールを送る場合は、メールソフトによって表示が崩れることがあるため、AltBodyにテキスト形式の本文も設定しておくと安心です。
加えて、デバッグモードの扱いにも注意が必要です。有効にすると詳細なログを確認できますが、本番環境で常時有効にすると認証情報や接続内容が露出するおそれがあります。
最後に、Composerで導入する場合は、PHPのバージョンや依存パッケージとの互換性も事前に確認しておきましょう。
より安定したメール配信を実現するには「アララ メッセージ」へ
PHPMailerは手軽にメール送信を実装できる一方で、メール到達率の向上や配信管理、セキュリティ対策などを自前で行うには限界があります。特にユーザー向けの重要な通知メールや大量配信を行う場合は、安定した配信基盤が求められます。
こうした課題を解決するには、メール配信に特化したサービスの利用が効果的です。「アララ メッセージ」は、到達率の改善や運用負荷の軽減、効果測定など、実務に必要な機能を装備しています。
まとめ
本記事では、PHPでメールを送信する方法としてPHPMailerの基本的な使い方を解説しました。PHPMailerを利用すると、SMTP認証を利用したメール送信やHTMLメールの作成などを比較的簡単に実装できます。ユーザ登録時の確認メールやパスワードリセットメールなど、Webサービスでよく使われる機能にも応用できるため、PHPでメール機能を実装する際の有力な選択肢といえるでしょう。ただし、SMTP設定やセキュリティ対策、エラー処理などには注意が必要です。用途や配信規模に応じて、メール配信システムの導入も含めて適切な方法を検討するようにしましょう。



















