Моя форма не отправляет изображение на мой адрес электронной почты. В форме пользователь может загрузить изображение и всю необходимую информацию, но изображение не получено, я получаю только имя файла, которое было загружено.
Вот как почта получена в моем письме:
Подробности формы ниже
commentName: Дэвид Максвелл
email: greatken.richkid@gmail.com
сайт: 08036240369
фото: David.jpg
комментарии: Kudos
Это код php для формы:
<?php if(isset($_POST['email'])) { // CHANGE THE TWO LINES BELOW $email_to = "kennis_16@yahoo.com"; $email_subject = "form submission"; function died($error) { // your error code can go here echo "We are sorry, Your comment couldn't be submitted. Please provide solution to error(s) below.<br /><br />"; echo $error."<br /><br />"; echo "Please go back and fix these errors.<br /><br />"; die(); } // validation expected data exists if(!isset($_POST['author']) || !isset($_POST['email']) || !isset($_POST['url']) || !isset($_POST['photo']) || !isset($_POST['comment']) ) { died('We are sorry, but there appears to be a problem with the form you submitted.'); } $commentName = $_POST['author']; // required $email_from = $_POST['email']; // required $website = $_POST['url']; // required $photo = $_POST['photo']; $comments= $_POST['comment']; // required $error_message = ""; $string_exp = "/^[A-Za-z .'-]+$/"; if(!preg_match($string_exp,$commentName)) { $error_message .= 'The Name is empty, or does not appear to be valid.<br />'; } $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; if(!preg_match($email_exp,$email_from)) { $error_message .= 'Email Address is missing, or does not appear to be valid.<br />'; } $string_exp = "/^[0-9+().-]+$/"; if(!preg_match($string_exp,$website)) { $error_message .= 'Phone No is omitted, or does not appear to be valid.<br />'; } if(strlen($comments) < 2) { $error_message .= 'Comment field cannot be left blank. Please enter your comment.<br />'; } if(strlen($error_message) > 0) { died($error_message); } $email_message = "Form details below\n\n"; function clean_string($string) { $bad = array("content-type","bcc:","to:","cc:","href"); return str_replace($bad,"",$string); } $email_message .= "commentName: ".clean_string($commentName)."\n"; $email_message .= "email: ".clean_string($email_from)."\n"; $email_message .= "website: ".clean_string($website)."\n"; $email_message .= "photo: ".clean_string($photo)."\n"; $email_message .= "comments: ".clean_string($comments)."\n"; // create email headers $headers = 'From: '.$email_from."\r\n". 'Reply-To: '.$email_from."\r\n" . 'X-Mailer: PHP/' . phpversion(); @mail($email_to, $email_subject, $email_message, $headers); ?> <!-- place your own success html below --> Your comment will be reviewed before posting within 48hours. <a href='blog_post.html' style='text-decoration:none;color:#ff0099;'> Click Here </a> to return back. <?php } die(); ?>
Это HTML-код:
<html> <body> <!-- Comment Form --> <div id="respond" class="eleven columns row alpha"> <h4>Leave a comment</h4> <form id="replyform" method="post" action="commentformprocessor.php"> <div class="input_cm_wrapper"> <h6 for="commentName">Name *</h6> <input type="text" name="author" id="reply_name" class="requiredfield"/> </div> <div class="input_cm_wrapper"> <h6 for="email">Email Address *</h6> <input type="email" name="email" id="reply_email" class="requiredfield"/> </div> <div class="input_cm_wrapper last"> <h6 for="website">Phone No. *</h6> <input type="text" name="url" id="reply_website" class="last"/> </div> <span class="clear"></span> <h6 for="commentsText">Message * <span>                                     Upload Photo. *     <input type="file" name="photo" id="reply_photo" class="requiredfield" required style=""/> </span> </h6> <textarea name="comment" id="reply_message" class="requiredfield"></textarea> <span class="clear"></span><br> <button type="submit" onclick="alert ('Thank you for your comment. Please make sure all required fields are completed.')" name="send">Send</button> </form> </div> </body> </html>
Вы не можете назначить изображение переменной и отправить ее по почте. Вам нужно сделать несколько шагов
и в <form>
вы должны использовать enctype="multipart/form-data"
<form id="" method="post" action="" enctype="multipart/form-data">
Проверить правильность изображения.
<?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["photo"]["name"]); $status = 1; $FileType = pathinfo($target_file,PATHINFO_EXTENSION); // Allow certain file formats if($FileType != "jpg" && $FileType != "png" && $FileType != "jpeg") { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $status = 0; } // Check if $status is set to 1 if ($status == 1) { // if everything is ok, try to upload file if (move_uploaded_file($_FILES["photo"]["tmp_name"], $target_file)) { echo "The file has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } else { echo "Sorry, your file was not uploaded."; } ?>
Затем получите путь к файлу
<?php $path = "uploads/".$_FILES["photo"]["tmp_name"]; ?>
в почте
<img src="<?php echo $path ;?>" alt="">
Включите это в заголовок электронной почты
$header = "From:".$email_from."\nMIME-Version: 1.0\nContent-Type: text/html; charset=utf-8\n";
Вот полное решение. Я сохранил это просто. Вы можете добавить другие коды позже. Я проверил код и его работу отлично.
Часть PHP
<?php $error_message = ""; if(isset($_POST['send'])) { // CHANGE THE TWO LINES BELOW $email_to = "kennis_16@yahoo.com"; $email_subject = "form submission"; $commentName = $_POST['author']; // required $email_from = $_POST['email']; // required $website = $_POST['url']; // required //$photo = $_POST['photo']; $photoname=$_FILES['photo']['name']; $tmp_name=$_FILES['photo']['tmp_name']; $comments= $_POST['comment']; // required if($commentName==""){ echo "Empty author name"; }else if($email_from==""){ echo "Empty email"; } else{ //create a folder name called img $destinationpath="img/".$photoname; $moveimage=move_uploaded_file($tmp_name,$destinationpath); if(!$moveimage){ die("Error in uploading"); } $message = "Form details below\n\n"; $message .= "commentName: ".$commentName."\n"; $message .= "email: ".$email_from."\n"; $message .= "website: ".$website."\n"; $message .= "comments: ".$comments."\n"; // boundary $semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; // preparing attachments $file = fopen($destinationpath,"rb"); $f_contents = fread($file,filesize($destinationpath)); $f_contents = chunk_split(base64_encode($f_contents)); fclose($file); # Get a random 32 bit number using time() as seed. $num = md5( time() ); # Define the main headers. $header = "From:xyz@somedomain.com\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: multipart/mixed; "; $header .= "boundary=$num\r\n"; $header .= "--$num\r\n"; # Define the message section $header .= "Content-Type: text/plain\r\n"; $header .= "$message\r\n"; $header .= "--$num\r\n"; # Define the attachment section $header .= "Content-Type: multipart/mixed; "; $header .= "name=\"$photoname\"\r\n"; $header .= "Content-Transfer-Encoding:base64\r\n"; $header .= "Content-Disposition:attachment; "; $header .= "filename=\"$photoname\"\r\n\n"; $header .= "$f_contents \r\n"; $header .= "--$num--"; mail($email_to, $email_subject, $message, $header); } ?> <!-- place your own success html below --> <h2>Your comment will be reviewed before posting within 48hours. </h2> <?php } ?>
И часть html внутри тега тела
<!-- Comment Form --> <div id="respond" class="eleven columns row alpha"> <h4>Leave a comment</h4> <form id="replyform" method="post" action="" enctype="multipart/form-data"> <div class="input_cm_wrapper"> <h6 for="commentName">Name *</h6> <input type="text" name="author" id="reply_name" class="required"/> </div> <div class="input_cm_wrapper"> <h6 for="email">Email Address *</h6> <input type="email" name="email" id="reply_email" class="required"/> </div> <div class="input_cm_wrapper last"> <h6 for="website">Phone No. *</h6> <input type="text" name="url" id="reply_website" class="last"/> </div> <span class="clear"></span> <h6 for="commentsText"> Message * <span>                                     Upload Photo. *     <input type="file" name="photo" id="reply_photo" class="requiredfield" required /> </span> </h6> <textarea name="comment" id="reply_message" class="requiredfield"></textarea> <span class="clear"></span><br> <button type="submit" name="send">Send</button> </form> </div>
ура