Справочники, инструменты, документация

PHP: Отправка писем через SMTP в PHPMailer

PHPMailer — полнофункциональный класс для создания и передачи электронной почты для PHP.
 <form enctype="multipart/form-data" method="post" id="form">
  <p>Имя</p>
  <input placeholder="Представьтесь" name="name" type="text">
  <p>Email</p>
  <input placeholder="Укажите почту" name="email" type="text">
  <p>Сообщение</p>
  <textarea name="text"></textarea>
  <p>Прикрепить файлы</p>
  <input type="file" name="myfile[]" multiple id="myfile">
  <p><input value="Отправить" type="submit"></p>
 </form>

<script src="jquery-3.4.0.min.js"></script>
<script>
 // Отправка данных на сервер
 $('#form').trigger('reset');
 $(function () {
  'use strict';
  $('#form').on('submit', function (e) {
   e.preventDefault();
   $.ajax({
    url: 'send.php',
    type: 'POST',
    contentType: false,
    processData: false,
    data: new FormData(this),
    success: function (msg) {
     console.log(msg);
     if (msg == 'ok') {
      alert('Сообщение отправлено');
      $('#form').trigger('reset'); // очистка формы
     } else {
      alert('Ошибка');
     }
    }
   });
  });
 });
</script>

send.php

<?php
// Файлы phpmailer
require 'phpmailer/PHPMailer.php';
require 'phpmailer/SMTP.php';
require 'phpmailer/Exception.php';
// Переменные, которые отправляет пользователь
$name = $_POST['name'];
$email = $_POST['email'];
$text = $_POST['text'];
$mail = new PHPMailer\PHPMailer\PHPMailer();
try {
 $msg = "ok";
 $mail->isSMTP(); 
 $mail->CharSet = "UTF-8";           
 $mail->SMTPAuth = true;
 // Настройки вашей почты
 $mail->Host  = 'smtp.gmail.com'; // SMTP сервера GMAIL
 $mail->Username = 'YOURLOGIN'; // Логин на почте
 $mail->Password = 'YOURPASSWORD'; // Пароль на почте
 $mail->SMTPSecure = 'ssl';
 $mail->Port  = 465;
 $mail->setFrom('youremail@gmail.com', 'YOUR NAME'); // Адрес самой почты и имя отправителя
 // Получатель письма
 $mail->addAddress('youremail@yandex.ru'); 
 $mail->addAddress('youremail@gmail.com'); // Ещё один, если нужен
 // Прикрипление файлов к письму
if (!empty($_FILES['myfile']['name'][0])) {
 for ($ct = 0; $ct < count($_FILES['myfile']['tmp_name']); $ct++) {
  $uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['myfile']['name'][$ct]));
  $filename = $_FILES['myfile']['name'][$ct];
  if (move_uploaded_file($_FILES['myfile']['tmp_name'][$ct], $uploadfile)) {
   $mail->addAttachment($uploadfile, $filename);
  } else {
   $msg .= 'Неудалось прикрепить файл ' . $uploadfile;
  }
 } 
}
  // -----------------------
  // Само письмо
  // -----------------------
  $mail->isHTML(true);

  $mail->Subject = 'Заголовок письма';
  $mail->Body = "<b>Имя:</b> $name <br>
  <b>Почта:</b> $email<br><br>
  <b>Сообщение:</b><br>$text";
// Проверяем отравленность сообщения
if ($mail->send()) {
 echo "$msg";
} else {
echo "Сообщение не было отправлено. Неверно указаны настройки вашей почты";
}
} catch (Exception $e) {
 echo "Сообщение не было отправлено. Причина ошибки: {$mail->ErrorInfo}";
}

Скачать пример