誰でも実装できる!PHPでメール送信を行う方法【初心者向け】現役エンジニアが解説
プログラミング初心者向けにPHPのmail関数、mb_send_mail関数を使ってメール送信を行う方法について解説しています。フォームに入力されたメールアドレスに送信する方法を実際にソースコードを書きながら説明しています。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
PHPでメールを送信する方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
mail関数、mb_send_mail関数を使って簡単にメールを送信できます。
フォームに入力されたメールアドレスに簡単にメール送信できるので、ぜひ覚えておきましょう。
目次
そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。
田島メンター!PHPでメールを送信することはできますか?
ちょっと問題があるけど、関数を書くだけで送信できるんだ。
そんなに簡単に送信できるんですか?
そうなんだ。mail関数とmb_send_mail関数について見ていこう!
mail関数、mb_send_mail関数とは
mailとmb_send_mailは、どちらもメールを送信する際に使用される関数です。
mailとmb_send_mailの違いとして、mb_send_mailは日本語などのマルチバイト文字を扱ってメールの送信を行うことができます。
メール送信の書き方
mailの場合
mailは以下のように記述します。
mail(送信先,タイトル,本文,追加ヘッダー,追加コマンドラインパラメータ)
送信先には、送信先のメールアドレスを指定します。
タイトルには、メールのタイトルを指定します。
本文には、メールの本文を指定します。
追加ヘッダーには、メールの追加ヘッダー情報を指定します。
追加ヘッダーとは、From、Cc、Bccなどの送信先情報です。
追加ヘッダーは省略可能です。
追加コマンドラインパラメータには、 追加のフラグをコマンドラインオプションとして、メール送信プログラムに渡す際に使用可能です。
追加コマンドラインパラメータは、省略可能です。
mb_send_mailの場合
mb_send_mailは以下のように記述します。
mb_send_mail(送信先,タイトル,本文,追加ヘッダー,追加コマンドラインパラメータ)
送信先には、送信先のメールアドレスを指定します。
タイトルには、メールのタイトルを指定します。
本文には、メールの本文を指定します。
追加ヘッダーには、メールの追加ヘッダー情報を指定します。
追加ヘッダーとは、From、Cc、Bccなどの送信先情報です。
追加ヘッダーは省略可能です。
追加コマンドラインパラメータには、 追加のフラグをコマンドラインオプションとして、メール送信プログラムに渡す際に使用可能です。
追加コマンドラインパラメータは、省略可能です。
日本語で送信する場合
mb_send_mailで日本語のメールを送る場合は、最初に以下の2行を挿入します。
mb_language("Japanese");
mb_internal_encoding("UTF-8");
mb_language(“Japanese”);と指定することで日本語指定が可能です。
mb_languageは言語を設定する関数です。
mb_internal_encoding(“UTF-8”);と指定することで、文字コードをUTF-8に指定します。
mb_internal_encodingでは文字のエンコードを指定します。
mail関数とmb_send_mail関数は、それぞれ別ですか?
mb_send_mail関数は、内部でmail関数を呼んでいるんだ。こういう形をラッパー関数っていうんだ。
ラッパー関数?
mail関数をラップするように包んで、何か機能を付け加えた物って考えるといいよ。
[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは
実際に書いてみよう
簡単な入力フォームを作成し、そこからメールを送信して結果を画面に表示させます。
mailform.htmlの作成
まず送信先、メールのタイトル、本文を入力するフォームを設置したmailform.htmlを作成します。
mailform.htmlサンプルコード
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<p>
<h2>メール送信フォーム</h2>
</p>
<form action="./confirm.php" method="post">
<p>
送信先
</p>
<input type="text" name="to">
<p>
メールのタイトル
</p>
<input type="text" name="title">
<p>
本文
</p>
<textarea name="content" cols="50" rows="5"></textarea>
<p>
<input type="submit" name="send" value="送信">
</p>
</form>
</body>
</html>
mailform.html解説
mailform.htmlで重要な点は次の行です。
この行では、フォームを送信すると、送信先はconfirm.phpファイルであり、送信方法はPOST送信であることを意味しています。
<form action="./confirm.php" method="post">
mailform.html表示結果
mailform.htmlの画面です。
送信先、タイトル、本文を入力して送信ボタンを押します。
confirm.phpの作成
次に受け取り側confirm.phpで、それぞれを$to、$title、$contentの変数に格納してmb_send_mailでメールの送信を行います。
また、if~elseによってmb_send_mail($to, $title, $content)の結果がTRUEであれば「メールの送信が完了しました」、入力漏れなどによって結果がFALSEになった場合は「メールの送信に失敗しました」と出力されるように設定します。
confirm.phpサンプルコード
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$to = $_POST['to'];
$title = $_POST['title'];
$content = $_POST['content'];
if(mb_send_mail($to, $title, $content)){
echo "メールを送信しました";
} else {
echo "メールの送信に失敗しました";
};
?>
</body>
</html>
confirm.php解説
<?phpでは、PHPのプログラムを開始することを意味します。
mb_language(“Japanese”);では、言語を日本語に指定します。
mb_internal_encoding(“UTF-8”);では、文字コードをUTF-8に指定します。
$to = $_POST[‘to’];では、変数$toに$_POST[‘to’]を代入します。
これにより、mailform.htmlで用意された送信元が代入されます。
$title = $_POST[‘title’];では、変数$titleに、$_POST[‘title’]が代入されます。
これにより、mailform.htmlで用意されたメールのタイトルが代入されます。
$content = $_POST[‘content’];では、変数$contentに$_POST[‘content’]が代入されます。
これにより、mailform.htmlで用意された本文が代入されます。
if(mb_send_mail($to, $title, $content)){では、mb_send_mailの処理が成功した場合という条件を指定しています。
echo “メールを送信しました”;では、mb_send_mailの処理が成功した場合、メールを送信しましたと表示されます。
} else {では、if(mb_send_mail($to, $title, $content)){ではない場合、という条件を指定しています。
echo “メールの送信に失敗しました”;では、if(mb_send_mail($to, $title, $content)){ではない場合、メールの送信に失敗しましたと表示されます。
};では、ifとelseの処理を終了します。
?>では、PHPの処理を終了します。
confirm.php表示結果
メールが送信された場合の画面です。
mb_send_mail($to, $title, $content)がTRUEであった(メールが送信された)ため、「メールの送信が完了しました」の文字列が画面に出力されます。
メールが送信されなかった場合の画面です。
mb_send_mail($to, $title, $content)がFALSEであった(メールが送信されなかった)ため、「メールの送信に失敗しました」の文字列が画面に出力されます。
おわりに
PHPでメール送信を行う方法について解説しました。
会員機能などを持ったサービスにおいては必要となる知識なので、覚えておくとすぐに実装でき便利です。
フォームを用意して、送信先、タイトル、本文を書いて関数を書くだけでメールが送れちゃうんですねー。
そうなんだ。ただ、上で言ったように問題もあるんだよ。
何でしょうか?迷惑メールですか?
普通に送ると、迷惑メールとして認識されてしまうことが多いんだよ。ドメイン認証とかもあるんだ。ちょっとひと工夫必要かな。続きはブートキャンプで!
PHPを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのPHP/Laravelコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、PHP/Laravelを使ったWebアプリケーション開発を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!