ファイルのアップロードとメール添付

ここでは、Contact Form 7 のファイルアップロードとメール添付の機能について説明します。この機能により、フォーム経由でのファイルアップロード、そのファイルをメールに添付して送信することが可能になります。

セットアップには2つのステップが必要です。1) フォームにファイルアップロード項目を追加すること。2) アップロードされたファイルをメールに添付するように設定すること。以下、これらの手順について説明していきます。

ファイルアップロード項目をフォームに追加する

他のフォーム項目と同様、Contact Form 7 はファイルアップロード項目 (HTML における <input type="file">) のためのフォームタグとして、filefile* を用意しています。file* は必須項目で、ユーザーが必ずファイルをアップロードすることを求めます。

オプション使用例説明
id:(id)id:fooinput 要素の id 属性値。
class:(class)class:barinput 要素の class 属性値。2個以上のクラスを設定する場合は複数の class: オプションを [file your-file class:y2008 class:m01 class:d01] のように並べる。
filetypes:(ファイルタイプ)filetypes:image/*|txt|application/pdf受信可能なファイルタイプ。filetypes: キーワードの後にファイルタイプを列挙する。複数のファイルタイプを設定する時は | (パイプ文字) をセパレーターとして区切る。ファイルタイプはファイル拡張子と MIME タイプでの指定が可能。
limit:(ファイルサイズ)limit:1048576
limit:1024kb
limit:1mb
受信可能な最大ファイルサイズを指定する。kb (キロバイト)、mb (メガバイト) の接尾辞を使って指定することも可能。それらが省略された場合はバイトが単位になる。小数表記 (例: [file your-file limit:1.5mb]) はできないので注意。
capture:(値)capture:user
capture:environment
このオプションは HTML の capture 属性の値を指定する。

例:

[file your-file filetypes:pdf|txt limit:2mb]

filetypes: および limit: オプションの指定が省略された場合、Contact Form 7 は受信可能ファイルタイプとファイルサイズ上限にデフォルトの値を適用します。filetypes: オプションのデフォルト値は audio/*|video/*|image/*limit: オプションのデフォルト値は 1mb です。これらのデフォルト値は将来のバージョンで予告なく変更される可能性があるので、明示的にオプションを設定することが推奨されます。

メールへのファイル添付を設定する

アップロードされたファイルをメールに添付するには、ファイルアップロード項目のフォームタグに対応するメールタグをファイル添付フィールドに以下のように追加します。

Screenshot of File Attachment field
Screenshot of File Attachment field

この例では、ファイルアップロード項目のフォームタグは以下のようになっていて:

[file your-file filetypes:pdf]

したがってこれに対応するメールタグは以下のようになります:

[your-file]

ファイル添付フィールドに入力する必要があるのは [your-file] の方です。[file your-file filetypes:pdf] ではないので注意してください。

メールに複数のアップロードされたファイルを添付したい場合は、以下のように単純に並べれば OK です:

[your-file][your-another-file]

関連項目: タグの使い方

1件のメールに添付できるファイル合計サイズには上限(25メガバイト)があります。コンタクトフォームの設定がこの上限を超えるファイル添付を許している場合には警告が表示されます。大容量データの転送は電子メールシステムが設計された主目的ではありません。Dropbox のような専門のサービスを使いましょう。

ローカルファイル添付

ローカルファイルをメールに添付することもできます。ファイル添付フィールドにローカルのファイルパスを入力すると、それらのファイルがアップロードされたファイルと同じようにメールに添付されます。

1行にひとつのファイルパスを指定してください。パスが絶対パスではない場合は、wp-content ディレクトリからの相対パスとして扱われます。

セキュリティ上の理由から wp-content ディレクトリの外部にあるファイルをメール添付することはできなくなっています。wp-content かそのサブディレクトリにファイルを配置するようにしてください。

使用例:

[your-file][your-another-file]
uploads/2013/08/08/boringguide.pdf

アップロードされたファイルはどのように扱われるか

コンタクトフォームを経由してユーザーがファイルをアップロードすると、Contact Form 7 は 1) PHP のエラーが発生していないか、2) ファイルタイプとファイルサイズは適正か、についてチェックし、問題がない場合はそれらのファイルを一時フォルダに移動させます。その後 Contact Form 7 はそれらのファイルをメールに添付して送信します。これらの処理が完了したら、Contact Form 7 は一時フォルダにあるファイルを削除します。

一時フォルダはデフォルトでは wp-content/uploads/wpcf7_uploads に作られます。アップロードパスの設定を wp-content/uploads から変更している場合はこれとは異なります。

このフォルダの作成は自動で行われますが、まれに作成に失敗する場合があります。最もありがちな原因はその親フォルダに対して必要な書き込み権限が与えられていないことです。そのような場合は、権限を変更するか、フォルダを手動で作成します。

また、以下のように WPCF7_UPLOADS_TMP_DIR 定数を指定して一時フォルダのパスをカスタマイズすることも可能です:

define( 'WPCF7_UPLOADS_TMP_DIR', 'your-custom-tmp-dir' );

定数値に指定できるのはディレクトリの絶対パスか、WP_CONTENT_DIR で指定されたディレクトリに対する相対パスです。ここで絶対パスが指定された場合でも、WP_CONTENT_DIR 下のディレクトリのみ指定が可能であることに注意してください。それ以外が指定された場合、この定数の設定は無視されます。

WordPress のお問い合わせフォームプラグイン。シンプル、でも柔軟。