Contact Form 7 で大きいサイズの添付ファイルが送れない時の確認ポイント

tumblr_ndyvukSjNl1tubinno1_1280

WordPress の Contact Form 7 プラグインには添付ファイルを送れる機能もありますが、大きいサイズのファイルを添付とするとエラーが出て送れない場合があります。

そんな問題が起きたときに確認するべきポイントをまとめてみます。

Contact Form 7 の設定

まず何はともあれ Contact Form 7 自身の設定です。

何も指定していない場合、デフォルトで送信できるファイルサイズは 1MB(1048576 バイト)までという制限がかかっているので、そのチェックに引っかかっている可能性があります。

設定画面にて、ファイルのアップロード用タグのオプションに「limit」を追加することで、その制限値を指定することができます。

(例)limit にファイルサイズを指定
[file your-file limit:1048576]

limit の指定は数字だけ書けばバイト単位、kb(キロバイト)、mb(メガバイト)の単位を指定することも可能です。

(例)いずれも 1MB に指定する場合
[file your-file limit:1048576]
[file your-file limit:1024kb]
[file your-file limit:1mb]

PHP の設定

次に Web サーバの PHP 設定の確認です。

PHP にはファイルアップロードに影響する設定項目がいくつかありますので、そのどれかの制限に引っかかっているかもしれません。

upload_max_filesize

1ファイルあたりの最大アップロードサイズです。

post_max_size

1回の POST データの最大サイズです。

注意点として、upload_max_filesize は1ファイルあたり、post_max_sizeは1リクエストあたりの制限なので、例えばアップロードするファイルが2つあるとしたら post_max_size は upload_max_filesize の2倍は指定しておかないといけないわけですね。

memory_limit

PHP スクリプトが実行される時のメモリ使用量の上限です。

max_execution_time

PHP スクリプトが強制終了されるまでの最大時間(秒)です。

max_input_time

スクリプトが POST、GET などの入力を パースする最大時間(秒)です。

ファイルサイズが大きい場合はその分アップロードする時間がかかりますので、この設定にも気を付けておきます。

max_file_uploads

1リクエストで同時にアップロードできるファイルの最大数です。

設定例

使っているサーバ環境によって設定できる方法は異なると思いますが、php.ini や .htaccess で設定するサンプルを記載しておきます。

まず、php.ini の場合です。

; メモリ使用量の上限
memory_limit = 256M

; POST データの最大サイズ
post_max_size = 200M

; 1ファイルあたりの最大サイズ
upload_max_filesize = 10M

; スクリプト終了までの最大時間(秒)
php_value max_execution_time 600

; 入力をパースするまでの最大時間(秒)
php_value max_input_time 600

; アップロードできるファイル最大数
php_value max_file_uploads = 20

続いて、.htaccess の場合です。

# メモリ使用量の上限
php_value memory_limit 256M

# POST データの最大サイズ
php_value post_max_size 200M

# 1ファイルあたりの最大サイズ
php_value upload_max_filesize 10M

# スクリプト終了までの最大時間(秒)
max_execution_time = 600

# 入力をパースするまでの最大時間(秒)
max_input_time = 600

# アップロードできるファイル最大数
max_file_uploads = 20

SMTP サーバの設定

なかなか気が付かないところで、SMTP サーバ(メールサーバ)によって添付ファイルのサイズ制限がかかっている場合があります。

例えば、Postfix を使っている場合です。

まず、下記コマンドで添付ファイルの最大サイズを確認します。

$ postconf message_size_limit
message_size_limit = 10240000

上記の場合、10MB の制限がかかっていることになるので、設定ファイルの /etc/postfix/main.cf を編集して制限値を変更します。

$ sudo vi /etc/postfix/main.cf
message_size_limit = 10240000
   ↓
# 20MBに変更
message_size_limit = 20480000

変更した設定をリロードして反映させます。

$ sudo service postfix reload

まとめ

以上の点を確認すれば、ほとんどのケースで解決するかと思います。

ちなみに大きなサイズの添付ファイルをメールで送るのは、相手によっては迷惑をかけたり、送信先のセキュリティ環境ではじかれたりする場合もあります。そもそもの運用にも注意が必要ですね。

フリーランスの Web 系エンジニアで、主に Web サイト制作やシステム・アプリケーション開発を仕事にしています。
好きな事は高校野球、将棋、インターネット、子どもと遊ぶ、食べること。
>>詳しいプロフィールはこちら