フォームからのファイルの添付

ver1.6.0よりフォームからアップロードされた画像やファイルを管理者宛てのメールに添付した状態で送ることができるようになりました。
1.6.0以前はWebサーバに置かれたファイルへのパスを管理者宛てのメールに記載する形でした。

変更箇所

サイト管理>フォーム>フォームの詳細
「ファイル添付ヘルプ」の「メールに添付する」にチェックを入れます


ファイル添付オプションの有効化

ファイル添付オプションの有効化


フォームからアップされた画像、ファイルはメールに添付された形式で送られてくるようになります。
※メールのテンプレートファイルに特別な記述は不要です。


formタグのenctypeを指定する

また、formタグのenctype属性に enctype="multipart/form-data" と指定しないとファイル等をアップロードできないため、確認してください。

config.system.yamlに記述します。

ver1.7.0以降の場合

アップロード許可ファイル拡張子の設定

画像ではなくファイルとしてアップロードを行いますので、管理メニュー>編集設定にあります、「アップロード許可ファイル拡張子」のドキュメントの欄に、許可する拡張子を追記します。

ファイルサイズを限定する(Ver. 2.6.1.4 - )

サーバーの制限を超える容量のファイルを添付されるとPHPのエラーがでてしまい、メールも送信されません。そこで、ここでは添付ファイルの容量の制限を行いたいと思います。(Ver. 2.6.1.4より)

指定方法

<input type="hidden" name="pdf:v#filesize" value="200"> <!-- KBで指定(200KB) -->

上記のようにバリデータと同じようにテンプレート上に指定する方法もありますが、フォームの場合は管理画面で設定する事をお勧めします。htmlでの指定は簡単に制限をなくす事ができるからです。

フォーム詳細画面で「ファイルサイズ上限値」を設定してください。(KBで指定)


フォームオプションの設定

フォームオプションの設定


エラーメッセージ

指定した容量を超えた場合や、upload_max_filesizeを超えた場合のブロック

<!-- BEGIN pdf:v#filesize -->ファイルサイズが大きすぎます<!-- END pdf:v#filesize -->
post_max_sizeを超えた場合のメッセージブロック(全体)

upload_max_filesize超えた場合、POSTが空になるのでフィールド毎にエラーは出せない。 なので以下の記述で全体のエラーメッセージを出力。

<!-- BEGIN post:v#filesize -->リクエストサイズが大きすぎます<!-- END post:v#filesize -->

添付ファイルの例

<tr>
    <th>PDF</th>
    <td>
        <!-- アップロード済みのファイルのプレビューエリア -->
        <!-- BEGIN_IF [{pdf@path}/nem/] -->
        <img src="%{ARCHIVES_DIR}{pdf@path}" width="450" alt="" /><br />
        <a href="%{ARCHIVES_DIR}{pdf@path}">{pdf@originalName}</a>
        <input type="hidden" name="pdf@old" value="{pdf@path}" />
        <input type="hidden" name="pdf@secret" value="{pdf@secret}" />
        <label for="input-checkbox-pdf@edit">
            <input type="checkbox" name="pdf@edit" value="delete" id="input-checkbox-pdf@edit" />
            削除
        </label><br /><!-- END_IF -->
        <!-- イメージファイルをアップロードするフィールド -->
        <input type="hidden" name="pdf:v#filesize" value="500" id="pdf-v-filesize"> <!-- 500KBで制限 -->
        <input type="file" name="pdf" size="20" />
        <input type="hidden" name="field[]" value="pdf" />
        <input type="hidden" name="pdf:extension" value="file" />
        <div data-validator-label="pdf-v-filesize" class="validator-result-{pdf:v#filesize}">
            <p class="error-text"><span class="acms-icon acms-icon-attention"></span>ファイルサイズが大きすぎます。</p>
        </div>
    </td>
</tr>

<!-- BEGIN post:v#filesize -->リクエストサイズが大きすぎます<!-- END post:v#filesize -->

変数名

ここではファイル添付をした時に使用できる変数名を解説します。以下変数名が「pdf」だった場合で解説します。


変数名 出力される内容
{pdf@path} ファイルが実態があるURLです。ファイル名なランダムなものになっています。
{pdf@originalName} 元のファイル名です。ダウンロード時のファイル名も元のファイル名が使用されます。
{pdf@secret} セキュリティのためのランダム文字列です。