PHPでのメール送信方法|mail関数とmb_send_mail関数、2つのやり方について解説
- SE
- PHPで関数を使ってメールを送る方法について教えていただけますか。
- PM
- PHPで関数を使ってメールを送るにはmail関数とmb_send_mail関数があります。環境依存文字が原因で文字化けしてしまう際の対応法もご紹介ししましょう。
この記事でわかること [見る]
PHPでのメール送信とは?
PHPを用いてできることとして「メール送信」があり、PHPにはメール送信するための関数が用意されています。
主に企業などのホームページに設置されているお問い合わせフォームやメールフォームは、このPHPを用いたメール送信プログラムにより送信されていることがほとんどと考えてもよいでしょう。
今回はそのPHPでメール送信する方法について解説していきます。
PHPでメールを送る方法
PHPでメールを送信する方法として、代表的な関数は2つあります。
方法1:mail関数
方法2:mb_send_mai関数
※こちらはエンコード変換機能を搭載しています。
関数【mail】とは?
PHPのメール送信関数のmailは、以下のようになります。
1 2 |
mail ( string $to , string $subject , string $message , array or string $additional_headers = [] , string $additional_params = "" ) |
このmail関数のカッコ内にはstring $toなどが入っています。初心者の方でコードの見方がわからない方は、まずここで躓いてしまうことも考えられますので解説します。
string $toとはstringが文字列を表しており、文字列型の$toというものが入ります。
それぞれのパラメータの解説は以下になります。
・$to
メールを送信したいアドレスが入ります。
・$subject
メールの件名が入ります。
・$message
メールの本文が入ります。
改行も含めた文字列を代入できますが、一行あたりの長さは70文字未満でなければなりません。そのため日本語の場合は35文字以下になります。
・$additional_headers (オプション)
通常のメールのようにFrom、Cc、Bccなどを代入できます。PHP7.2.0以降はstring型とarray型どちらでも構いません。それ以前はstring型のみになります。
・$additional_params (オプション)
メール送信プログラムは、設定オプションであるsendmail_pathにより設定され、メール送信のプログラムに渡す際に、追加のフラグをコマンドラインオプションとして使用できます。
※オプションのパラメータは定義されていなくても動作します。
実際に使用する場合のコードは以下のようになります。
1 2 3 4 5 6 7 8 |
$to = 'aaaa@sample.com'; //送信先の指定 $subject = 'test'; //件名 $message = 'Hello World!'; //本文 $additional_headers = array('From' => "a1@test.com', Replay-To' => a1@test.com); //FromとReplay-Toの指定 mail ($to ,$subject ,$message ,$additional_headers); |
この関数はbool型の関数になるので送信が正常にできるとtrue、できなければfalseが戻り値となります。
また、この関数では日本語を送信した際に文字化けを起こしてしまう可能性があります。そのため日本語を扱うメール送信プログラムを作成する場合は次の章の【mb_send_mail】の使用をお勧めします。
関数【mb_send_mail】とは
次に関数【mb_send_mail】は、以下のようになります。
1 2 |
mb_send_mail ( string $to , string $subject , string $message , array orstring $additional_headers = [] , string or null $additional_params = null ) |
それぞれのパラメータの解説は以下になります。
・$to
メールを送信したいアドレスが入ります。
・$subject
メールの件名が入ります。
・$message
メールの本文が入ります。
・$additional_headers (オプション)
通常のメールのようにFrom、Cc、Bccなどを代入できます。複数のヘッダを追加する場合は改行コードを”\r\n”とし区切ります。
・$additional_params (オプション)
この関数を利用しメール送信する場合に正しいReturn-Pathを設定するために利用すると便利です。
※オプションのパラメータは定義されていなくても動作します。
先程この関数はエンコード変換機能を利用できると解説しました。
この関数では事前にmb_languageとmb_internal_encodingで指定された文字コードで$subjectと$messageを送信できます。
実際のコードは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 |
mb_language("Japanese"); //言語の指定 mb_internal_encoding("UTF-8"); //文字コードの指定 $to = 'test@example.com'; //送信先アドレスの指定 $subject = 'こんにちは、これはテストです。'; $message = 'お元気ですか?私は毎日健康に過ごしていますよ。また会いましょう。'; $additional_headers = "From: a1@test.com\r\nReply-To: a1@test.com\r\n";//送信元の設定 mb_send_mail ($to, $subject, $message, $additional_headers); |
しかし、このままのコードでは環境依存文字と呼ばれる「髙」や「﨑」などの文字が実際にメールで送信された場合に文字化けしてしまいます。
次の章では、この環境依存文字を文字化けさせずにメール送信する方法を解説します。
mb_send_mailで環境依存文字を送信する方法は?
PHPで用意されている【mb_send_mail】では簡単にメールを送信することを実装できますが、先程の例のような環境依存文字や半角カナが文字化けして?になってしまいます。
この対処法としてISO-2022-JP-MSでエンコードします。
先程のコードに付け加えると以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mb_language("Japanese"); //言語の指定 mb_internal_encoding("UTF-8"); //文字コードの指定 $to = 'test@example.com'; //送信先アドレスの指定 $subject = 'こんにちは、これはテストです。'; $message = 'お元気ですか?私は毎日健康に過ごしていますよ。また会いましょう。'; $additional_headers = "Content-Type: text/html; charset=\"ISO-2022-JP\";\r\n From: a1@test.com\r\n Reply-To: a1@test.com\r\n"; //送信元の設定とヘッダのエンコード指定 mb_send_mail ($to, mb_encode_mimeheader($subject,'ISO-2022-JP-MS'), mb_convert_encoding($message ,'ISO-2022-JP-MS'), $additional_headers); |
ここではmb_send_mail内で$subjectと$messageをエンコードします。
$subject部分では【mb_encode_mimeheader】
$message部分では【mb_convert_encoding】
を利用しています。
- SE
- 環境依存文字の文字化けにはエンコードが必要なのですね。
- PM
- その通りです。mb_send_mail関数でメール送信すると文字化けに対処できます。
PHPでのメール送信のまとめ
PHPでメール送信する方法としては以下の2つの方法があります。
・mail関数
・mb_send_mail関数
日本語を主に扱うのであればmb_send_mail関数でメール送信することで、文字化けに対処できます。
Search キーワード検索
Popular 人気の記事
-
【VB.NET入門】DataGridViewの使い方まとめ
公開: 更新:
reccomended おすすめ記事
-
【.NETが統合】.NET 5の概要と今後のリリース予定
公開: 更新: