Вменяемая инструкция к PHPmailer

UPDATE:

PHPMailer обновился и я написал новую статью под новую версию.

Находятся всё-таки особо одарённые люди, которые не понимают, что нужно кликнуть по ссылке ниже, чтобы открыть новую статью, с обновлением…. Специально для вас:

Новая статья:

Старая статья:

Если кто-то писал себе сайт, то он обязательно сталкивался с задачей “Организовать на своём сайте обратную связь”. Если нужно было отправить с сайта простое письмо, то на помощь приходил чистый PHP. Но когда нужно было прикрепить файлы к письму, тогда начинались проблемы. Стандартные средства PHP не позволяют отправить файл на почту. Ну как не позволяют… Позволяют, только свой сервер нужно очень тонко настроить, да и версия PHP должна быть старой. Всё это сложно сделать в условиях, когда ты не хостер. Тогда на помощь приходит PHPMailer. Если быть честным, то мне самому не нравится привлекать сторонние приложения для работы одной только функции, но поверьте мне: выхода у вас нет. Смиритесь… В сети есть несколько “инструкций” по PHPMailer, но не одну из них я не могу назвать понятной или, как я говорю, вменяемой. Вменяемой не могу назвать как минимум потому, что в PHPMailer 97% файлов можно удалить, и они там без надобности, хотя ни в одной инструкции никто не предлагает этого сделать.

Смирись и отправляй файлы на почту через PHPMailer. Другого выбора у тебя нет. Это самый простой вариант

Инструкция

1. Начнём того, что нам нужно скачать сам PHPMailer. Для этого переходим на его репозиторий github.phpmailer и скачиваем архив.

В начале кликаем по “Clone or Download”, затем по “Download ZIP”

2. В архиве нам нужны только два файла: class.smtp.php и class.phpmailer.php . Скидываем эти 2 файла себе куда-нибудь в папку. Остальное на*уй не нужно

3. Теперь нам нужно создать PHP файл с настройками. Создадим файл с именем send.php и с таким содержанием:

<?php
// Файлы phpmailer
require ‘class.phpmailer.php’;
require ‘class.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 = ‘yourlogin’; // Ваш логин в Яндексе. Именно логин, без @yandex.ru
$mail->Password = ‘yourpass’; // Ваш пароль
$mail->SMTPSecure = ‘ssl’;
$mail->Port = 465;
$mail->setFrom(‘example@yandex.ru’); // Ваш Email
$mail->addAddress(‘example@mail.ru’); // Email получателя
$mail->addAddress(‘example@gmail.com’); // Еще один 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’;
}
?>

Отправка будет производиться на вашу Яндекс почту, поэтому и настройки от Яндекса.

4. Вам нужно изменить параметры этих полей на свои:

  • $mail->Username
  • $mail->Password
  • $mail->setFrom
  • $mail->addAddress
  • $mail->Subject
  • $mail->Body

5. Создадим на вашем сайте HTML форму отправки письма

<form enctype=”multipart/form-data” method=”post” id=”form”>
<p>Имя</p>
<input placeholder=”В. В. Путин” name=”name” type=”text” >
<p>Телефон</p>
<input placeholder=”+7 777 77 77 777" name=”number” type=”text” >
<p>Email</p>
<input placeholder=”example@mail.com” name=”email” type=”text” >
<p>Прикрепить файлы</p>
<input type=”file” name=”userfile[]” multiple id=”userfile” class=”w100" accept=”image/*” >
<p><input value=”Отправить” type=”submit”></p>
</form>

6. Вверху вашего документа index.html подключим JQuery. Внутри тегов <head></head> вставьте код:

<script src=”//ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js”></script>

7. Внизу вашего документа, перед тегом </body> вставьте js код

<script>
$(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’) {
alert('Отправлено');
} else {
alert('Ошибка')
}
}
});
});
});
</script>

8. Переместите PHP файлы в корень вашего сайта. Всё.

Скачать готовую форму

Так же вы можете скачать форму отправки письма с PHPMailer по этой ссылке. В архиве находятся все необходимые файлы

Спасибо за внимание. Улыбок тебе дед Макар

UPD: Получил несколько сообщений о том, что что-то обновилось и теперь ничего не работает, однако я, спустя 3 года, проверил и код по прежнему работоспособен и без каких-либо проблем выполняет свою функцию. Но это касается лишь файлов в прикреплённом архиве. Если мы берём PHPMailer с Github, то там не всё так однозначно… Тех нужных файлов вообще в архиве теперь нет. Как разберусь — напишу ещё одну статью по поводу новой версии PHPMailer

UPD2: Написана вторая версия статьи:

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store