【初心者向け】PHPでメールフォームを作る方法を解説!

公開日: 2017.08.21
更新日: 2024.01.31
PHPでメールフォームを作る方法を解説

PHPの学習を進めている方で、メールフォームを作成してみたい、という方もいるのはないでしょうか?

今回の記事では、PHPでメールフォームを作る方法を紹介していきます。

はじめに

HTMLには、「mailto:」というのがあります。

<a href=”mailto:aaa@aaa.jp”>メールはこちらへ</a>

のような形で記述することで、メーラーが自動的に立ち上がり、メールを送る事ができますが

htmlファイルに送信先アドレスが丸見えなので、これがスパムの標的になります。

そのため、メールでの問い合わせは、formとphpのようなスクリプト言語で作られたメールフォームを
使用するのがいいと思われます。

PHPではメール送信用の関数が用意されているため、メール送信プログラムを簡単に作成することができます。

メール送信に関する注意点(迷惑メール対策)

多くのプロバイダでは、迷惑メールが大量に送信されるのを防ぐための対策が行われています。
その影響で、WindowsにインストールしたPHPからはメールが送信できないことがあります。
このページのプログラムを実行した際に以下のようなメッセージが表示される場合、メールの送信に失敗しています。

Warning: mail() [function.mail]: Failed to connect to mailserver at “localhost” port 25, verify your “SMTP” and “smtp_port” setting in php.ini or use ini_set()

プロバイダから回避方法が告知されていることもありますが、環境によって設定方法が異なるため、ここでは触れません。
メールが送信できなければ、手元の環境ではなく、レンタルサーバにアップロードしたりして動作確認をするなどしてください。
(不正アクセスを防ぐため、動作確認が終わったらアップロードしたファイルを削除してください。)
今回の解説では、メールの送信ができる環境であることを前提としています。

メール送信に関する注意点(文字コード)

文字コードとは、コンピュータで文字を利用するために各文字に割り当てられたコード番号のことです。
例えば A は文字コード 41、B は文字コード 42、のように決められています。

現在インターネットでは、UTF-8・JIS・Shift-JIS・EUC-JP といった文字コードがよく利用されていますが
文字コードによって日本語に割り当てられているコード番号が異なります。

例えば「あ」の文字コードは
・UTF-8 では E38182
・Shift-JIS では 82A0
・EUC-JP では A4A2

と、異なる文字コードが割り当てられています。ですので何も考えずに文字コードを混在させると、文字コード
を判別できずに文字化けすることがあります。

現在は色々な文字コードが利用されていますが、UTF-8 が使われる割合が増えています。
UTF-8 は Unicode という文字コードの一つです。
Unicode は、世界中で使われているすべての文字を、共通の文字コードで利用できるようにするための規格です。

特にこだわりが無ければ、文字コードは UTF-8 にしておきます。
今回のメール送信でも文字コード UTF-8 で作業します。

なお、Shift-JIS でPHPプログラムを作成するのは
・文字コード 5C を含む文字を正しく表示できない
・正規表現が正しくマッチしないことがある
・一部のライブラリが正しく動作しないことがある
・データベースに Shift-JIS の利用を宣言すると、セキュリティホールが発生することがある

という問題があるのでお勧めできません。

mail関数

PHPでのメールの送信は mail 関数で行うことができます。

<?php

if (mail(“example@example.com”, “TEST MAIL”, “This is a test message.”, “From: from@example.com”))
{
echo “メールが送信されました。”;
} else {
echo “メールの送信に失敗しました。”;
}

?>

これで「example@example.com」に対して、「TEST MAIL」という件名で、「This is a test message. 」という本文のメールが送信されます。
送信元のアドレスは from@example.com になります。

mail 関数は処理の結果として、メールの送信に成功すれば TRUE を、メールの送信に失敗すれば FALSE を返します。
つまり、メール送信処理を if の条件にすることにより、「メールの送信が実行できたかどうか?」を判断しています。

文字化け対応(mb_send_mail関数)

mail 関数でメールを送信すると、日本語が文字化けしてしまう可能性があります。
ですので、通常は、日本語に対応した mb_send_mail 関数を使用します。具体的には以下のようになります。

 mb_send_mail(送信先アドレス,題名,本文,送信元アドレス);

<?php

if (mb_s end_mail(“example@example.com”, “テストメール”, “これはテストです。”, “From: from@example.com”))
{
echo “メールが送信されました。”;
} else {
echo “メールの送信に失敗しました。”;
}
?>

これで「example@example.com」 に対して、「テストメール」という件名で、「これはテストです。」という本文のメールが送信されます。

ちなみに、本文中で改行したければ \n と書きます。

それでも文字化けしている場合、mb_language 関数と mb_internal_encoding 関数で言語と文字コードを指定してみてください。

 <?php

mb_language(“Japanese”);
mb_internal_encoding(“UTF-8”);      if (mb_send_mail(“example@example.com”, “テストメール”, “これはテストです。”, “From:
from@example.com”)) {
echo “メールが送信されました。”;
} else {
echo “メールの送信に失敗しました。”;
}
?>

これらはPHPの言語設定と文字コード設定を調整する命令で、今回は「言語は日本語」「文字コードはUTF-8」に設定しています。

これらの命令は、PHPの設定ファイル(php.ini)で言語設定や文字コード設定が適切に行われていれば不要です。
ですがレンタルサーバなどでは設定がされていなかったり、他の言語や文字コードが設定されていて変更できないことがあります。
そのような場合、メール送信前にこの命令を書いておけば、文字化けを防ぐことができます。

“未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー

フォームからのメール送信

フォームからデータを入力すると、PHPでメールが送信できるプログラムを作成してみます。今回は、以下のHTMLでフォームを作成します。

 <html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>sample</title>
</head>
<body>
<form action=”send.php” method=”post”>
件名:<br />
<input type=”text” name=”subject” size=”30″ value=”” /><br />
送信者名:<br />
<input type=”text” name=”name” size=”30″ value=”” /><br />
メールアドレス:<br />
<input type=”text” name=”mail” size=”30″ value=”” /><br />
本文:<br />
<textarea name=”message” cols=”30″ rows=”5″></textarea><br />
<br />
<input type=”submit” value=”送信する” />
</form>
</body>
</html>

ファイル名は form.html としておきます。これをブラウザで表示すると、以下のように表示されます。

ブラウザ表示結果

このフォームからメールを送信する場合、form.html と同じフォルダに send.php を作成し、以下の内容を書きます。

<?php

$message = “名前:” . $_POST[“name”] . “\n本文:” . $_POST[“message”];

if (!mb_send_mail(“example@example.com”, $_POST[“subject”], $message, “From:
” . $_POST[“mail”])) {
exit(“error”);
}

?>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>sample</title>
</head>
<body>
<p>メールが送信されました。</p>
</body>
</html>

これで form.html にブラウザからインターネットアクセスし、送信ボタンを押すと「example@example.com」にメールが送信されます。

if (!mb_send_mail(~)) { ~ } は「メールが送信できなければ」という条件です。
mb_send_mail 関数は処理の結果として、メールの送信に成功すれば TRUE を、メールの送信に失敗すれば FALSE を返すため
条件の先頭に ! を付けることにより、メールの送信に失敗したときにエラーメッセージを表示させることができます。

exit() はプログラムを終了するための命令です。
カッコの中に文字列を指定すると、その文字列を出力してからプログラムを終了します。
これにより、メールが送信できなかった場合は メールが送信されました。 の文字列が表示されなくなります。

さいごに

PHPでのメールフォーム作成、いかがだったでしょうか。
実際のページでは、入力チェックやエラーロジックなどまだ実装すべきコードがありますので段階的に覚えていってください。
このようにPHPにはもともと便利な関数が多数あります。
PHPマニュアルを眺めるだけでも有益な情報が得られたりするので、是非興味がある方はご覧になってください。

DMM WEBCAMPについて

DMM WEBCAMPは、最短1ヶ月でプログラミング・Webデザインを習得できる「ビジネス教養コース」を展開しています。オンラインで講師が付くため、自宅から質問し放題です。

DMM WEBCAMPを運営する株式会社インフラトップ では、「学びと仕事を通して人生を最高の物語にする」という理念で会社を経営しています。

キャリアアップを目指す方は、この機会に私達と一緒にプログラミングを学んでみませんか?

【インタビュー】コツコツ独学×スクールで実践。未経験からエンジニアに転職!

プログラミング未経験から、書籍での独学期間で基礎を固め、スクールを効率的に活用し、見事エンジニア転職を成功させたWebCamp受講生にお話を伺いました。

「低予算でも効率的にエンジニア転職のスキルをつける方法は?」

「未経験でも本当にエンジニアになれるの?」

といった疑問を持っている方は、是非この記事を読んでみてくださいね!

https://web-camp.io/magazine/archives/12654

関連記事

資料請求

  • 短期集中で最速エンジニア転職を実現-転職成功者インタビュー一覧

    DMM WEBCAMPでは転職成功率98%を実現しています。本資料では、元警察官や元ラーメン屋など様々なバックグラウンドを持つ卒業生の声をお届けします。

    資料をダウンロードする
  • IT技術がもたらす3つの変化と身につけるべきスキル

    IT技術の発展により、今後10~20年程度で47%の仕事がなくなると言われています。どのような変化が訪れ、私達はどのようなスキルを身につけるべきかを解説します。

    資料をダウンロードする
  • 未経験がフリーランスエンジニアになる方法-年収アップで自由な働き方を手に入れる

    働き方改革やリモートワークの影響でフリーランスという働き方の人気は高まりつつあります。フリーランスエンジニアとして活躍するために必要な情報をお届けします。

    資料をダウンロードする

© 2024 WEBCAMP MEDIA Powered by AFFINGER5