Администратор
11:01 03-04-2019Прием прием
Здравствуйте друзья! Сегодня хочу поделится с вами php скриптом, который без особых проблем может отправлять письма на любую почту. Ранее я публиковал информацию об отправке писем через php.
"РАБОТА С ПОЧТОЙ PHP"Там мы рассматривали отправку почты через функцию phpMailer, разбирались с ее установкой и настройкой. На самом деле если в вашем письме нет никаких дополнительных вложений(файлов, картинок), то все можно сделать намного проще. Лично я пользуюсь стандартной функцией php - mail(), так как это не требует установки дополнительных компонентов и их муторной настройки. И так, приступаем к рассмотрению!
Работу с функцией mail мы будем проверять на моем хостинге, так как из локальной сети отправить письмо на почту не получится.
Разберем что принимает в себя данная функция:
mail($to, $subject, $body, $headers);
$to - кому отправляется письмо (почта)
$subject - Тема письма
$body - текст письма
$headers - Заголовок письма
Чтобы письмо было отправлено, я использую две функции:
function send_mail(
$n_from, # имя отправителя
$e_from, # email отправителя
$n_to, # имя получателя
$e_to, # email получателя
$charset, # кодировка переданных данных
$charset2, # кодировка письма
$theme, # тема письма
$text, # текст письма
$flag # письмо в виде html или обычного текста
) {
$to = header_encode($n_to, $charset, $charset2) . ' <' . $e_to . '>';
$theme = header_encode($theme, $charset, $charset2);
$from = header_encode($n_from, $charset, $charset2) .' <' . $e_from . '>';
if($charset != $charset2) {
$text = iconv($charset, $charset2, $text);
}
$headers = "From: $from\r\n";
$type = ($flag) ? 'html' : 'plain';
$headers .= "Content-type: text/$type; charset=$charset2\r\n";
$headers .= "Mime-Version: 1.0\r\n";
return mail ($to, $theme, $text, $headers);
}
function header_encode($string, $charset, $charset2) {
if($charset != $charset2) {
$string = iconv($charset, $charset2, $string);
}
return '=?' . $charset2 . '?B?' . base64_encode($string) . '?=';
}
с помощью них вы сможете правильно сформировать общие заголовки письма и передать их в функцию mail().
Рассмотрим какие параметры передаются в функцию send_mail():
$n_from - имя отправителя
$e_from - email отправителя
$n_to - имя получателя
$e_to - email получателя
$charset - кодировка переданных данных
$charset2 - кодировка письма
$theme - тема письма
$text - текст письма
$flag - флаг, (true) - письмо отправляется в формате html, (false) - письмо отправляется в формате text/plain
Можно заметить что параметров в функцию send_mail() мы передаем намного больше чем в mail(). Все эти данные необходимы для формирования заголовков.
Теперь практический пример:
Допустим у нас есть страница с формой.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Отправка почты с помощью функции mail</title>
</head>
<body>
<form action="mail.php" method="post">
<input type="text" name="name" required placeholder="Введите ваше имя" />
<input type="email" name="email" required placeholder="Введите ваш email" />
<button >Подписаться</button>
</form>
</body>
</html>
Отправка формы идет на обработчик mail.php
<?php
function send_mail(
$n_from, # имя отправителя
$e_from, # email отправителя
$n_to, # имя получателя
$e_to, # email получателя
$charset, # кодировка переданных данных
$charset2, # кодировка письма
$theme, # тема письма
$text, # текст письма
$flag # письмо в виде html или обычного текста
) {
$to = header_encode($n_to, $charset, $charset2) . ' <' . $e_to . '>';
$theme = header_encode($theme, $charset, $charset2);
$from = header_encode($n_from, $charset, $charset2) .' <' . $e_from . '>';
if($charset != $charset2) {
$text = iconv($charset, $charset2, $text);
}
$headers = "From: $from\r\n";
$type = ($flag) ? 'html' : 'plain';
$headers .= "Content-type: text/$type; charset=$charset2\r\n";
$headers .= "Mime-Version: 1.0\r\n";
return mail ($to, $theme, $text, $headers);
}
function header_encode($string, $charset, $charset2) {
if($charset != $charset2) {
$string = iconv($charset, $charset2, $string);
}
return '=?' . $charset2 . '?B?' . base64_encode($string) . '?=';
}
if(
isset($_POST['name']) &&
trim($_POST['name']) !== '' &&
isset($_POST['email']) &&
filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)
){
$message = '<h2>Новый подписчик!</h2>';
$message .= '<p>'.trim($_POST['name']) .'<p>';
$message .= '<p>'.trim($_POST['email']) .'<p>';
$message .= '<span float="right">'.date('H:i d-m-Y').'</span>';
send_mail(
'Новый подписчик!', // имя отправителя
'admin@webmygames.ru', // email отправителя
'Новый подписчик!', // имя получателя
'andrey-gribin@mail.ru', // email получателя
'UTF-8', // кодировка переданных данных
'KOI8-R', // кодировка письма
'Сообщение с сайта о новом подписчике', // тема письма
$message,
true // письмо в виде html или обычного текста
);
}
$referer = $_SERVER['HTTP_REFERER'];
if($referer === null){
$referer = '/';
}
header("Location: ".$referer);
?>
В самом обработчике мы используем все вышеописанные функции и в конечном итоге вызываем функцию send_mail() куда передаем данные. Общее сообщение письма сформировано в переменной $message.
Отправка осуществляется с почты admin@webmygames.ru на andrey-gribin@mail.ru.
Здесь есть очень тонкий нюанс! Почта с которой будет отправляться сообщение обязательно должна быть АДМИНСКОЙ. Если вы попробуете осуществить отправку, например с почты такого вида (andrey@yandex.ru, andrey@mail.ru, andrey@gmail.ru и т. п.), то вероятнее всего у вас ничего не пройдет.
Админская почта представляет собой такую структуру {название}@{ваш домен}. В нашем случае это admin@webmygames.ru, admin - произвольное название, webmygames.ru - домен с которого мы будем отправлять письмо. Такую почту вы можете создать на своем хостинге, иногда админская почта указывается в переданных доступах хостинга при его покупке. Как создавать админскую почту мы не будем, так как это не входит в тему поста.
В итоге работы скрипта на мою почту andrey-gribin@mail.ru пришло письмо с переданной информацией через форму отправки.
Сам процесс произошел довольно быстро без видимых задержек. Я использую данный скрипт постоянно из за его простоты, скорости работы и надежности. Письма успешно проходят на почты mail.ru, yandex.ru, gmail.com и т. п. Теперь и вы можете использовать его в своих проектах! Надеюсь я помог вам в решении вашего вопроса.
Не забывайте подписываться на
Мой блог группу Вконтакте канал youtubeС вами был Грибин Андрей. Всего вам хорошего!
Внимание!!! Комментарий теперь перед публикацией проходит модерацию
Прием прием