【PHP】メールフォームを作ってみた(自動受付メール送信機能付き)

この記事は最終更新から4年以上が経過しています。情報が古くなっている可能性があります。

phpは勉強しようしようと思いつつ全くこれまで本腰入れてこなかったのですが、最近になってお仕事でお世話になり始めてきました。
これはもうちょっと勉強せねばと思い、第一歩としてメールフォームを作ってみたので、覚書がてら仕様など残したいと思います。

あわよくば今後雛形として使えればと、フォームのHTMLも色々盛り込んでみてます。

今回は以下の記事を参考にさせていただきました。

  • PHPでメールフォーム作成 (リンク切れ)
  • phpでメールフォームを作る 基本編 – プログラマー未満の初心者日記(2015/5/11) (リンク切れ)

仕様

メールフォームの構造

index.php

  • formに適宜required属性、autocomplete属性、placeholder属性等適用済み
  • バリデータエラーチェック済み
  • 確認ページ(form.php)から「修正」ボタンで戻ると入力したデータを保持

form.php

  • 入力された内容を表示

send.php

  • 2種類のメール送信処理実施
    1. フォーム送信者への自動受付メール
    2. サイト管理者への問い合わせ内容メール
  • 送信処理の成否により、「送信が完了しました。」「送信が失敗しました。」のテキストを表示
  • 保持しているセッションデータを破棄

メモ

  • メール送信はmail()、mb_send_mail()どちらも可能。
    → sendmailがインストールされていないサーバや添付データを扱う場合を除いて、mb_send_mail()の方がエンコード変換を行ってくれるため文字化け等気にしなくて済む
  • メールがうまく受信されない場合は以下の項目を確認する
    • PHPが使えるか、またsendmailが使えるか
    • Fromがメールアドレスの形式ではない
    • FromとToが同じメールアドレス
    • FromとReturn-Pathのメールアドレスが異なる
    • メールヘッダーを正しく設定する
    • 送信先のメールサーバにブロックされている

    参照)PHP(mb_send_mail)でメールが送信できない | MISLEAD(2015/7/18)

感想

今まで、とあるphpで受け取ったデータを違うphpに渡すのはどうやってるんだろう?とこっそり疑問に思っていたんですが、$_SESSIONでさっくり出来るんですね。
喜びと同時に、きっとこいつは奥深くてややこしいんだろうな…という気がしてなりません。

少し触れてみて、phpはセキュリティ面も同時に抑えていかないとお仕事で使うには不安が多いなと感じました。
今回はクロスサイトスクリプティング対策として、内容確認画面の出力時にHTMLエンティティ化してます。
ですが「php セキュリティ対策」のキーワードで出てくる他の攻撃については今いち理解ができず…

phpで出来ることを知りつつ、セキュリティの知識を抑えつつ、他のプログラムも作ってみようと思います。