php - 当我发送带有空输入文件的电子邮件时,我得到一个空的 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>';
}
}
?>
解决方案
推荐阅读
- phpmailer - Cannot modify header information - headers already sent in php mailer
- php - 如何从 phpUnit Mock 对象中获取私有属性
- dart - Flutter FilterChip _cast 列表从端点动态加载
- javascript - 刷新页面时,Reactjs 道具不会填充字段
- package.json - 如何在不考虑 package.json 版本范围的情况下将包升级到最新版本?
- django - Django apache2 url直接没有基本url
- javascript - 新的 FB UI 元素提升/降级做什么
- machine-learning - SVM 加载的训练模型的准确率明显降低;我们也需要保存 TokenCountVectorizer 吗?
- symfony - 重置 Symfony 会话生命周期/用户活动超时
- ios - iOS:我收到一条错误消息“请求的属性表达式的地址”