Новая форма отправки данных на почту с сайта с решенной проблемой кодировки писем в Outlook / HTML и PHP
Автор Макс ПуляСегодня поистине великий день! Потому что я опубликовываю полностью рабочую форму отправки данных на почту с сайта, где решена проблема с кодировкой писем, при получении их почтовым клиентом Outlook. Пользуйтесь на здоровье!
Предыдущая форма обратной связи, опубликованная на сайте Epic Blog была почти совершенна! Она рабочая и выполняет все свои функции. Но была, пожалуй, одна проблема… Когда письма приходили в почтовый клиент Outlook от Microsoft, вид у них был не читабельный, вот такой:
Дело в том, что Outlook не понимал, в какой кодировке приходит письмо и поэтому сам ему присваивал кодировку "Кириллица (KOI8-R)". И ничего не помогало исправить эту проблему в Аутлуке. Принудительная смена кодировки письма в UTF-8 или любую другую не давали никаких положительных результатов.
И эта проблема была только в Аутлуке. Другие остальные почтовые сервисы и почтовые клиенты принимают письмо в правильной кодировке. Но так как огромное количество людей на Земле используют в своей работе именно Outlook, то нужно было исправить эту проблему.
Долго, очень долго я шерстил Интернет, в поисках решения этой проблемы. Толком ничего не найдя, я решил настроить переадресацию писем с gmail на почту epicblog. Идея была в том, чтобы письма с формы обратной связи приходили сначала на gmail, а потом переадресовывались на почту Эпик блога. Переадресацию я настроил, но вот не задача… Это не помогло, всё равно кракозябры…
Затем я решил принудительно в коде PHP указать кодировку. Опять же, во всём Интернете я не нашел реального примера. Нашел только команду конвертации текста из одной кодировки в другую. Команда такая: iconv("windows-1251", "utf-8", $_POST['message']); Однако, такая команда не работала, так как текст уже был в кодировке utf-8. Оставалось проверить последнюю теорию. Если Outlook сам определяет кодировку как KOI8-R - нужно дать ему эту кодировку. Таким образом, пишем: iconv("utf-8", "KOI8-R", $_POST['message']); По волшебству, русский текст стал корректно отображаться в письме в Аутлуке. Но из этого следовала другая проблема. Корректно текст отображался только в Outlook! Другие почтовые клиенты стали сходить с ума. Очевидно, этот способ не подходил для решения задачи. И снова поиски…
Далее я нашел следующий код, который якобы решал проблему кодировки писем: 'Content-type: text/plain; charset=utf-8'. Но после его вставки, форма переставала работать вообще. Но спустя еще несколько часов поиска, различных вариантов написания, методом проб и ошибок - я добился решения проблемы!
Скачать готовое рабочее решение формы отправки писем на почту с сайта по этой прямой ссылке. НЕ ЗАБУДЬТЕ поменять ящики на свои!
Дополнительно напишу весь код сюда, чтобы было визуально понятно!
Код в файле SEND.php
<?php
/*
Форма обратной связи может получать сообщения с любых почтовых ящиков.
Исправлена проблема кодировки при получении писем почтовым клиентом Outlook.
Вы скачали её с сайта Epic Blog https://epicblog.net Заходите на сайт снова!
ВНИМАНИЕ! Лучше всего в переменную myemail прописать почту домена, который использует сайт. А не mail.ru, gmail и тд.
*/
if(isset($_POST['submit'])){
/* Устанавливаем e-mail Кому и от Кого будут приходить письма */
$to = "info(собака)epicblog.net"; // Здесь нужно написать e-mail, куда будут приходить письма
$from = "no-reply(собака)epicblog.net"; // Здесь нужно написать e-mail, от кого будут приходить письма, например no-reply(собака)epicblog.net
/* Указываем переменные, в которые будет записываться информация с формы */
$first_name = $_POST['first_name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$subject = "Форма отправки сообщений с сайта Epic Blog";
/* Проверка правильного написания e-mail адреса */
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email))
{
show_error("<br /> Е-mail адрес не существует");
}
/* Переменная, которая будет отправлена на почту со значениями, вводимых в поля */
$mail_to_myemail = "Здравствуйте!
Было отправлено сообщение с сайта!
Имя отправителя: $first_name
E-mail: $email
Номер телефона: $phone
Текст сообщения: $message
Чтобы ответить на письмо, создайте новое сообщение, скопируйте электронный адрес и вставьте в поле Кому.";
$headers = "From: $from \r\n";
/* Отправка сообщения, с помощью функции mail() */
mail($to, $subject, $mail_to_myemail, $headers . 'Content-type: text/plain; charset=utf-8');
echo "Сообщение отправлено. Спасибо Вам " . $first_name . ", мы скоро свяжемся с Вами.";
echo "<br /><br /><a href='https://epicblog.net'>Вернуться на сайт.</a>";
}
?>
<!--Переадресация на главную страницу сайта, через 3 секунды-->
<script language="JavaScript">
function changeurl(){eval(self.location="https://epicblog.net");}
window.setTimeout("changeurl();",3000);
</script>
Код в файле form.html
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<form action="send.php" method="post">
Ваше имя <input type="text" name="first_name"><br>
Email: <input type="text" name="email" required placeholder="Обязательное поле"><br>
Номер телефона: <input type="text" name="phone"><br>
Сообщение:<br><textarea rows="5" name="message" cols="30"></textarea><br>
<input type="submit" name="submit" value="Отправить">
</form>
</html>
Форма рабочая на 100%! Проверена и перепроверена тысячу раз! Также проверенно, чтобы письма приходили на все почтовые ящики, а не только на почту домена. То есть, вы можете указать почту mail ru или gmail и письма будут отправляться туда. Хотя я всегда рекомендую использовать почту домена, на котором находится форма отправки писем с сайта.
Скачать готовое рабочее решение формы отправки писем на почту с сайта по этой прямой ссылке. НЕ ЗАБУДЬТЕ поменять ящики на свои!
Меняйте ящики на свои обязательно! Думаю, есть такие, кто не меняет адрес электронной почты на свой, куда будут отправляться сообщения. Затем отправляют пробное письмо, а оно не приходит и думают, что форма не рабочая. Так вот, мне часто приходят такие тестовые сообщения! Меняйте ящики!!!
Всем удачи и добра!
Макс Пуля
Приветствую! Присоединяйтесь к сообществу Epic Blog и выражайте свои мысли.
Последнее от Макс Пуля
- $100 длиной в 2,5 года: доход сайта AdSense за два с половиной года
- Поворот текста, текст по диагонали CSS
- Как сделать верхний слой неактивным (некликабельным) CSS pointer-events
- VideoRoll.net - отзыв и обзор партнёрской программы по видеорекламе
- Высота iframe в зависимости от содержимого
- Ajax подгрузка контента по клику в div jQuery
- Скрыть / Показать DIV блок при выборе select пункта
- Как прибавить или вычесть процент от числа на PHP/JavaScript
- Как отключить просмотр исходного кода, проверку элемента и правую кнопку на сайте
- Новые планы: разработка мобильной игры
20 комментарии
-
написал Эндрю
Привет!
Круто, всё работает.
Единственный момент — если не заполнить ни одного поля формы и кликнуть по кнопке «Отправить» (которая submit), попадаешь на страницу с текстом:
Fatal error: Call to undefined function show_error() in /home/virtwww/w_serdeles-ru_46921d0f/http/lp/partners.php on line 32
Можно ли как-то это победить? -
написал Роман
Это то что я долго искал! спасибо!!!
-
написал Сашка
Все, я уже понял. Это же не js, с чего бы ему в браузере работать сразу без хоста.
-
написал Сашка
То есть, если я просто запущу файл из архива, он сработает?
Не очень похоже. При отправке происходит просто переход на страницу send.php и в окне браузера отображается код с этой страницы. Все. Аллес. Что я делаю не так? -
написал Вера
Форма работает! Это отлично!)
Но при добавлении новых полей, письма не приходят, печаль…
Посоветуйте пожалуйста к ней стили -
написал сисадмин
Шикарный пост - кратко и по делу! Спасибо, добрый человек!
-
написал Вася
Вот это круто!!! Классная рабочая форма отправки Давно искал такую. спасибо!