ファイルを添付してメール送信2
- 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,936 views




