PHP: Как предотвратить попадание писем в спам, отправленных через mail()
Используя функцию PHP mail() для отправки электронных писем, случается что письма могут попадать в спам, несколько вариантов решения.
Исправить заголовки
$headers = "From: myplace@example.com\r\n";
$headers .= "Reply-To: myplace2@example.com\r\n";
$headers .= "Return-Path: myplace@example.com\r\n";
$headers .= "CC: sombodyelse@example.com\r\n";
$headers .= "BCC: hidden@example.com\r\n";
if (mail($to,$subject,$message,$headers)) {
echo "The email has been sent!";
} else {
echo "The email has failed!";
}
Отправляйте письма через SMTP сервер, например с помощью PHPMailer
<?php
// Подключение библиотеки phpmailer
require 'php-mailer/PHPMailer.php';
require 'php-mailer/SMTP.php';
require 'php-mailer/Exception.php';
if(isset($_POST['name'])&& isset ($_POST['phone'])){
// Переменные, которые отправляет пользователь
$name = $_POST['name'];
$phone = $_POST['phone'];
$mail = new PHPMailer\PHPMailer\PHPMailer();
try {
$msg = "ok";
$mail->isSMTP();
$mail->CharSet = "UTF-8";
$mail->SMTPAuth = true;
// Настройки вашей почты
$mail->Host = 'smtp.yandex.ru'; // SMTP сервера GMAIL
$mail->Username = 'mymail@yandex.by'; // Логин на почте
$mail->Password = 'pass'; // Пароль на почте
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->setFrom('examplemail@yandex.by', 'Bio RenGen'); // Адрес самой почты и имя отправителя
// Получатель письма
$mail->addAddress('example@yandex.by');
$mail->addAddress('example@rambler.ru'); // Ещё один, если нужен
$mail->addAddress('example@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><br>$phone";
// Проверяем статус отправки сообщения
if ($mail->send()) {
echo "Ожидайте звонка, спасибо!";
} else {
echo "Сообщение не было отправлено. Неверно указаны настройки вашей почты";
}
} catch (Exception $e) {
echo "Сообщение не было отправлено. Причина ошибки: {$mail->ErrorInfo}";
}
} else {
echo "Сообщение не было отправлено. Пустые поля не допустимы!";
}