K
K
Konstantin2020-05-20 21:05:19
PHPMailer
Konstantin, 2020-05-20 21:05:19

How to set up sending a file in a mail form with phpmailer?

Hello.
Failed to send the file.
There is a mail.php handler

<?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('[email protected]');               // Name is optional
//$mail->addReplyTo('[email protected]', 'Information');
//$mail->addCC('[email protected]');
//$mail->addBCC('[email protected]');

$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: /');
}
?>


There is a form with an input for a file
<input type="file" name="user_file" class="form-control">

I tried to conjure, it doesn’t work)

PS
If it’s not difficult, you can tell me where to read about how to make the form not reload, but open another modal window with gratitude. I would be very grateful.

Answer the question

In order to leave comments, you need to log in

2 answer(s)
K
Konstantin, 2020-05-21
@keko3keke

Decided so.
By adding

// Прикрипление файлов к письму
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;
        }
    }   
}

In the end, everything looks like this.
<?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('[email protected]');               // Name is optional
//$mail->addReplyTo('[email protected]', 'Information');
//$mail->addCC('[email protected]');
//$mail->addBCC('[email protected]');

// Прикрипление файлов к письму
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: /');
}
?>

This is what the form looks like. Suddenly someone will come in handy.
<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>

G
galaxy, 2020-05-20
@galaxy

$mail->addAttachment($path, $name, $encoding, $type);

If it's not difficult, you can tell me where to read about how to make the form not reload, but open another modal window with gratitude

Send by ajax, window via dialog or js-stray (like bootstrap modal)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question