PHP入門 文字列関数 電子メールを送信する(mb_send_mail関数)

mb_send_mail関数は、件名や本文にマルチバイト文字を含んだメールを送信するための関数です。よく似た関数でmail関数もありますが、こちらはマルチバイト文字に対応していません。文字エンコーディングの変換を自前で行う必要があります。

構文:mb_send_mail関数

mb_send_mail(string $to , string $subject, string $message 
        [, string|array $additional_headers[, ?string $additional_params]]):bool
$to宛先
$subject件名
$message本文
$additional_headersメールヘッダー
$additional_paramsその他、メールシステムに渡すパラメータ情報

メールヘッダーとは、メールの送信先や送信元、使用している文字コードなど、メールに関わる様々な構成情報のことです。「ヘッダー名:値」の形式で表現し、複数ある場合にはこれを改行(\n)区切りで列挙します。

主なメールヘッダー

ヘッダー名概要
Bccブライドカーボンコピー(送信先には見えない写し)
Ccカーボンコピー(写し)
Content-Typeメール本文のコンテンツタイプ(データ形式と文字コード)
Date送信日時
From差出人アドレス
in-Reply-Toどのメールに対する返信か(オリジナルのMessage-IDヘッダーに対応)
Message-IDメールを一意に特定するメッセージID
Receivedメールの配信に際して中継したサーバー
Reply-TO返信アドレス(Fromヘッダーと異なる場合に設定)
Subject件名
To宛先
X-Mailerメールを生成したメールソフト
<?php
// メールの構成情報を設定
$to = 'wanawana@gmail.com';
$subject = '明日の会議について';        //件名
$body = "ハロー 明日会議どうですか?";   //本文
//ヘッダー情報
$headers = "From: user01@example.com\n";
$headers = "Cc: yamada@example.com\n";
$headers = "X-Mailer: PHP\n";

if (mb_send_mail($to, $subject, $body, $headers)) { // メールを送信
  print 'メール送信に成功しました。 ';
} else {
  print 'メール送信に失敗しました。 ';
}

PHP7.2以降では、引数$additional_paramsには配列を渡せるようになりました。よって、本文の$headersは以下のようにできます。

$headers = [
  'From' => 'user01@example.com',
  'Cc'   => 'yamada@example.com',
  'X-Mailer' => 'PHP 8',
];

Windows環境の場合

mb_send_mail関数を利用するには、メール送信に必要な情報をphp.iniで設定しておく必要があります。設定は環境によって異なります。

php.iniを修正します。先頭のセミコロンを削除します。

編集内容概要
;mbstring.language = “Japanese”メール送信に利用する文字コード
;sendmail_path = “\”C:\xampp\sendmail\sendmail.exe\” -t”sendmail.exeを有効化

mbstring.languageパラメータは、メール送信時に利用する文字コードを決定します。JapaneseであればISO-2022-JPを利用します。EnglishであればISO-8859-1、uniであればUTF-8を利用します。sendmail_pathパラメータには、メール送信に利用するsendmailへのパスを指定します。sendmailは、XAMPPに標準で搭載されているユーティリティです。これでsendmail機能が有効になったため、メール送信のための設定を行います。「C:\Xammpp\sendmail\sendmail.ini」を開いて次の内容を修正します。

sendmail.iniの設定項目

編集内容概要
smtp_server=smtp.example.comSMTPサーバーのホスト名
smtp_port=587SMTPサーバーのポート番号
auth_username=user01認証ユーザー名
auth_password=passwd01認証パスワード
force_sender=user01@example.com送信元アドレス

php.iniを編集した場合、Apacheを再起動します。