Как настроить отправку файла в почтовой форме с phpmailer?

Всем привет.
Не получается сделаем отправку файла.
Есть обработчик mail.php

<?php 

require_once('phpmailer/PHPMailerAutoload.php');
$mail = new PHPMailer;
$mail->CharSet = 'utf-8';

$name = $_POST['user_name'];
$phone = $_POST['user_phone'];
$email = $_POST['user_email'];
$file = $_POST['user_file'];
$tema = $_POST['tema'];
$message = $_POST['message'];

//$mail->SMTPDebug = 3;                               // Enable verbose debug output

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.mail.ru';  																							// Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'скрыто'; // Ваш логин от почты с которой будут отправляться письма
$mail->Password = 'скрыто'; // Ваш пароль от почты с которой будут отправляться письма
$mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465; // TCP port to connect to / этот порт может отличаться у других провайдеров

$mail->setFrom('скрыто'); // от кого будет уходить письмо?
$mail->addAddress('скрыто');     // Кому будет уходить письмо 
//$mail->addAddress('ellen@example.com');               // Name is optional
//$mail->addReplyTo('info@example.com', 'Information');
//$mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');

$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'скрыто - письмо';
$mail->Body    = "<b>Имя:</b> $name <br>
                    <b>Телефон:</b> $phone<br>
                    <b>Почта:</b> $email<br>
                    <b>Тема:</b> $tema<br>
                    <b>Сообщение:</b><br>$message";
$mail->AltBody = '';

if(!$mail->send()) {
    echo 'Error';
} else {
    header('location: /');
}
?>


Есть форма с инпутом для файла
<input type="file" name="user_file" class="form-control">

Пытался колдовать, не получается)

P.S.
Если не трудно, можете подсказать где почитать про то, как сделать, чтобы форма не перезагружалась, а открывалось другое модальное окно с благодарностью. Буду очень признателен.
  • Вопрос задан
  • 581 просмотр
Решения вопроса 1
@keko3keke Автор вопроса
Решил так.

Добавив
// Прикрипление файлов к письму
if (!empty($_FILES['userfile']['name'][0])) {
    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 .= 'Не удалось прикрепить файл ' . $uploadfile;
        }
    }   
}


В итоге все выглядит так.
<?php 

require_once('phpmailer/PHPMailerAutoload.php');
$mail = new PHPMailer;
$mail->CharSet = 'utf-8';

$name = $_POST['user_name'];
$phone = $_POST['user_phone'];
$email = $_POST['user_email'];
$tema = $_POST['tema'];
$message = $_POST['message'];

//$mail->SMTPDebug = 3;                               // Enable verbose debug output

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.mail.ru';  																							// Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'скрыто'; // Ваш логин от почты с которой будут отправляться письма
$mail->Password = 'скрыто'; // Ваш пароль от почты с которой будут отправляться письма
$mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465; // TCP port to connect to / этот порт может отличаться у других провайдеров

$mail->setFrom('скрыто'); // от кого будет уходить письмо?
$mail->addAddress('скрыто');     // Кому будет уходить письмо 
//$mail->addAddress('ellen@example.com');               // Name is optional
//$mail->addReplyTo('info@example.com', 'Information');
//$mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');

// Прикрипление файлов к письму
if (!empty($_FILES['userfile']['name'][0])) {
    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 .= 'Не удалось прикрепить файл ' . $uploadfile;
        }
    }   
}


$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'скрыто';
$mail->Body    = "<b>Имя:</b> $name <br>
                    <b>Телефон:</b> $phone<br>
                    <b>Почта:</b> $email<br>
                    <b>Тема:</b> $tema<br>
                    <b>Сообщение:</b><br>$message";
$mail->AltBody = '';

if(!$mail->send()) {
    echo 'Error';
} else {
    header('location: /');
}
?>


Так выглядит форма. Вдруг кому пригодится.
<form action="mail.php" method="POST" enctype="multipart/form-data">
          <div class="form-header">
            <i class="fa fa-phone"></i>
            <div class="text">
              <div class="title">Бесплатный просчет</div>
            </div>
          </div>
          <div class="form-body">
            <div class="row">
              <div class="form-group">
                <div class="col-md-12">
                  <label>Ваше имя: <span class="required-star">*</span></label>
                  <div class="input">
                    <input type="text" name="user_name" class="form-control required " required><i class="fa fa-user"></i> </div>
                </div>
              </div>
            </div>
            <div class="row">
              <div class="form-group">
                <div class="col-md-12">
                  <label>Телефон: <span class="required-star">*</span></label>
                  <div class="input">
                    <input type="tel" name="user_phone" class="form-control required phone" required><i class="fa fa-phone"></i> </div>
                </div>
              </div>
            </div>
            <div class="row">
              <div class="form-group">
                <div class="col-md-12">
                  <label>Email: <span class="required-star">*</span></label>
                  <div class="input">
                    <input type="email" name="user_email" class="form-control required" required><i class="fa fa-email"></i> </div>
                </div>
              </div>
            </div>            
            <div class="row">
              <div class="form-group">
                <div class="col-md-12">
                  <label>Файл: <span class="required-star"></span></label>
                  <div class="input">
                    <input type="file" name="userfile[]" id="userfile" class="form-control"><i class="fa fa-file"></i> </div>
                </div>
              </div>
            </div>
            <div class="row processing-block">
              <div class="form-group">
                <div class="col-md-12">
                  <div class="input">
                    <input id="checkbox" class="processing_approval" type="checkbox" name="checkbox" required >
                    <label for="processing_approval">Я согласен на
                      <a href="/privacy.php" target="_blank" rel="nofollow">обработку персональных данных</a>
                    </label>
                  </div>
                </div>
              </div>
            </div>
          </div>
          <div class="form-footer clearfix">
            <div class="pull-left required-fileds">
              <i class="star">*</i> - Обязательные поля </div>
            <div class="pull-right">
              <input class="btn-lg btn btn-default" type="submit" name="submit" id="submit" value="Отправить" />
            </div>
          </div>
        </form>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@galaxy
$mail->addAttachment($path, $name, $encoding, $type);

Если не трудно, можете подсказать где почитать про то, как сделать, чтобы форма не перезагружалась, а открывалось другое модальное окно с благодарностью

Отправлять аяксом, окно через dialog или js-приблуду (типа bootstrap modal)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы