PHP工房トップ

HOME > 【MailForm05】多機能メールフォーム(ファイル添付機能付き)

【MailForm05】PHP多機能メールフォーム ファイル添付機能付き(有料版)

ファイル添付メール

フリーのメールフォーム多機能版にファイル添付機能を搭載したプログラムです。
添付できるファイルは画像だけでは無く、一般的なファイルであれば(画像にかぎらず)添付が可能です。また複数設置可能です。

ファイル内にて許可する拡張子を指定できます
デフォルトは以下の設定となっています。

サーバー、またはプロバイダーにより異なりますが、ファイル容量の制限がありますので注意下さい。
一般的なサーバーでは合計サイズが10MBまたは20MB程度です。
デフォルトは1ファイルあたり5MBです。ですので、この場合、3つ以上は難しいと思います。
そもそもメーラーで送る場合でも10MB以下が無難と言われますよね。それよりも大きい場合にはFireStorage等で送ってもらうのが一般的です。
また、サーバーのphp.iniの設定によっても制限があります。詳細は下記「注意事項」をご確認下さい。
システムの性質上セキュリティも意識する必要もあります。セキュリティについてはこちらをご確認下さい

デフォルト添付可能ファイル拡張子
(jpg、jpeg、gif、png、pdf、txt、xls、xlsx、zip、lzh、doc)

ひとまずこれだけあれば実務では問題ないでしょう。(ちなみに.mp3、.ai、.psd、html、css等も可能です)

サンプルデモにて実際に添付ファイル付きで送信できます。

【2016/5/16追記】PHP7.0.3では下記不具合は改善されているようです。
(エックスサーバーではPHP7.0.3にバージョンアップされ、改善されていることを確認しています)

【重要なお知らせ】2015/12/28
こちらのメールフォームプログラムはPHP7環境(現時点ではPHP7.0.0、及びPHP7.0.1で確認)ではPHPのバグにより正常に動作しないことを確認しております。 誠に恐れ入りますが、PHP側でパッチによる修正が行われるまではPHP5.6以下にてご使用頂きますようお願い致します。

バグレポート:https://bugs.php.net/bug.php?id=71066(mb_send_mailにおけるPHP7でのバグ)
詳細:http://www.php-factory.net/blog/?id=6899956823a22a843f

料金とお支払い方法

※事前に下記「注意事項」をご確認の上お申込み下さい。

MailForm05 多機能メールフォーム(ファイル添付機能付き)
プログラム料金 2,000円(税込)

主な機能と特徴、設置法、ご利用について

基本機能、特徴、設置法、その他すべて無料版の多機能メールフォームと同じになりますので、設置の際などはそちらをご覧ください。

ファイル構成でフリー版との違いはtmpフォルダがあることです。添付機能を使用するには必ず必要になりますので、mail.phpと同じ階層にそのままアップ下さい。(フォルダ内のhtaccessは絶対に削除しないで下さい)

添付ファイルは管理者宛のみとなります。
一時的に添付ファイルをサーバーに保存する必要があるため、このメールフォームは確認画面が必須になります。
※送信時に一時ファイルは自動で削除されます。

ファイル内に以下の記述が追加されていますので、コメントを参考に設定等をお願いします。
※以下PHPファイル内ではスラッシュ2つ「//」以降その行の終わりまでコメント扱いになります。

//----------------------------------------------------------------------
//  添付ファイル処理用設定(BEGIN)
//----------------------------------------------------------------------
//ファイル添付機能を使用する場合は一時ファイルを保存する必要があるため
//確認画面の表示が必須になります。
$confirmDsp = 1;//確認画面を表示 ※必須

/* ----- 重要 ------*/
//ファイルアップ部分のnameの値は必ず配列の形 例 upfile[] としてください。
//※添付ファイルが1つでも
//添付ファイルは複数も可能です。

//例1 添付ファイルが1つの場合 
//添付ファイル <input type="file" name="upfile[]">

//例2 添付ファイルが複数の場合 
//添付ファイル1:<input type="file" name="upfile[]"> 
//添付ファイル2:<input type="file" name="upfile[]"> //添付ファイルのMAXファイルサイズ  //※単位バイト デフォルトは5MB(ただしサーバーのphp.iniの設定による) $maxImgSize = 5024000; //添付ファイル一時保存用ディレクトリ //※書き込み可能なパーミッション(777等※サーバによる)にしてください $tmp_dir_name = './tmp/'; //添付許可ファイル(拡張子)  //※大文字、小文字は区別されません(同じ扱い)のでここには小文字だけでOKです //(拡張子を大文字で送信してもマッチします) $permission_file = array('jpg','jpeg','gif','png','pdf','txt','xls','xlsx','zip','lzh','doc'); //フォームのファイル添付箇所のname属性の値
//<input type="file" name="upfile[]">の「upfile」部 $upfile_key = 'upfile'; //サーバー上の一時ファイルを削除する(する=1, しない=0) ※バックアップ目的で保存させておきたい場合など //添付ファイルは確認画面表示時にtmpディレクトリに一旦保存されますが、それを送信時に削除するかどうか。
//(残す場合サーバー容量に余裕がある場合のみ推奨) //もちろん手動での削除も可能です。 $tempFileDel = 1;//デフォルトは削除する //確認画面→戻る→確認画面のページ遷移では最初の一時ファイルはサーバ上に残りますが、
//1時間後以降の最初の送信時に自動で削除されます。 //メールソフトで添付ファイル名が文字化けする場合には「1」にしてみてください。
//(ThuderBirdで日本語ファイル名文字化け対策) //「1」にすると添付ファイル名が0~の連番になります。 $rename = 0;//(0 or 1) //サーバーのphp.iniの「mail.add_x_header」がONかOFFかチェックを行う(する=1, しない=0) ※PHP5.3以降 //「する」場合、mail.add_x_headerがONの場合確認画面でメッセージが表示されます。 //mail.add_x_headerがONの場合、添付ファイルが正常に添付できない可能性が非常に高いためのチェックです。 //mail.add_x_headerはデフォルトは「OFF」ですが、サーバーによっては稀に「ON」になっているためです。 //mail.add_x_headerがONの場合でも正常に添付できていればこちらは「0」として下さい。メッセージは非表示となります。 $iniAddX = 1; //---------------------------------------------------------------------- // 添付ファイル処理用設定(END) //----------------------------------------------------------------------

ダウンロード

上記「購入申込み」より申し込みください。
基本的には即日ダウンロード用URLをお送りいたします。

注意事項(必ず事前にご確認下さい)

formタグについて

フォームページ側のHTMLのファイル添付箇所のname属性の値は必ず以下のように「upfile[]」としてください。
HTML側の添付ファイルは複数設置に対応しているため、
1つであってもname属性の値は必ず値の後ろに [と] (「と」は要りません)を追加する必要があります。

※以下コピペ可

また、フォームページ側のformタグでは以下のように必ず enctype="multipart/form-data"を追加して下さい。ファイル添付の際は必須の属性になります。

※いずれも同梱しているcontact.htmlではすでにそうなってますので、htmlファイルからそのままコピペしていただければ問題にはなりません。

一時ファイルについて

確認画面表示時に添付ファイルの一時ファイルがtmpフォルダ内に保存されます。そのためtmpフォルダも必ず必要です。
一時ファイルはメール送信時に自動的に削除される仕組みとなっております。
念のため削除が正しく行われているかもご確認ください。
稀にサーバーのパーミッションの関係で削除できないことがあります。
もちろんFTP上にて手動での削除も可能ですが、その際には修正しますのでご連絡ください。

また、確認画面→戻る→確認画面のページ遷移では最初の一時ファイルはサーバ上に残りますが、1時間後以降の最初の送信時に自動で削除されます。

迷惑メール扱いになる可能性について

Gmail、YahooメールなどのWebメールの場合、迷惑メールフォルダに入ってしまうことがあります。
こればかりはどうしようもありませんのでフィルタ等の設定で対処願います。

スマートフォン、携帯(ガラケー)サイトへの導入について

基本的にはスマホ、携帯でも<input type="file">で添付可能な機種が多いですが、Apple製品(iPhone、iPod touch、iPad、iPad mini)についてはosのバージョンがios6未満の場合には添付不可となります。具体的にはフォーム内のファイル添付箇所(<input type="file">)がグレーアウトして選択できません。最新(6以上)のiosであれば添付可能です。osをバージョンアップをしているかどうかはユーザーに依存するため、コチラ側ではどうしうようもありません。ただ、最新(6以上)版は2012年9月20日にリリースされてますので大多数のユーザはアップデートしているかと考えられます。 Androidのほとんどの機種では問題無いかと思いますが、すべての機種での動作確認は行っておりませんのでご了承下さい。またガラケーの場合、機種によっては動作しない可能性もありますが、このあたりをご了承の上でご使用下さい。

対応メールソフトについて

Outlook系(Office製品、Windows Liveメール含む)、ThunderBird、Gmail、Yahooメールにて動作確認しております。その他のメールソフトによっては添付ファイルがうまく取り扱えない可能性もあります。この場合、画像データが文字列データ(大量の英数字)のまま表示されるという現象が起きます。
基本的にはメジャーなメーラーであれば対応していると考えられます。

上記に該当しないメールソフトをお使いの際にはサンプルデモがありますので、一度そちらでテスト添付送信してみてください。もし正常に添付受信できない場合にはメールソフトを変更いただくか、変更が難しい場合には申し訳ございませんが、こちらでは対応致しかねますので、その他の選択肢を検討ください。また携帯などのメールソフトでの動作確認は行っておりませんのでご了承下さい。

サーバーのアップファイルの容量制限について(重要)

添付ファイルの項目はいくつでも設置可能です。ただし、一度の処理で送信できるファイル容量、ファイル数には制限があるので、多くとも3つ程度が無難です。また容量についてはサーバー側の他に受信する際のメールサーバー側も影響します。

一度に送信できる「数」について

1回で送信できる「数」はPHP5.2以降ではデフォルトで「20」に設定されています。実際20を超える量を設置することは無いと思いますが。
※php.iniのmax_file_uploadsで指定されます。
※<input type="file" の数です。

容量の制限(サーバー側)

1ファイルあたりの容量の上限(php.iniのupload_max_filesize)はサーバーのphp.iniの設定によりますが。デフォルトの2MB(さくらサーバなど)に設定されているサーバーもあります。
この制限はプログラム側ではどうしようもありませんので、お使いのサーバーのphp.iniの設定をご確認いただき、必要に応じて変更ください。(変更は可能です。下記リンク先で詳細についてご説明しています)

それでこの容量の上限設定で若干厄介なことがサーバーの値が優先されるということです。
たとえば
PHP側で上限5MBに設定、(デフォルトの設定値)
サーバー側の設定が2MBになっているとします。
この時に3MBのファイルを添付した場合、 サーバー側の値が優先されるという性質のため、 結果エラー等も表示されず、かつ添付もされないということになります。
どのような画面表示になるのかはサーバー側に依存しますので分かりません。

要するに基本的には必ず
想定している添付ファイルの最大容量 < サーバーの設定値
という関係でなければなりません。

余裕をもってサーバーの設定値を20MB程度にしておけば大丈夫でしょう。
その上でPHPの設定値を5MBなどにしておいた場合、
たとえば、10MBのファイルを添付しようとするとサーバーの設定値以下でかつPHP側の上限にひっかかりますので、正常にエラーメッセージが表示されます。

また、メールデータは一旦全てテキストデータに置き換えられてから送信されます。添付ファイル(バイナリデータ)をテキストに置き換えるとサイズが大きくなりますのでサーバーのアップ上限ギリギリのファイルを添付するとエラーとなり送信できません。これはエンコードする際に約138%のサイズになってしまうためです。実質添付できるファイルサイズは以下のようになります。

アップファイルの上限設定
(php.iniの設定)
実際に添付できるファイルサイズ
10MB 7.2MB以下
5MB 3.6MB以下
2MB 1.4MB以下
容量の制限(メールサーバー側)

メールをメールソフトで受信する際には一度メールサーバーに保存されたものをダウンロードする形になります。
GmailなどWebメーラーを使用している場合にもGmailのメールサーバー上のメールを見ていることになります。
要するにいずれにしましても、メールサーバーにメールは保存されるわけですね。

それで問題となるのが、このメールサーバーには容量制限が有るということです。
基本的には必ずあります。
Web業界の方であれば、常識的なことではありますが、10MB、または20MBを超えるようなファイルを直接メールには添付しません。これはメールサーバー側で上限に引っかかって送信できないためですね。
これの問題点は送信者側、受信者側とも届かないことに気づかないという点があります。
そのため容量の大きいファイルを送る場合にはFirestorageやファイル便などを使うのが一般的です。

この容量の問題は当然このフォームにも当てはまります。
そのため、仮にフォームを設置しているサーバーの上限を50MBに設定したとしても実際には送信(受信)出来ないわけですね。

またこれは一概には言えないかもしれませんが、プロバイダー側で弾かれる可能性もあります。(同じく上限があります)

結論としましては、メールサーバー側、プロバイダー側の上限の変更は基本的には行えません。
そのためフォームで添付できるファイルサイズは大きくとも10MB以下に設定することをオススメします。
ギリギリだと危険なので、7MB以下程度に設定しておくのが良いでしょう。(↑の「実際に添付できるファイルサイズ」を参考下さい。)

PHPのバージョンについて

PHPのバージョンは5以上のみ対応となります。
サーバーのPHPが4.XXの場合はバージョアップして下さい。
※バージョンアップが難しい場合でその他に選択肢が無い場合にはご相談下さい。PHP4~対応を行います。
現在ではほとんどのレンタルサーバーではPHP5以上ですので問題になることは少ないかと思います。
PHPのバージョンが不明な場合にはこちらを参考にご確認下さい。(内容は異なりますが、冒頭のinfo.phpアップ箇所をご参考下さい)

ご購入の際には以上のことをご確認、ご了承の上お申込み下さい。
もちろん実際にサーバーに設置し、どうしても動作しない場合にはキャンセル、返金等に応じますのでご安心下さい。

サンプルデモ

指定したアドレス宛に添付ファイル付で送信も可能ですのでお試し下さい。
※デモのサンプルフォームはプログラムとセット(同梱)となっています。

動作確認済PHPバージョン

PHP4.3.9~PHP5.6(ただし一部は5~のみ対応となりますのでできるだけ5.3以上でご利用下さい)
※基本的には一部プログラムを除きPHP7でも動作します。

動作確認済レンタルサーバー

  • エックスサーバー
    ※個人的にはここが好きで、もうずっとここです。このサーバーで困ることはまずないでしょう。
  • ロリポップ!
    ※ただしここはWAF機能がONの場合、CMSプログラムで問題が発生する可能性が高いです。詳細はこちら
    またサーバーがブラックリストに登録されてしまいメール系のプログラムで受信できない大問題も多々確認されています。詳細はこちら
     ただコスパ的には有りだと思います。
  • カゴヤのレンタルサーバー
    ここは高機能、高スペック、良心的な価格でありながら風俗系のサイトがOKという非常に貴重なサーバーです。個人的には風俗系のサイトであればこのサーバー以外の選択肢はないと思ってます。
  • さくらのレンタルサーバ

その他一般的なレンタルサーバーであれば問題なく動作するはずですが、
すべての環境(サーバー)での動作を保証するものではありませんのでご了承下さい。

問題が出る可能性が高い、またはそのままでは必ず問題が出ることが分かっているサーバー

※現状私自身が把握している範囲です。(実際に確認していますのでちゃんと根拠もあります)
1,Yahoo系(ジオプラス、ウェブホスティングとも)※Softbankも含む
2,KDDI系(CPI含む)
3,NTT系(WebArena(suiteX)、NTTビズリンク(BizLink))
※プロバイダー系は特に問題が多いです。(個人的には絶対に借りてはいけないと考えています)
4,スマイルサーバー
5,ファーストサーバ

特にCPI、NTT系、スマイルサーバー、ファーストサーバで問題がある場合はこちらも参照下さい

経験上、結局は「餅は餅屋です」。プロバイダー系はプラン、金額に関係なく特に問題が多いです。サーバーの問題で時間を取られるのは非常に無駄ですし、その先ずっと影響しますのでサーバー選びは慎重にされることをオススメします。 特に理由がなければあえてこれらのサーバーは借りないほうが得策でしょう。高いから良い、安いからダメという安易なものでもありませんので難しいところですね。(まぁ安いには安いなりの理由があるのですが・・)

よくある質問

メール送信不具合関連

確認画面での不具合関連

文字化けや誤変換関連

その他

ご利用規約

・無料版プログラムはフリーウェアです。ただし、著作権は放棄するものではありません。
 また、カスタマイズ依頼、著作権表示リンク削除依頼にて表示を削除したとしても著作権は放棄しません。
・プログラムの著作権表示リンク(ページ下部にある当サイトへのリンク)を無断で削除することはできません。
(一律2,000円の削除依頼をいただいた場合を除く)
 また無断で削除された場合、プログラムにより全部、または一部機能が失われます。
・プログラムの再配布、再販売は禁止です。(万が一発覚した場合には然るべき対応を行います)
 ※ただしクライアントへの納品などでシステム費用、設置費用として請求されるのは問題ありません。
・プログラムによって何らかの不利益、損害が生じても一切の責任を負いません。
 あらかじめご了承の上ご使用ください。
 もし何らかのトラブルがあった場合には、ご相談いただければ解決策が見つかるかもしれません。
 (クライアントへの原因の説明など)
・プログラムは全ての環境(サーバー)での動作を保証するものではありません。
・改変等は自由ですが、自己責任でお願いします。
・有料版をご購入いただいた場合、初期不良を除き、ご使用後の返金には応じ兼ねます。
・有料版(著作権リンク削除含む)は1サイト(同一ドメイン)内であれば複数利用可能です。
 2サイト目以降は都度サイトより購入申込みが必要になります。  

 ダウンロードいただいた時点で利用規約に同意したものとみなされます。

カスタマイズ、設置代行について

カスタマイズ(改造等)方法などのサポートは行っておりません。
カスタマイズや仕様変更、設置代行などは2,000円~の有料にて承ります。
フォームページとセットでの設置代行も承ります。※4,000円程度(項目数により変動有り)

セキュリティについて

可能性は低いですが、悪意のある第三者がウィルス付きの添付ファイルを送信する可能性もあるため、添付ファイル導入時にはある程度の注意が必要です。事前にクライアントにもその旨説明したほうが良いでしょう。

添付ファイルセキュリティ確認事項

  1. 許可拡張子は必要最低限に留めておきましょう。
  2. 受信する側(主にクライアント)のPCにセキュリティソフトが入っているか確認する(または期限切れでないか)
  3. 本文が英語、または明らかにおかしな文言のメールの場合は添付ファイルはなるべく開かない、またはセキュリティソフトによるウィルススキャンを行う。またはオンラインでもファイル単位でウィルススキャンしてくれるサービスがあるので、こちらもご参考下さい。ファイルをアップロードするだけで複数の大手ウイルス対策会社のスキャン結果をもらえます。
    記事、説明などはこちらが参考になります。
    http://itpro.nikkeibp.co.jp/article/COLUMN/20070706/276936/

利用規約にもありますが、なんらかのトラブル等が発生しても責任は負えませんので、最低限上記のことは留意下さい。

その他考えられるリスク(XSS対策)に対し行っている対策について

確認画面表示時にtmpディレクトリに一時的にファイルを保存し(ファイル名による攻撃を防ぐためリネームされます)、メール送信時にそのファイルを削除する仕様としておりますが、確認画面の状態であれば、まだファイルは削除されません。たとえばPHPファイルをアップすることができてしまえば、PHPの任意のコードを実行できてしまうリスクがあります。こちらは2重、3重に対策しています。

1,tmpディレクトリにはデフォルトでhtaccessを設置し、deny from allを記述しています。これは直接そのファイルへのアクセスを禁止する記述です。これがメインかつ最も有効な対策になります。

2,アップできるファイルの拡張子はホワイトリスト形式でのチェックになります。これは合致したもののみ許可するということです。合致しない拡張子のファイルのアップは許されません。たとえば、htaccessファイルとPHPファイルがアップ出来てしまうと問題になりますが、これらはデフォルトではアップできません。.htaccessのアップを許す機会は無いと思いますが、あえて許す設定にはしないで下さい。上書きされてしまいます。
○○.php.jpgなど拡張子が複数になっているとApach環境ではPHPとして動作することがありますが、上記に書いたとおり、直接ファイルにアクセスはできません。

3,上記で「確認画面表示時にはファイルは削除されない」と書きましたが、これでは不要なファイルが増える&リスクも残ったままになる可能性がありますが、ファイルの更新時間を取得し、1時間経過したものはその後のメール送信時に一括削除される仕様としておりますので、tmpディレクトリ内にファイルが残ることはありません。

以上のことからhtaccessファイルは絶対に削除しないで下さい。またtmp内のファイルに直接アクセスできないことを確認下さい。

以上、考えられるリスクにはすべて対策を施しておりますが、その他不安なこと、懸念されることがありましたら遠慮なくご連絡下さい。

その他メールフォームの基本的なセキュリティ対策についてはフリー版と同じになりますので、フリー版のページをご参照下さい。

更新履歴

主な更新履歴はフリー版の更新履歴と同じになりますのでご参照下さい。

PHPメールフォーム(無料版)

PHPメールフォーム(有料版)

新着情報・更新履歴CMS(無料版)

投票・アンケートシステム(無料版)

テロップCMS(無料版)

写真ギャラリーCMS(無料版)

営業日カレンダーCMS(無料版)

営業日カレンダーCMS(有料版)

カレンダー予約フォーム(無料版)

カレンダー予約フォーム(有料版)

リンク集ページCMS(無料版)

アクセスカウンター(無料版)

ダウンロードカウンター(無料版)

メールフォームの各種カスタマイズならお任せ下さい
業務効率化が可能なPHPオリジナルCMS制作します

役立つかも?なもの

豆知識や役立ち事など

PHPについて

各種情報