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を再起動します。