【PHP】mb_send_mail()関数を使ってメールを送信!サンプルコード付き!
さまざまなサイトで「お問い合わせ」という画面をよく見かけると思います。
例えば、名前や、メールアドレスなどの必須項目を入力して送信すると「送信が完了されました。」
という画面が表示されたり、自動的に送信した内容が書かれたメールが届いたります。
これは、送信ボタンを押した後、入力した内容がサイト主に自動的に届くようになっています。
どのようにしているのかというとmb_send_mail()という関数が実行されています。
この記事では、mb_send_mail()関数を使ってメールを送信する方法を解説していきます。
初心者にも分かり易いサンプルコードも複数用意しましたのでここでメールを送信する方法を覚えましょう。
目次
mb_send_mail()とは
mb_send_mail()とは日本語などのマルチバイト文字を扱ってメールの送信を行う関数になります。
マルチバイト文字とかよくわからないと思いますので、とにかくメールの送信ができる関数である覚えておけば良いと思います。
構文
mb_send_mail()関数は以下にように書きます。
1 |
mb_send_mail($宛先, $件名, $本文, $ヘッダー); |
パラメータ
パラメータが4つありますが、それぞれのパラメータは以下のようになります。
パラメータ | 説明 |
---|---|
to($宛先) | 送信先のメールアドレス。各アドレスをカンマで区切ると、複数の宛先をtoに指定できます。 このパラメータは、自動的にはエンコードされません。 |
Subject($件名) | メールの件名。 |
Message($本文) | メールの本文。 |
Headers($ヘッダー) | ヘッダー |
戻り値
戻り値はboolean論理型である為、メール送信に成功でtrue 、失敗でfalse 返します。
mb_send_mail()の使用方法
言語と文字コードを設定
まず、日本語のメールを送信することを考えみましょう。
日本語でメールを送信するには、2つコードの追加が必要です。
言語の指定と文字コードの指定です。
下記のサンプルでは日本語とUTF-8を設定をしています。
1 2 |
mb_language("Japanese"); mb_internal_encoding("UTF-8"); |
このように言語と文字コードを設定することで
日本語でメールを送ることができます。
メールフォームから送信するサンプル
HTMLでメールフォームを作成してみましょう。
まず、下記のコードをコピーしてください。
メールフォーム画面の例
1 2 3 4 5 6 7 8 |
<body> <form action="./mail_sample.php" method="post"> <p>宛先</p><input type="text" name="to"> <p>件名</p><input type="text" name="subject"> <p>メッセージ</p><textarea name="message"></textarea> <p><input type="submit" name="send" value="送信"></p> </form> </body> |
すると下記のような画面が作成されます。
あくまでサンプルのなのでデザインはそのままですが、見たことあるような画面が作成されたと思います。
次に画面で入力されたデータをサーバーで受け取るmail_sample.phpを作成します。
mail_sample.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<body> <?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); $to = "送ってほしいメルアド"; $subject = $_POST['subject']; $message = $_POST['message']; if(mb_send_mail($to, $subject, $message)) { //送信が成功した場合の処理 } else { //送信が失敗した場合の処理 } ?> </body> |
$_POSTの後ろにある[‘subject’]や[‘message’]はメールフォームで作成したコードのnameに値します。
つまり、メールフォームで入力された値をmail_sample.phpの変数に格納しているということです。
また、最初にも言いましたが、mb_send_mail()関数の返り値はboolean(論理型)であり、true 、falseを返します。
これはメールが届いているかどうかの判定ではありません。
この返り値はあくまでも送信が完了されたかどうかですので注意しましょう。
また、本文で改行したい場合は rnを入力することで改行されます。
このように作成することで、お問い合わせ画面に入った人が画面に入力した内容を自分のメールアドレスに自動的に送信してくれるようになります。
例えば、自分がよく見るメルアドにお客様が入力した、お問い合わせ画面の内容を見たい場合は、$toに自分がよく見るメルアドを設定します。
宛先を複数指定する方法
メールの宛先は一人だけとは限りません。
複数のアドレスにメールを送ることもあります。
PHPでは、宛先を複数指定し、メールを送信することもできます。
宛先を複数指定する方法は以下のようになります。
名前 | 説明 |
---|---|
From | 送信元メールアドレス |
Reply-to | 送信元メールアドレス |
CC | CCで送信する送信アドレス |
BCC | BCCで送信するアドレス |
CCやBCCはメールを使う人ならみたことがあるかと思います。
CCやBCCが分からない方は、調べてみてください。
これを使ってCCやBCCを同時に設定してみます。
すると、下記のようになります。
宛先設定の例
1 2 3 4 |
$headers = "From: from@flytech.com"; $headers .= "rnReply-to: test1@flytech.work"; $headers .= "rnCC:test2@flytech.work"; $headers .= "rnBCC:test3@flytech.work"; |
メルアドの間はrnを使って改行します。2つ目のメルアドを記載する際に変数名の後ろに「.」をつけるのを
忘れないようにしましょう。
また、メール送信ボタンを押した際には二つのメールアドレスが必要になります。
①内容を入力し、メールを送信したAさんのメールアドレスに送る
②サイト主BさんのメールアドレスにAさんがメール送信した内容を送る
その場合、$toの中に複数のアドレスを格納しなければなりません。しかし、①のアドレスはAさんが入力したメールアドレス、②はサイト主であるBさんの固定のメールアドレスになります。つまり、複数のアドレスを指定することになりますのでカンマ(,)を使って複数アドレスを指定します。
複数のアドレスを指定したコードが下記になります。
mail_sample.php
1 2 |
$mail = $_POST['mail']; $to = "$mail, 自分のメールアドレス"; |
$toの中に$mailと自分のメールアドレスを格納し、それピリオドで繋げることで複数のメールアドレスに送信することができます。
HTMLメールを送信
HTMLメールとは
HTMLメールとは、その名の通り、HTMLで作成されたメールです。
HTML(HyperText Markup Language)とはWebページを作成するために開発された言語です。
知ってる人もいるかと思いますが、現在、インターネット上で公開されてるWebページのほとんどはHTMLで作成されています。
しかし、みなさんはメールとは、白い背景に黒い文字、もしくは絵文字を使った画面をイメージすると思います。
それに比べて、HTMLメールは文字のフォントや色、大きさを変えることができるだけでなく、画像や動画を入れるなど、
表現力の高いメールを作ることができます。
HTMLメールの送信方法
HTMLメールを送信方法は以下のようになります。
1 |
mb_send_mail($宛先, $件名, $本文, $ヘッダー); |
mb_send_mail()関数は変わりませんが、引数の$ヘッダーに
「rn」と「Content-type: text/html;」を追加すればHTMLメールが送信できます。
するとこのようなコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<body> <?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); $to = $_POST['to']; $subject = $_POST['subject']; $message = $_POST['message']; $headers = "From: info@flytech.work"; $headers = $headers . "rn"; $headers = $headers . "Content-type: text/html; charset=UTF-8"; if(mb_send_mail($to, $subject, $message, headers)) { //送信が成功した場合の処理 } else { //送信が失敗した場合の処理 } ?> </body> |
mail()との違い
mb_send_mail()関数の他にmail()関数というものがあります。
mail()もメールを送信する関数になります。
しかし、自動でエンコーディングをしてくれないので、日本語を使う場合文字化けが起きてしまいます。
それに比べて、mb_send_mail()はマルチバイトに対応されてるので日本語での送信が可能です。
mb_send_mail()の中でmail()関数を読んでいるイメージとなります。
ですので通常使う場合は、自動でエンコーディングしてくれるmb_send_mail()を使うと良いと思います。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。