カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

ファイルを添付してメール送信2

この記事は最終更新日から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,546 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です