Blog

[PHP] フォームからアップロードした画像をメールに添付する方法

みなさまこんにちは。開発部・アニマル部署統括のPです。
最近とある案件で表題のような処理を作成したので備忘録として書いておきます。
 
よくあるお問い合わせフォームなどに画像のアップロード項目があり、アップロードされた画像を問い合わせ内容と一緒にメールに添付する方法です。
 
ただし、アップロードされた画像をそのままメールで送信するのは、個人的にはあまりお勧めしない方法です。(メールで送信できるデータの上限も決まっていますし…)
サーバー側で圧縮処理をするのが理想ですが、今回はファイルサイズをバリデーションするだけにしました。
 
まずはメールに添付できるファイルサイズのおさらい。
お使いのプロバイダやサーバーによって、15~100MB程度と幅があります。添付ファイルの大きなメールは送り先のメールボックスの容量も圧迫してしまいますし、受信に時間がかかってしまいますので、一般的には2~3MBくらいに抑えるのが理想といわれています。
 
スマホで撮影した画像がアップロードされることも考慮して、今回アップロード可能なファイルサイズの上限は「5MB」とすることにしました。
 
まずはフォームのHTML部分。
フォームタグに「enctype=”multipart/form-data”」を付けるのを忘れずに。

続いてPHP側、ファイルのバリデーションです。
ファイル以外の項目は、項目に合わせてバリデーションしてくださいね。

最後にメール送信処理です。

区切り文字(今回は「__BOUNDARY__」)で内容を区切って、
ボディにBase64方式でエンコードしたアップロードデータを追加すればOKです。
ヘッダー情報に
Content-Type: multipart/mixed;boundary=”__BOUNDARY__”
を追加するのを忘れずに。
 
実際に届いたメールはこんな感じです。

アップロード時にファイルが消えてしまう・メールに画像が添付されない
などうまくいかない場合はサーバーのphp.iniの以下の設定を見直してください。
 
・memory_limit … メモリ使用量の上限
・post_max_size … POSTデータの最大サイズ
・upload_max_filesize … 1ファイルの最大アップロードサイズ
 
レンタルサーバーによってはupload_max_filesizeの初期値が2~5MB程度になっていることがありますので、確認・調整をしてみてください。
 
Bye(‘ω’)ノ
 

タグ:PHP

2020.11.13