誰でも実装できる!PHPでメール送信を行う方法【初心者向け】

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

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

PHPでメールを送信する方法について解説しています。

mail関数、mb_send_mail関数を使って簡単にメールを送信することができます。フォームに入力されたメールアドレスに簡単にメール送信することができるので、ぜひ覚えておきましょう。

そもそもPHPが何か分からない場合は、先にPHPとはの記事をご覧ください。

 

なお本記事は、TechAcademyのPHPオンライン講座の内容をもとにしています。

 

大石ゆかり

田島メンター!PHPでメールを送信することは出来ますか?

田島悠介

ちょっと問題があるけど、関数を書くだけで送信できるんだ。

大石ゆかり

そんなに簡単に送信出来るんですか?

田島悠介

そうなんだ。mail関数とmb_send_mail関数について見ていこう!

 

mail関数、mb_send_mail関数とは

mailとmb_send_mailはどちらもメールを送信する際に使用される関数です。

mailとmb_send_mailの違い
mb_send_mailは日本語などのマルチバイト文字を扱ってメールの送信を行うことができます。

 

メール送信の書き方

mailの場合

mailは以下のように記述します。

mail(送信先,タイトル,本文,追加ヘッダ,追加コマンドラインパラメータ)

()内の1番目に送信先のメールアドレス、2番目にタイトル、3番目にメールの本文が入ります。
4番目にはメールヘッダに追加される情報を入力します。省略が可能です。
5番目には追加コマンドラインパラメータを設定します。省略が可能です。

 

mb_send_mailの場合

mb_send_mailは以下のように記述します。

mb_send_mail(送信先,タイトル,本文,追加ヘッダ,追加コマンドラインパラメータ)

mailのときと同じく()内の1番目に送信先のメールアドレス、2番目にタイトル、3番目にメールの本文を入力します。省略が可能な4番目、5番目のパラメータについても同様です。

 

日本語で送信する場合

mb_send_mailで日本語のメールを送る場合は、最初に以下の2行を挿入します。

mb_language("Japanese");
mb_internal_encoding("UTF-8");

mb_languageは言語を設定する関数です。mb_internal_encodingでは文字のエンコードを指定します。

 

大石ゆかり

mail関数とmb_send_mail関数は、それぞれ別ですか?

田島悠介

mb_send_mail関数は、内部でmail関数を呼んでいるんだ。こういう形をラッパー関数っていうんだ。

大石ゆかり

ラッパー関数?

田島悠介

mail関数をラップするように包んで、何か機能を付け加えた物って考えるといいよ。

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

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

まず送信先、メールのタイトル、本文を入力するフォームを設置した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>

次に受け取り側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>

mailform.htmlの画面です。ここに送信先、タイトル、本文を入力して送信ボタンを押します。

php_mail_1

メールが送信された場合の画面です。 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を勉強していて、

  • もっと効率的に勉強したい
  • 誰かに聞きながら学びたい
  • 自分でWebサービスを作りたい

と思ったことはないでしょうか。

 

そんな方のために、TechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

独学に限界を感じている場合はご検討ください。