PHPでのメール送信方法|mail関数とmb_send_mail関数、2つのやり方について解説
- システム
エンジニア - PHPで関数を使ってメールを送る方法について教えていただけますか。
- プロジェクト
マネージャー - 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】
を利用しています。
- システム
エンジニア - 環境依存文字の文字化けにはエンコードが必要なのですね。
- プロジェクト
マネージャー - その通りです。mb_send_mail関数でメール送信すると文字化けに対処できます。
PHPでのメール送信のまとめ
PHPでメール送信する方法としては以下の2つの方法があります。
・mail関数
・mb_send_mail関数
日本語を主に扱うのであればmb_send_mail関数でメール送信することで、文字化けに対処できます。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)