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にバージョンアップされ、改善されていることを確認していますので
7.0.3以上のバージョンであれば問題ないと思われます。


【重要なお知らせ】2015/12/28 PHP7.0.0、及びPHP7.0.1における不具合について
こちらのメールフォームプログラムは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円(税込)

↓より全機能搭載版をご購入ください。

有料版プログラムの統合について ※重要
これまでの有料版は各機能ごとにメールフォームプログラムを販売していましたが、プログラム管理の合理性、メンテナンス性、及びご購入いただく方の利便性などを考慮し、シンプルにフリー版と有料版の全機能が付いた全機能搭載版の2つのプログラムとしました。
尚、有料版のある1つの機能しか使わないという方がおられることなども考慮し、
全機能搭載版のプログラム本体料金を4,000円→2,000円に値下げいたしました。
何卒ご理解の程お願い申し上げます。

お手数おかけいたしますが、以下全機能搭載版のページよりお申し込み下さいますようお願い申し上げます。

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

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

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

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

添付ファイルは管理者宛のみとなります。
一時的に添付ファイルをサーバーに保存する必要があるため、このメールフォームは確認画面が必須になります。
(2021/10/26に確認画面有り、無し、どちらでも添付できるよう改修済みです)
※送信時に一時ファイルは自動で削除されます。

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

//----------------------------------------------------------------------
//  添付ファイル処理用設定(BEGIN)
//----------------------------------------------------------------------
/* ----- 重要 ------*/
//ファイルアップ部分の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 = 0; //---------------------------------------------------------------------- // 添付ファイル処理用設定(END) //----------------------------------------------------------------------

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

formタグについて

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

※以下コピペ可

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

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

一時ファイルについて

フォームからmail.phpに遷移するタイミングで添付ファイルの一時ファイルが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つ程度が無難です。また容量についてはWebサーバー側の上限値と受信する際のメールサーバー側の上限も影響します。

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

1回で送信できる「数」はPHP5.2以降ではデフォルトで「20」に設定されています。実際20を超える量を設置することは無いと思いますし、容量的に不可能だと思われますので多くとも3つ程度になると思います(Webサーバーやメールサーバーの上限次第です)。
※php.iniのmax_file_uploadsで指定されます。
※<input type="file" の数です。

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

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

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

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

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


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

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

それで問題となるのが、このメールサーバーには1通あたりの容量制限が有るということです。
Web業界の方であれば、常識的なことではありますが、10MB、または20MBを超えるようなファイルを直接メールには添付しません。 これはメールサーバー側で上限に引っかかって送信できない可能性があるというのもありますし、相手のメールサーバー容量に負担を与えるためですね。(マナー的なこと)

これの問題点は送信者側、受信者側とも届かないことに気づかないという点があります。
そのため容量の大きいファイルを送る場合にはFirestorageやファイル便などを使うのが一般的です。

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

メールサーバー側の上限の変更は基本的には行えません。

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

メールサーバー側の上限 実際に添付できるファイルサイズ
10MB 7.2MB以下
5MB 3.6MB以下
2MB 1.4MB以下

ちなみにですが、エックスサーバーの場合は1通あたり100MBとかなり大きなサイズまで対応しています。その他、ファイルサイズの上限値も変更可能ですので、要するにエックスサーバーであれば何ら問題ありません。

PHPのバージョンについて

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

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

サンプルデモ

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

動作確認済PHPバージョン

PHP4.3.9~PHP8.1

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

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

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

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

※現状私自身が把握している範囲です。(実際に確認していますのでちゃんと根拠もあります)
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内のファイルに直接アクセスできないことを確認下さい。

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

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

更新履歴

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

2021/10/26

これまでファイル添付機能を利用する場合は確認画面が必須でしたが、確認画面無しの設定でも添付できるように改修しました。確認画面の有り、無しに関わらずファイル添付機能をご利用いただけます。

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

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

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

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

テロップCMS(無料版)

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

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

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

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

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

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

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

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

その他

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

役立つかも?なもの

豆知識や役立ち事など

PHPについて

各種情報