2026年8月21日
2026年8月21日
Contact Form 7でファイル添付が失敗する・届かないときの原因と修正方法
Contact Form 7のファイル添付がうまくいかない原因は、大きく「フォームの設定」「ファイルサイズの上限」「アップロード先フォルダの書き込み権限」「メール送信側の制限」の4つに分かれます。症状によって見る場所が違うため、この記事ではまず症状を3つに分類し、それぞれの確認方法と直し方を、管理画面での設定を中心に説明します。
症状を3つに分けて考える
ファイル添付のトラブルは、次のどれに当てはまるかで原因がほぼ決まります。
- 送信時にエラーメッセージが出る: 「ファイルのアップロード時にエラーが発生しました」「ファイルが大きすぎます」「許可されていない種類のファイルです」など。アップロードの段階で止まっています。
- 送信は成功するが、届いたメールにファイルが付いていない: メールタブの設定漏れがほとんどです。
- 送信が完了しない、またはメール自体が届かない: サーバーの上限やメール送信側の容量制限が考えられます。
エラーメッセージの文面は、フォーム編集画面の「メッセージ」タブで変更できるため、サイトによって表現が違うことがあります。どの状況で表示されるメッセージなのかは、同じタブの項目名を見ると分かります。
作業前の準備
この後、PHPの設定や .htaccess、フォルダの権限を変更する場合があります。変更前にサイトのバックアップを取り、編集するファイルは元の状態のコピーを残しておきます。また、本番の問い合わせフォームで何度もテスト送信すると担当者に通知が届くため、テスト用に複製したフォームを固定ページの非公開ページなどに置いて試すと影響を抑えられます。
手順1:フォームタグとメールタブの設定を確認する
送信は成功するのに添付が無い場合は、まずこちらを確認します。Contact Form 7では、ファイル項目をフォームに置くだけでは添付されません。
フォームタブには、次のような file タグを置きます。
[file your-file limit:5mb filetypes:pdf|jpg|jpeg|png]
your-file の部分がこの項目の名前です。続いて「メール」タブを開き、下の方にある「ファイル添付」欄に同じ名前をタグとして入力します。
[your-file]
ここでつまずきやすい点は3つあります。
- メール本文に書いても添付にはならない: 本文に
[your-file]を書くと、ファイル名が文字として入るだけです。添付するには「ファイル添付」欄に書きます。 - 名前の不一致: フォームタブで名前を変えたのに、ファイル添付欄が古い名前のままになっているケースです。
- メール (2) の設定漏れ: 送信者への自動返信(メール (2))にも添付したい場合は、メール (2) 側のファイル添付欄にも別途書きます。
ファイル項目を複数置いた場合は、ファイル添付欄に1行に1つずつ並べて書きます。
手順2:ファイルサイズの上限を段階ごとに確認する
「ファイルが大きすぎます」系のエラーや、大きなファイルのときだけ失敗する場合は、どこかの上限に引っかかっています。上限は複数の段階にあり、最も小さい値が実際の上限になります。
Contact Form 7のタグの上限: file タグの limit オプションで指定します。指定しない場合の初期値は1MB程度と小さいため、スマートフォンで撮った写真などはこの段階で弾かれます。受け付けたいサイズに合わせて limit:5mb のように指定します。
PHPの上限: upload_max_filesize(1ファイルの上限)と post_max_size(送信全体の上限)が関係します。post_max_size は upload_max_filesize より大きくしておく必要があります。現在の値は、管理画面の「ツール」→「サイトヘルス」→「情報」タブの「サーバー」欄で確認できます。値の変更方法はサーバーによって異なり、レンタルサーバーでは管理パネルの「PHP設定」などから変更するのが一般的です。
Webサーバーの上限: Nginxでは client_max_body_size の初期値が1MBで、これを超える送信はPHPに届く前に拒否されます(413エラー)。Nginxを自分で管理している場合は、設定ファイルで値を引き上げて再読み込みします。
メール側の上限: アップロードが通っても、メールに添付するとファイルはBase64という形式に変換され、元のサイズより3割ほど大きくなります。送信サーバーや受信側のメールサービスには1通あたりの容量制限があるため、合計サイズが大きいとメールだけが届きません。大きなファイルを受け付けたい場合は、メールに添付せずクラウドストレージのURLを送ってもらう方式も検討します。
手順3:許可するファイル形式を指定する
「許可されていない種類のファイルです」と表示される場合は、filetypes オプションを見直します。filetypes:pdf|jpg|jpeg|png のように拡張子を | で区切って並べます。iPhoneの写真で使われるHEIC形式や、大文字の拡張子など、想定していない形式で送られてくることがあるため、エラーが出た利用者がどんなファイルを送ろうとしたかを確認すると早く解決します。
セキュリティの面では、受け付ける形式は必要なものだけに絞ります。PHPファイルや実行形式のファイルを許可すると、サーバーを攻撃する入口になりかねません。
手順4:アップロード先フォルダの書き込み権限を確認する
サイズも形式も問題ないのに「アップロード時にエラーが発生しました」と出る場合は、一時保存フォルダに書き込めていない可能性があります。Contact Form 7は、受け取ったファイルを一時的に wp-content/uploads/wpcf7_uploads に保存し、メールに添付した後で削除します。
このフォルダ、または親の uploads フォルダにWebサーバーから書き込めないと、アップロードが失敗します。FTPやファイルマネージャーで、フォルダが存在するか、パーミッションが他のアップロードと同じ設定(多くの環境では755)になっているかを確認します。サーバー移転の直後は、所有者が変わって書き込めなくなっていることがあります。
一時フォルダの場所を変えたい場合は、wp-config.php で定数 WPCF7_UPLOADS_TMP_DIR を指定できます。ただし、変更先は外部から直接アクセスできない場所にするなど、慎重に選びます。
手順5:セキュリティ機能による遮断を確認する
サーバーのWAF(Webアプリケーションファイアウォール)やセキュリティプラグインが、ファイル付きの送信を攻撃と誤判定して止めることがあります。この場合、送信直後に403エラーが返る、送信中の表示のまま止まる、といった症状になります。
レンタルサーバーのWAFが原因かどうかは、管理パネルでWAFのログを見るか、一時的にWAFを無効にして試すと分かります。原因と分かったら、WAFを無効にしたままにせず、該当するルールだけを除外する設定にします。SiteGuard WP Pluginなどのセキュリティプラグインを使っている場合も、同様にログを確認します。
手順6:メールが届かない場合は送信方式を見直す
添付なしのメールは届くのに添付ありだと届かない場合は、手順2のメール容量制限が濃厚です。添付の有無にかかわらず届かない場合は、ファイル添付ではなくメール送信そのものの問題なので、SMTPプラグインを使った送信への切り替えを検討します。WP Mail SMTPなどの主要なSMTPプラグインは、添付ファイル付きの送信にも対応しています(2026年10月現在)。
まとめ
- 添付が無いだけなら、メールタブの「ファイル添付」欄に項目名のタグが入っているかを最初に確認する
- サイズの上限はタグの
limit、PHP、Webサーバー、メールの4段階があり、最も小さい値で止まる - 形式エラーは
filetypesを見直し、許可する形式は必要最小限にする - 原因が見えないときは
wpcf7_uploadsフォルダの書き込み権限とWAFのログを確認する