Отправка файла с сайта на почту HTML JS PHP

191
03 сентября 2018, 06:50

Всем привет, помогите, пожалуйста, нашел статью, как сделать форму с полями и прикреплением файла, сделал все по инструкции, но письма не отправляются. Была задача: Сделать форму с именем телефоном и возможностью прикрепить файлы, дальше чтобы эти данные отправлялись с сайта на почту админа сайта. Снизу приложил код что получилось. Прошу помочь. Заранее спасибо

$(function(){ 
 use strict’; 
$(‘#form’).on(‘submit’, function(e){ 
 e.preventDefault(); 
 var fd = new FormData( this ); 
 $.ajax({ 
 url: send.php’, 
 type: POST’, 
 contentType: false,  
 processData: false,  
 data: fd, 
 success: function(msg){ 
if(msg == ok’) { 
 $(“.button”).val(“Отправлено”);  
} else { 
 $(“.button”).val(“Ошибка”); 
 setTimeout(function() {$(“.button”).val(“Отправить”);}, 3000); 
} 
 } 
 }); 
 }); 
});
<form action="send.php" enctype="multipart/form-data" method="post" id="form"> 
            <h1>Запись на консультацию</h1> 
            <input type="text" name="name" required placeholder="Введите Ваше имя"> 
            <input name=”number” type=”text” required placeholder="Введите Ваш телефон"> 
            <input placeholder=”example@mail.com” name=”email” type=”text” required> 
            <label for="fileFF">Загрузите файл</label> 
            <input type="file" name="userfile[]" multiple id="userfile" required> 
            <br> 
            <input value="Отправить" type="submit" name="submit"> 
            <a href="#" class="close">Закрыть</a> 
          </form>

И PHP

<?php                                                                      
// Файлы phpmailer
require phpmailer.php’;
require smtp.php’;
// Переменные
$name = $_POST[‘name’];
$number = $_POST[‘number’];
$email = $_POST[‘email’];
// Настройки
$mail = new PHPMailer;
$mail->isSMTP(); 
$mail->Host = smtp.yandex.ru’; 
$mail->SMTPAuth = true; 
$mail->Username = rumyantsev.pavel2017; // Ваш логин в Яндексе. Именно логин, без @yandex.ru
$mail->Password = GFIFGFIF2002’; // Ваш пароль
$mail->SMTPSecure = ssl’; 
$mail->Port = 465;
$mail->setFrom(‘rumyantsev.pavel2017@yandex.ru’); // Ваш Email
$mail->addAddress(‘rumyantsev.pavel2017@yandex.ru’’); // Email получателя
$mail->addAddress(‘rumyantsev.pavel2017@yandex.ru’’); // Еще один email, если нужно.
// Прикрепление файлов
 for ($ct = 0; $ct < count($_FILES[‘userfile’][‘tmp_name’]); $ct++) {
 $uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES[‘userfile’][‘name’]    [$ct]));
 $filename = $_FILES[‘userfile’][‘name’][$ct];
 if (move_uploaded_file($_FILES[‘userfile’][‘tmp_name’][$ct], $uploadfile)) {
 $mail->addAttachment($uploadfile, $filename);
 } else {
 $msg .= Failed to move file to  . $uploadfile;
 }
 } 
// Письмо
$mail->isHTML(true); 
$mail->Subject = “Заголовок”; // Заголовок письма
$mail->Body = “Имя $name . Телефон $number . Почта $email”; // Текст письма
// Результат
if(!$mail->send()) {
 echo Message could not be sent.’;
 echo Mailer Error:  . $mail->ErrorInfo;
} else {
 echo ok’;
}
?>
Answer 1

Проверенное оттестированное решение

<?php
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    require 'src/Exception.php';
    require 'src/PHPMailer.php';
    require 'src/SMTP.php';
    require 'language/phpmailer.lang-ru.php';
    $msg = '';
    if (array_key_exists('userfile', $_FILES)) {
        $mail = new PHPMailer;
        $mail->isSMTP();
        $mail->Host = 'smtp.server.ru';
        $mail->SMTPAuth = true;
        $mail->Username = 'login@server.ru';
        $mail->Password = 'uPassword';
        $mail->SMTPSecure = 'ssl';
        $mail->Port = 465;
        $mail->setFrom('login@server.ru', 'PHP Mailer');
        $mail->addAddress($_POST['to'], '');
        $mail->Subject = 'PHPMailer file sender';
        $mail->msgHTML('My message body');        
        $blacklist = array(".php", ".phtml", ".php3", ".php4"); 
        for ($ct = 0; $ct < count($_FILES['userfile']['tmp_name']); $ct++) {
            $filename = $_FILES['userfile']['name'][$ct];
            $ext = substr($filename, strrpos($filename, '.'), strlen($filename) - 1); // В переменную $ext заносим расширение загруженного файла.
            if (in_array($ext, $blacklist)) {die();}
            $uploadfile = dirname(__FILE__)."/uploads/" . basename($filename);
            if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)) {
                $mail->addAttachment($uploadfile, basename($filename));
            } else {
                $msg .= 'Failed to move file to ' . $uploadfile;
            }
        }
        if (!$mail->send()) {
            $msg .= "Mailer Error: " . $mail->ErrorInfo;
        } else {
            $msg .= "Message sent!";
        }
    }
?>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>PHPMailer Upload</title>
</head>
<body>
<?php if (empty($msg)) { ?>
    <form method="post" enctype="multipart/form-data">
        <input type="text" name="to" value="">
        <input type="hidden" name="MAX_FILE_SIZE" value="10485760">
        Select one or more files:
        <input name="userfile[]" type="file" multiple="multiple">
        <input type="submit" value="Send Files">
    </form>
<?php } else {
    echo $msg;
} ?>
</body>
</html>
READ ALSO
Не работает mysqli_fetch_assoc

Не работает mysqli_fetch_assoc

Почему-то fetch_assoc сразу возвращает false, хотя в таблице 15 строкС подключением все в порядке

178
angular не работает в HTML из сервера PHP

angular не работает в HTML из сервера PHP

Я начинающий web-программист, не судите строго с:

198
Почему не работает PayPal на сервере?

Почему не работает PayPal на сервере?

PayPal работает на localhost нормально, а на сервере нетТестовые деньги снимает, но не идет редирект после оплаты

141
Удалить ссылку из текста

Удалить ссылку из текста

Как можно удалить такую ссылку https://sitecom/7e1cJk из текста

168