【PHP8.x】mail関数の使い方

mail関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

mail関数は、PHPスクリプトから電子メールを送信する機能を提供する関数です。この関数を使用すると、プログラム上で指定した宛先に、件名と本文を含むシンプルなテキストメールを送ることができます。

メールを送信するために、少なくとも宛先のメールアドレス、メールの件名、そしてメールの本文を引数として指定する必要があります。加えて、送信元(From)、CC(Carbon Copy)、BCC(Blind Carbon Copy)などの追加ヘッダー情報をオプションで設定することも可能です。

mail関数は、PHP自身が直接SMTP(Simple Mail Transfer Protocol)サーバーと通信するのではなく、PHPが動作しているサーバーにインストールされているメール転送エージェント(MTA)を利用してメールの送信を依頼します。このため、メール送信の成否や詳細な挙動は、PHPの設定(php.ini)やサーバーに設定されたMTAの設定に大きく依存します。

関数は、メールの送信処理が正常にキューに追加された場合はtrueを、何らかの理由で失敗した場合はfalseを返します。しかし、trueが返されたとしても、メールが最終的に受信者に届くことを保証するものではありません。添付ファイルやHTML形式のメール、SMTP認証を伴うメールなど、より複雑な要件を持つメール送信には、このmail関数だけでは対応が難しいことが多く、通常はより高機能なメール送信ライブラリの利用が推奨されます。

構文(syntax)

1mail(string $to, string $subject, string $message, array|string $additional_headers = [], string $additional_params = ""): bool

引数(parameters)

string $to, string $subject, string $message, array|string $additional_headers = [], string $additional_params = ""

  • string $to: 送信先のメールアドレスを指定する文字列
  • string $subject: メール件名を指定する文字列
  • string $message: 送信するメール本文を指定する文字列
  • array|string $additional_headers = []: 追加のメールヘッダーを指定する配列または文字列。例: "From: sender@example.com\r\nReply-To: reply@example.com"
  • string $additional_params = "": mail() 関数に渡す追加のコマンドラインパラメータを指定する文字列

戻り値(return)

bool

メール送信の成否を返します。成功した場合はtrue、失敗した場合はfalseを返します。

サンプルコード

PHP mail関数でメールを送信する

1<?php
2
3/**
4 * PHPの組み込みmail関数を使用してメールを送信します。
5 * この関数は、サーバーに設定されているMTA(メール転送エージェント、例: Postfix, Sendmail)に依存します。
6 * 開発環境ではMTAの設定が必要な場合があります。
7 *
8 * @param string $to 送信先のメールアドレス。
9 * @param string $subject メールの件名。
10 * @param string $message メールの本文。
11 * @param string|array $additionalHeaders オプションの追加ヘッダー。'From: sender@example.com\r\nContent-Type: text/plain; charset=UTF-8' などの形式。
12 * @param string $additionalParams オプションの追加パラメータ。通常はsendmailコマンドのオプションなどで使用されます。
13 * @return bool メールがMTAに正常に渡された場合はtrue、失敗した場合はfalseを返します。
14 *              実際にメールが受信者に届いたかどうかは保証しません。
15 */
16function sendEmail(
17    string $to,
18    string $subject,
19    string $message,
20    string|array $additionalHeaders = [],
21    string $additionalParams = ""
22): bool {
23    // PHPの組み込みmail関数を呼び出し、メールを送信キューに入れます。
24    // mail関数がfalseを返す場合、通常はサーバーのメール設定に問題があるか、
25    // 送信に必要な情報が不足していることを示します。
26    $isSent = mail($to, $subject, $message, $additionalHeaders, $additionalParams);
27
28    return $isSent;
29}
30
31// --- 以下は sendEmail 関数の使用例です ---
32
33// 送信先メールアドレス (実際の受信者のアドレスに置き換えてください)
34$recipient = "your_recipient@example.com";
35// メールの件名
36$subject = "PHP mail関数 テストメール";
37// メールの本文
38$body = "こんにちは。\n\nこれはPHPのmail関数で送信されたテストメールです。\n\nよろしくお願いいたします。";
39
40// 追加ヘッダーの設定
41// Fromヘッダーは送信元アドレスを指定するために重要です。
42// Content-Typeヘッダーは文字化けを防ぎ、メールの形式を指定するために推奨されます。
43$headers = "From: your_sender@example.com\r\n";
44$headers .= "Reply-To: your_sender@example.com\r\n";
45$headers .= "MIME-Version: 1.0\r\n";
46$headers .= "Content-type: text/plain; charset=UTF-8\r\n";
47
48// 追加パラメータ (通常は空白で問題ありませんが、例えばエンベロープFromの指定などで使用)
49// 例: $params = '-fyour_sender@example.com';
50$params = "";
51
52// sendEmail関数を呼び出してメールを送信します
53if (sendEmail($recipient, $subject, $body, $headers, $params)) {
54    echo "メールが正常に送信キューに入れられました。\n";
55    echo "送信先: " . $recipient . "\n";
56    echo "件名: " . $subject . "\n";
57} else {
58    echo "メールの送信に失敗しました。\n";
59    echo "サーバーのメール設定(MTA)を確認してください。\n";
60}
61
62?>

PHPのmail関数は、ウェブサーバーからメールを送信するための組み込み機能です。この関数は、サーバーに設定されているMTA(メール転送エージェント、例えばPostfixやSendmailなど)を利用してメールを送信キューに入れます。したがって、メール送信にはサーバー側でMTAが適切に設定されている必要があります。

サンプルコードでは、mail関数をより使いやすくするためのsendEmail関数を定義しています。sendEmail関数は、最初の引数$toに送信先のメールアドレス、$subjectに件名、$messageにメールの本文を指定します。これらはメール送信に必須の情報です。オプションである$additionalHeadersには、送信元(From:)や返信先(Reply-To:)、文字コード(Content-Type: text/plain; charset=UTF-8)などの追加情報を設定できます。特に文字化けを防ぐため、Content-Typeヘッダーの設定は重要です。$additionalParamsは、MTAに渡す追加オプションを指定しますが、通常は空白で問題ありません。

mail関数は、メールがMTAに正常に引き渡された場合にtrueを、何らかの理由で失敗した場合はfalseを返します。この戻り値は、メールがMTAに渡されたことのみを示し、実際に受信者のメールボックスに届いたかどうかは保証しません。サンプルコードでは、sendEmail関数の戻り値を確認し、送信が成功したか失敗したかのメッセージを表示しています。

PHPのmail関数は、サーバーのMTA(メール転送エージェント)設定に依存するため、動作しない場合はMTAの設定を確認してください。関数がtrueを返しても、メールが実際に受信者に届いたことは保証されません。スパム判定を避け、正しく表示されるよう、From:ヘッダーとContent-Type: text/plain; charset=UTF-8ヘッダーを必ず設定しましょう。また、外部からの入力値を直接メールの引数に使用する際は、セキュリティのために適切に検証・サニタイズが必要です。本番環境では、より機能が豊富で信頼性の高いPHPMailerなどの外部ライブラリの利用も検討すると良いでしょう。

PHP mail関数でテストメールを送信する

1<?php
2
3/**
4 * mail()関数を使用してシンプルなテキストメールを送信します。
5 *
6 * 注意: このスクリプトをWebサーバー上で実行するには、
7 * php.iniファイルでsendmailなどのメール送信設定が正しく構成されている必要があります。
8 * ローカル環境では通常、メールは送信されません。
9 *
10 * @return void
11 */
12function send_test_email(): void
13{
14    // 日本語の文字化けを防ぐための設定
15    mb_language('Japanese');
16    mb_internal_encoding('UTF-8');
17
18    // --- メールの基本情報を設定 ---
19
20    // 宛先メールアドレス
21    $to = 'recipient@example.com';
22
23    // メールの件名
24    $subject = 'PHPからのテストメール';
25
26    // メールの本文
27    $message = "これはPHPのmail()関数を使用して送信されたテストメールです。\n";
28    $message .= "このメールが届けば、設定は正常です。\n";
29
30    // --- 追加ヘッダー情報を設定 ---
31    // From: 送信元を指定します。指定しないと送信できないサーバーもあります。
32    // Content-Type: メールの形式と文字コードを指定します。日本語にはUTF-8が推奨されます。
33    $additional_headers = [
34        'From' => 'sender@example.com',
35        'Reply-To' => 'sender@example.com',
36        'Content-Type' => 'text/plain; charset=UTF-8',
37    ];
38
39    // mail()関数を実行してメールを送信
40    // 成功した場合は true、失敗した場合は false を返します。
41    // mb_send_mail() は mail() を内部で呼び出し、日本語の件名や本文を自動でエンコードしてくれます。
42    if (mb_send_mail($to, $subject, $message, $additional_headers)) {
43        echo "メールは正常に送信キューに追加されました。";
44    } else {
45        echo "メールの送信に失敗しました。サーバーの設定を確認してください。";
46    }
47}
48
49// 関数を呼び出してメール送信処理を実行
50send_test_email();

PHPのmail関数は、指定した宛先にメールを送信するための基本的な機能を提供します。サンプルコードでは、日本語の文字化けを防ぐため、mb_language()mb_internal_encoding()で適切な文字コードを設定し、内部でmail関数を利用するmb_send_mail関数を用いています。

この関数には主に以下の情報が必要です。 第一引数の $to には宛先メールアドレスを文字列で指定します。 第二引数の $subject にはメールの件名を文字列で指定します。 第三引数の $message にはメールの本文を文字列で指定します。

第四引数の $additional_headers はオプションで、送信元アドレスやメールの形式といった追加情報を配列または文字列で設定できます。サンプルではFromで送信元を指定し、Content-Typeで「テキスト形式、UTF-8文字コード」と指定することで、日本語のメールが正しく表示されるようにしています。

関数は、メールの送信処理がサーバーのキューに正常に追加された場合に論理値のtrueを、何らかの理由で失敗した場合にはfalseを戻り値として返します。この戻り値を利用して、プログラム内で送信の成否を判断し、適切な次の処理を行うことができます。

ただし、この機能を利用するには、WebサーバーのPHP設定(php.ini)において、Sendmailなどのメール送信プログラムが適切に構成されている必要があります。設定が不十分な場合、メールは実際に送信されませんのでご注意ください。

PHPのmail関数は、php.iniのメール送信設定が必須であり、ローカル環境では機能しません。サーバー上で動作確認を行う必要があります。日本語メールは文字化けを防ぐため、mb_language()mb_internal_encoding()でエンコーディングを設定し、mb_send_mail()を使うべきです。送信元を示すFromヘッダーや、文字コードを指定するContent-Type: charset=UTF-8などの追加ヘッダーは、メール到達や表示に不可欠です。mb_send_mail()はメールの送信キューへの追加成否を返します。戻り値で必ず結果を確認し、失敗時はサーバー設定を確認してください。

関連コンテンツ

【PHP8.x】mail関数の使い方 | いっしー@Webエンジニア