首页 > 解决方案 > 当我发送带有空输入文件的电子邮件时,我得到一个空的 tmp 文件

问题描述

当我在公式中的所有字段中插入数据时(在上传文件按钮中添加图像除外),电子邮件已发送,但我在电子邮件中收到空文件,当将 1 个文件或多个文件添加到表单并提交所有内容时工作正常,我收到带有多文件上传的电子邮件。所以我知道当文件为空时如何防止发送文件

这是表单的 html 代码:

<div class="contact-form">
            <div id='message_post'></div>
            <?php echo $result; ?>
            <div class="col-lg-4"><input name="name" type="text" placeholder="Nom" class="forminput" required></div>
            <div class="col-lg-4"><input name="email" type="text" placeholder="Email" required></div>
            <div class="col-lg-4"><input name="phone" type="text" placeholder="Téléphone"></div>
            <div class="col-lg-12"><textarea name="comment" cols="1" rows="3" placeholder="Décrivez votre projet ici" required></textarea></div>
            <input type="file" name="fileToUpload[]" id="fileToUpload" style="display:none;" multiple/>
                <label for="fileToUpload" class="file-upload-label">Envoyez-nous vos photos</label>
                    <span id="file-chosen">Aucun fichier choisi</span>
            <input class="col-lg-12" id="website" name="website" type="text" value=""  />
            <div class="col-lg-12 buttons"><button class="btn" type='submit' value='Submit' name='submitf' id="submitf"><i class="fa fa-envelope"></i> Envoyer</button></div>
        </div>

这是用于通过多重上传发送电子邮件的 php 代码

<?php
                
                error_reporting(E_ALL);
                ini_set('display_errors', 0);
                
                if(isset($_FILES) && (bool) $_FILES) {

                    $uname = $_POST['name'];
                    $uemail = $_POST['email'];
                    $uphone = $_POST['phone'];
                    $adminemail = "example@gmail.com";
                    $comments = stripslashes($_POST['comment']);
                    $person= 'Nom: ';
                    $email = 'Email: ';
                    $phone = 'Téléphone: ';
                    $es ='    ';
                    $msg = 'Message: ';

                    $AllowedExtensions = ["pdf","doc","docx","gif","jpeg","jpg","png","rtf","txt"];
                    $files = [];
                    $server_file = [];
                    foreach($_FILES as $name => $file) {
                        $file_name = $file["name"];
                        $file_temp = $file["tmp_name"];
                        foreach($file_name as $key) {
                            $path_parts = pathinfo($key);
                            $extension = strtolower($path_parts["extension"]);
                            if(!in_array($extension, $AllowedExtensions)) { echo '<div class="errorMessage"></div>'; }
                            $server_file[] = "upload/{$path_parts["basename"]}";
                        }
                        for($i = 0; $i<count($file_temp); $i++) { move_uploaded_file($file_temp[$i], $server_file[$i]); }
                    }
                    $to = $adminemail;
                    $from = $uemail;
                    $subject ="Contact Form: ";
                    $message = $person.$uname.$es.$email.$uemail.$es.$phone.$uphone.$es.$message.$comments;
                    $headers = "From: $from";
                    $semi_rand = md5(time());
                    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
                    $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
                    $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
                    $message .= "--{$mime_boundary}\n";
                    $FfilenameCount = 0;
                    for($i = 0; $i<count($server_file); $i++) {
                        $afile = fopen($server_file[$i],"rb");
                        $data = fread($afile,filesize($server_file[$i]));
                        fclose($afile);
                        $data = chunk_split(base64_encode($data));
                        $name = $file_name[$i];
                        $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$name\"\n" .
                            "Content-Disposition: attachment;\n" . " filename=\"$name\"\n" .
                            "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
                        $message .= "--{$mime_boundary}\n";
                    }
                    if(mail($to, $subject, $message, $headers)) {
                        echo '<div class="successMessage">Message envoyé! Nous vous recontacterons dès que possible.</div>';
                    } else {
                        echo '<div class="errorMessage">ERREUR: Veuillez envoyer une autre fois !</div>';
                    }
                }   
                
                ?>

标签: phphtmlemailemail-attachments

解决方案


推荐阅读