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
まとめ
以上の点を確認すれば、ほとんどのケースで解決するかと思います。
ちなみに大きなサイズの添付ファイルをメールで送るのは、相手によっては迷惑をかけたり、送信先のセキュリティ環境ではじかれたりする場合もあります。そもそもの運用にも注意が必要ですね。