- PHP
- 2012-03-03 - 更新:2020-10-19
この記事は最終更新日から1年以上経過しています。
複数の画像を添付してメールを送信するフォームを作ったので参考に載せておきます。
要所のみで省略している部分もあります。
ここでは添付できるファイル数を5つで作成しています。
<form action="./confirm.php" method="post" enctype="multipart/form-data"> <input type="file" size="30" name="upfile1"><br> <input type="file" size="30" name="upfile2"><br> <input type="file" size="30" name="upfile3"><br> <input type="file" size="30" name="upfile4"><br> <input type="file" size="30" name="upfile5"><br> <input type="submit" name="submit" value="内容確認"> <input type="reset" value="リセット"> </form>
<?php // 共通初期設定 //{ // 拡張子制限(0=しない・1=する) $ext_denied = 1; // 許可する拡張子リスト $ext_allow1 = "jpg"; $ext_allow2 = "jpeg"; $ext_allow3 = "gif"; // 配列に格納しておく $EXT_ALLOWS = array($ext_allow1, $ext_allow2, $ext_allow3); // アップロード容量制限(0=しない・1=する) $maxmemory = 1; // 最大容量(KB) $max = 3000; //} ?>
// [confirm.php] <?php // 内容の確認 //{ function confirm() { global $ext_denied, $maxmemory, $max, $EXT_ALLOWS; extract($_POST); echo "<form action=\"./mail.php\" method=\"post\" enctype=\"multipart/form-data\">\n"; for($i = 1; $i <= 5; $i++) { if(!empty($_FILES["upfile".$i]["tmp_name"])) { $tmp = $_FILES["upfile".$i]["tmp_name"]; $name = $_FILES["upfile".$i]["name"]; $size = $_FILES["upfile".$i]["size"]; $array = explode(".", $name); $nr = count($array); $ext = $array[$nr - 1]; if($ext_denied == 1 && !@in_array($ext, $EXT_ALLOWS)) { $error_msg = "<font color=\"#ff0000\">エラー!</font><br>\n"; $error_msg .= "アップロードできないファイルです<br>\n"; $error_msg .= "アップロード可能なファイルの種類(拡張子)は[".implode("・", $EXT_ALLOWS)."]です\n"; echo $i."枚目:".$error_msg; } else if($maxmemory == 1 && ($size / 1000) > $max) { $error_msg = "<font color=\"#ff0000\">エラー!</font><br>\n"; $error_msg .= "ファイルの容量が大きすぎます\n"; echo $i."枚目:".$error_msg; } else { $fp = fopen($tmp, "r"); $contents = fread($fp, filesize($tmp)); fclose($fp); $f_encoded = chunk_split(base64_encode($contents)); //エンコードして分割 echo $i."枚目:".$name." -> OK"; echo "<input type=\"hidden\" name=\"upname".$i."\" value=\"".$name."\">\n"; echo "<input type=\"hidden\" name=\"upfile".$i."\" value=\"".$f_encoded."\">\n"; } } } echo "<input type=\"submit\" name=\"submit\" value=\"メール送信\">\n"; echo "</form>\n"; } //} ?>
// [mail.php] <?php // メール送信 //{ function sendmail() { extract($_POST); // メール送信元アドレス $from = "info@example.jp"; // 送信先メールアドレス $to = "to@example.jp"; // 件名エンコード $subject = "=?ISO-2022-JP?B?".base64_encode("添付ファイル付メール送信")."?="; // バウンダリー文字(パートの境界) $boundary = md5(uniqid(rand())); // ヘッダー //{ $header = "From: $from\n"; $header .= "Reply-To: $from\n"; $header .= "X-Mailer: PHP/".phpversion()."\n"; $header .= "MIME-version: 1.0\n"; $header .= "Content-Type: multipart/mixed;\n"; $header .= "\tboundary=\"$boundary\"\n"; $header .= "Content-Transfer-Encoding: base64\n"; //} // メールボディ作成 //{ $mailbody = "This is a multi-part message in MIME format.\n\n"; $mailbody .= "--$boundary\n"; $mailbody .= "Content-Type: text/plain; charset=ISO-2022-JP;"; $mailbody .= "Content-Transfer-Encoding: 7bit\n"; $mailbody .= "\n"; $mailbody .= "添付ファイル付メール送信\n"; for($i = 0; $i < count($upfile); $i++) { if(!empty($upfile[$i])) { $name = $upname[$i]; $f_encoded = $upfile[$i]; $mailbody .= "--$boundary\n"; $mailbody .= "Content-Type: application/octet-stream;\n"; $mailbody .= "\tname=\"$name\"\n"; $mailbody .= "Content-Transfer-Encoding: base64\n"; $mailbody .= "Content-Disposition: attachment;\n"; $mailbody .= "\tfilename=\"$name\"\n\n"; $mailbody .= "$f_encoded\n"; $mailbody .= "\n"; } } $mailbody .= "--$boundary--\n"; //} // ファイルを添付してメール送信 mail($to, $subject, $mailbody, $header); } //} ?>
15,545 views