誰でも実装できる!PHPでメール送信を行う方法【初心者向け】現役エンジニアが解説

プログラミング初心者向けにPHPのmail関数、mb_send_mail関数を使ってメール送信を行う方法について解説しています。フォームに入力されたメールアドレスに送信する方法を実際にソースコードを書きながら説明しています。

TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。

監修してくれたメンター

nakamoto

アジマッチ有限会社 代表取締役
対応業務:PHP(Laravel)、機械学習、Vue.js、LAMP・AWS、越境EC、スマホアプリ、Unity、Rails、スマートコントラクト、講師、執筆、CTO

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プログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

簡単な入力フォームを作成し、そこからメールを送信して結果を画面に表示させます。

 

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の画面です。

送信先、タイトル、本文を入力して送信ボタンを押します。

php_mail_1

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であった(メールが送信された)ため「メールの送信が完了しました」の文字列が画面に出力されます。

php_mail_2

 

メールが送信されなかった場合の画面です。

mb_send_mail($to, $title, $content)がFALSEであった(メールが送信されなかった)ため「メールの送信に失敗しました」の文字列が画面に出力されます。

php_mail_3

 

おわりに

PHPでメール送信を行う方法について解説しました。

会員機能などを持ったサービスにおいては必要となる知識なので、覚えておくとすぐに実装でき便利です。

PHPをさらに勉強したい場合は、PHPで構文チェックを行う方法PHPとHTMLをまとめてコメントアウトする方法についても合わせて読んでみてください。

 

大石ゆかり

フォームを用意して、送信先、タイトル、本文を書いて関数を書くだけでメールが送れちゃうんですねー。

田島悠介

そうなんだ。ただ、上で言ったように問題もあるんだよ。

大石ゆかり

何でしょうか?迷惑メールですか?

田島悠介

普通に送ると、迷惑メールとして認識されてしまうことが多いんだよ。ドメイン認証とかもあるんだ。ちょっとひと工夫必要かな。続きはブートキャンプで!

 

PHPを学習中の方へ

これで解説は終了です、お疲れさまでした。

  • つまずかず「効率的に」学びたい
  • 副業や転職後の「現場で使える」知識やスキルを身につけたい

プログラミングを学習していて、このように思ったことはありませんか?

テックアカデミーのPHP/Laravelコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。

合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、PHP/Laravelを使ったWebアプリケーション開発を学べます。

まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。

時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!