PHPでのメール送信方法|mail関数とmb_send_mail関数、2つのやり方について解説

公開日時:   更新日時:
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は、以下のようになります。

この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により設定され、メール送信のプログラムに渡す際に、追加のフラグをコマンドラインオプションとして使用できます。

※オプションのパラメータは定義されていなくても動作します。

実際に使用する場合のコードは以下のようになります。

この関数はbool型の関数になるので送信が正常にできるとtrue、できなければfalseが戻り値となります。

また、この関数では日本語を送信した際に文字化けを起こしてしまう可能性があります。そのため日本語を扱うメール送信プログラムを作成する場合は次の章の【mb_send_mail】の使用をお勧めします。

関数【mb_send_mail】とは

次に関数【mb_send_mail】は、以下のようになります。

それぞれのパラメータの解説は以下になります。
・$to
メールを送信したいアドレスが入ります。

・$subject
メールの件名が入ります。

・$message
メールの本文が入ります。

・$additional_headers (オプション)
通常のメールのようにFrom、Cc、Bccなどを代入できます。複数のヘッダを追加する場合は改行コードを”\r\n”とし区切ります。

・$additional_params (オプション)
この関数を利用しメール送信する場合に正しいReturn-Pathを設定するために利用すると便利です。

※オプションのパラメータは定義されていなくても動作します。

先程この関数はエンコード変換機能を利用できると解説しました。

この関数では事前にmb_languageとmb_internal_encodingで指定された文字コードで$subjectと$messageを送信できます。

実際のコードは以下のようになります。

こちらもbool型の関数になるので送信が正常にできるとtrue、できなければfalseが戻り値となります。

しかし、このままのコードでは環境依存文字と呼ばれる「髙」や「﨑」などの文字が実際にメールで送信された場合に文字化けしてしまいます。

次の章では、この環境依存文字を文字化けさせずにメール送信する方法を解説します。

mb_send_mailで環境依存文字を送信する方法は?

PHPで用意されている【mb_send_mail】では簡単にメールを送信することを実装できますが、先程の例のような環境依存文字や半角カナが文字化けして?になってしまいます。

この対処法としてISO-2022-JP-MSでエンコードします。

先程のコードに付け加えると以下のようになります。

ここでは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関数でメール送信することで、文字化けに対処できます。


FEnetへの登録は左下のチャットが便利です 経験者優遇! 最短10秒!

.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags

1