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.com | SMTPサーバーのホスト名 | 
| smtp_port=587 | SMTPサーバーのポート番号 | 
| auth_username=user01 | 認証ユーザー名 | 
| auth_password=passwd01 | 認証パスワード | 
| force_sender=user01@example.com | 送信元アドレス | 
php.iniを編集した場合、Apacheを再起動します。