【PHP】コンタクトフォームの作り方 第2回「PHP」

ここまでの記事はこちら
第2回は「PHP」です。
前回 HTML と CSS でお問い合わせフォームのレイアウトを作成したので、今回は PHP でお問い合わせフォームの機能を実装していきます。
はじめに
PHP コードを書き始める前に、どのようにお問い合わせフォームが動くのか全体の流れを紹介します。
お問い合わせする人は「名前・メールアドレス・件名・問い合わせ内容」を入力して送信ボタンを押します。
プログラム側では、送信ボタンが押されたら全ての項目が入力されているかをチェックします。
全ての項目が入力されている場合は
- メールを送信
- 完了メッセージ表示
- 入力された項目をクリア
入力されていない項目がある場合は
- エラーメッセージ表示(入力された項目はそのまま残しておく)
という処理をします。
全体の流れ

PHP
少し長いですが、一気に書いてしまいましょう!
追加・変更しているコードは1~49・72~82・86・89・92・95行目です。
31・34行目
31・34行目に書いている “\r\n” は改行コードです。
ダブルクォーテーション “ で囲む必要があります。
37行目
この1行でメールを送信することができます。
mb_send_mail($to, $subject, $message, $headers);
$to | 宛先(カンマ区切りで複数のメールアドレスに送信できます) |
---|---|
$subject | 件名 |
$message | 本文 |
$headers | 差出人、Cc、Bcc (複数追加する場合は d”\r\n” で区切ります) |

エラーメッセージ
72~76行目では、エラーメッセージの表示をしています。
$err_msg が空でない場合($err_msg に文字列がセットされている場合)にエラーメッセージを表示します。

送信完了メッセージ
78~82行目では、送信完了メッセージの表示をしています。
$complete_msg が空でない場合($complete_msg に文字列がセットされている場合)に送信完了メッセージを表示します。

完成
これで全て完成です!
メールが送信されるかテストしてみてください。
メール送信について
ローカル環境でメール関数を使う場合、別に設定が必要になる場合があります。
初心者の方は、ローカル環境でなくウェブサーバー上でテストするのが簡単です。
mac をお使いの方はこちらの記事も参考にしてみてください。

まとめ
いかがだったでしょうか?
一番始めにも書きましたが、最近は WordPress でウェブサイトを作ることが多くなり、お問い合わせフォームはプラグインで簡単に作成できるようになりました。
しかしメール送信は必須の機能です。
私が今までに頂いたウェブサービスやショッピングサイトの開発の仕事でも、メール送信機能はほぼ100%実装しました。
例えばショッピングサイトの場合
- 受注メール(管理者宛)
- 注文受付メール(お客様宛)
- 支払確認メール(お客様宛)
- 発送メール(お客様宛)
- レビュー依頼メール(お客様宛)
- 新着レビューメール(管理者宛)
- ニュースレター(お客様宛)
など、たくさん種類があります。
さくっとメール機能を実装できるようになっておくと必ず役に立つと思います。

初めまして!PHPのお問い合わせフォーム作り、とても勉強になっています!
コードを写経してローカル環境で実行したのですが、
メールが指定したメールアドレスに届かず苦戦しています。
もしよろしければアドバイスをお願いします!
もしかしたら、インストラクションの
が関係しているのではと睨んでいます。
よろしくお願いします!
当サイトを見つけて頂きありがとうございます
私の方でも Mac + XAMPP でテストしたところ、メール送信は問題なく出来ているので Postfix の設定が原因かと思います。
XAMPP の php.ini ファイルを開いて、以下の2箇所が有効になっていることをご確認ください。
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP=localhost
; http://php.net/smtp-port
smtp_port=25
また、以下の記事の「Postfix の起動」「メールの送信テスト」も試してみると良いかと思います。
https://codeforfun.jp/how-to-send-email-with-postfix-and-gmail/
Saraさん、ご返信いただきありがとうございます!
「Postfixの起動」の部分を再度実行したところ、
「メールの送信テスト」とPHPお問い合わせフォーム
両方とも機能しました!
的確なご指摘ありがとうございました^^
追加で一つ質問なのですが、
現在知り合いの小さな会社のHPを製作しており、
お問い合わせフォームも設置したいと思っています。
インターネット上にサイトを置く時、セキュリティ面で
気をつけるべき点を教えていただけると嬉しいです。
よろしくお願いします!
ご報告ありがとうございます。
メール送信できたようで安心しました!
セキュリティ対策はたくさんあって、対応方法もホームページによって様々なのでお答えするのは難しいのですが
・メールアドレスの形式チェック
・input フォームの文字数制限
は最低限入れておくと良いかと思います。
どちらも PHP で書いても良いですし、HTML 属性を使うこともできます。
あとは「送信する場合はチェックしてください」のようなチェックボックスを置いたり、もし余裕があれば Token 処理や Google の reCAPTCHA 認証も入れておくとさらに安心です
セキュリティ対策は奥が深いですね…!
まずは、メールアドレスの形式チェック、inputの字数制限の実装から始めてみようと思います!
色々と教えてくださりありがとうございました😊
これからも応援してます!
HTML 属性の使い方は以下の記事でも紹介しているので、もしよろしければ参考にしてみてください。
https://codeforfun.jp/reference-html-tag-input-type-email/
https://codeforfun.jp/reference-html-tag-input-type-text/
少しでも当サイトがお役に立てば幸いです
わ!関連する情報も紹介してくださりありがとうございます!
今後もサイトで勉強させていただきます^^
はじめまして!
PHPのお問い合わせフォームづくりで苦戦しています・・・。
開発環境↓
Windows/VisualStadioCode
問題点↓
・設定アドレスにメールが届かない
・アラート表記が2つとも常に表示されている
・プレイスホルダーが表示されているはずのところにコードが表記されてしまう(<?php echo $name; ?>)
試したこと↓
・お問い合わせからの送信
・表示されてしまうコードを削除してみる
・コードを全部コピペ
ポートフォリオ用サイトのお問い合わせフォームなのですが、初心者なのでいろいろ躓いて問題だらけになってしまいました・・・
アドバイスいただけると幸いです。
当サイトを見つけていただきありがとうございます!
私の方でも再度サンプルコードをコピペして試してみましたが、メール送信できております。
以下の問題点
はサンプルコードをコピペすれば問題なく動くと思うのですがいかがでしょうか?
メールが送信されないのはサーバー設定の問題かと思います。
レンタルサーバーを使ってテストしている場合は不要ですが、MAMP や XAMPP などを使っている場合は以下のような設定が必要になります。
https://codeforfun.jp/how-to-send-email-with-postfix-and-gmail/
レンタルサーバー上にファイルをアップロードしてテストするのが簡単なのでお試しください。
すでにレンタルサーバー上でテストしている場合は
もご確認ください