私のパソコン雑記帖

ファイル添付メールフォーム(5)
汎用スクリプト

カテゴリー: PHP

ファイル添付メールフォーム

フォームに入力した内容を指定したメールアドレスに送信するスクリプトです。文字コードはutf-8。できるだけ汎用性のあるスクリプトを目指しました。このスクリプトの使用者が準備するのは次の3点です。

  1. フォームの構成要素を規定するcsvファイルを作成する。これはエクセル等を使って行います。
  2. 実行スクリプトの冒頭で、メール送信先アドレスを設定します。また、二重投稿を禁止するかどうかも設定します。
  3. 好みに応じてスタイルシートを編集します。

フォームの構成要素

下図のようにエクセル等を使って設定します。

フォームの構成要素を決めるマトリックス

殆ど自明ですが、

  1. 適用欄(A列)がブランクの項目は反映されません。
  2. type欄が select または radio の項目は、対応する配列が用意されています。
  3. data size は許容する最大データサイズ(バイト)。
  4. 書式は、入力チェックの function 名に対応しています。ただし file の場合は許容する拡張子を記入します。
  5. 添付を指定できるファイル形式は、jpg/png/gif/doc/xls/txt/docx/xlsx/mp3 です(追加可能)。
  6. 上の例では分かりませんが、fieldset を適用してグループ分けも出来る様になっています。

編集したエクセルファイルを、csvファイルとして保存します(カンマ区切り)。スクリプトはこのcsvファイルを参照します。つまり、フォームメールのカストマイズはエクセル画面上で行なえます。


実行スクリプトの設定部分

次のように設定します(設定箇所は send.php にあります)。

// 初期設定
$to="xxxx@xxxx.xx"; //フォームメールの送信先
$dbl=1; //同一と思われる発信元からの連続送信に制約を設ける。設けない場合は "0"。
$intbl=10; //連続とみなす時間間隔(分単位)。
// 初期設定(closure)


スクリプト(フリー)

こちらです。このサンプルは上記エクセル画面の仕様とは若干異なります。このサンプルは実行できません。テストは 実行可能なスクリプトをダウンロードして行なってください。

このサンプルの特徴として、最初の入力画面で添付ファイル名を入力しますが、ファイルアップロード「フォームの設計」で述べた不具合に対処するため、次の様な工夫をしています。

  1. 入力されたファイルは、ファイル・チェックがパスしていれば、サーバー側のフォールダに保存します。(その際ファイル名の頭に10桁のユニーク数を加えます。ファイル名の重複を避けるためです。)
  2. 他の項目がチェックパスできず元の入力画面に戻る時、入力されたファイル名を表示します。再入力は不要です。
  3. 送信画面に引き渡すのは、フォールダ名とファイル名のみ。送信画面ではそこからファイルを読込みます。

補足

このスクリプトを応用して、フォーム入力をデータベースに保存することもできます。
このスクリプトはダウンロードした人の責任のもとに使用してください。



コメント


【管理人】  2011年08月11日 09時34分

【かしこ】様
利用者がこのスクリプトを利用して、メール実装の部分をデータベース保存に変更することは可能です。現状のスクリプトのまま、オプション設定で可能ということではございません。

【かしこ】  2011年08月10日 01時20分

りようさしてもらっています。
ところで・・・
>このスクリプトを応用して、フォーム入力をデータベースに保存することもできます。
これがすごく気になるのです。
方法ってあるのですか?
アンケートの回収&データベースにしたいのです。

【管理人】  2010年06月29日 12時07分

4月12日のメッセージで紹介した
http://solar.riok.net/formSample/form.php
は削除されています。

【next】  2010年04月17日 01時07分

管理人様
ご対応ありがとうございます。
test.phpでFile not uploadedとでてしまいました。
貴サーバのアップローダは問題なく使えましたので、当方のサーバの問題かと思います。
色々調べた結果、当サーバではupload_max_filesizeというのが2Mから変更できないとの事が原因なのかもというところに行き着きました。大変お手数をお掛けしましたが、こちらでサーバを別のところに移るなどの対応が必要となりますので、原因を追究した後にまた利用させていただきます。
誠にありがとうございました。

【管理人】  2010年04月12日 11時48分

【next】様
4月5日以来のログをうっかり削除してしまいましたが悪しからず。色々試していただきましたが「添付無し」になるとのこと。理由は分かりませんが、サーバーがアップファイルを認識していないように思われます。なんどもお手数をおかけしますが、http://solar.riok.net/test.lzh をDL解凍して、test.php を貴サーバーで試していただけませんか。これはアップファイルの受信処理を行う単純なテストコードで、もしファイルをアップロードしても認識されなければ、File not uploaded と表示されます(おそらくそんなことはないと思いますが念の為)。それと formSample.lzh をDL解凍したものを、
当サーバーにアップロードしています。http://solar.riok.net/formSample/form.php
これも試していただけませんでしょうか(ファイルを選択してチェックボタンを押すだけ)。当方で確認している限り問題は再現されません。

【next】  2010年04月05日 15時11分

初めまして、お忙しいところ失礼致します。
私NEXT ENGINEER'S .NET
http://nextengineers.net/
というサイトを作っております町田と申します。
この度【PHP ファイル添付メールフォーム】をサイトで使用したくダウンロードさせていただきました。
使用目的としては10MB程度のmp3ファイルを受け取るフォームとして利用したいのですが、添付可能な拡張子にmp3がなく"audio/mpeg"=>"mp3"等と勝手に書き込んだりもしてみましたが動作しませんでした。
プログラムは完全に初心者で右も左も分かりません。
このプログラムの自由度の高さ、デザイン、機能性などとても気に入っておりますので、大変お忙しいこととは思いますが簡易にmp3に対応させる方法がございましたらご教授いただければと思います。よろしくお願い致します。

NEXT ENGINEER'S .NET
代表 町田智史