Понедельник, 30 Июль 2018 12:02

Новая форма отправки данных на почту с сайта с решенной проблемой кодировки писем в Outlook / HTML и PHP

Автор

Оцените материал
(1388 голосов)
Новая форма отправки данных на почту с сайта с решенной проблемой кодировки писем в Outlook / HTML и PHP Новая форма отправки данных на почту с сайта с решенной проблемой кодировки писем в Outlook / HTML и PHP

Сегодня поистине великий день! Потому что я опубликовываю полностью рабочую форму отправки данных на почту с сайта, где решена проблема с кодировкой писем, при получении их почтовым клиентом Outlook. Пользуйтесь на здоровье!

Предыдущая форма обратной связи, опубликованная на сайте Epic Blog была почти совершенна! Она рабочая и выполняет все свои функции. Но была, пожалуй, одна проблема... Когда письма приходили в почтовый клиент Outlook от Microsoft, вид у них был не читабельный, вот такой:

Проблема с кодировкой писем в Outlook, отправленных с сайта из формы отправки, Outlook определяет кодировку как KOI8-R вместо UTF-8

Дело в том, что 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'. Но после его вставки, форма переставала работать вообще. Но спустя еще несколько часов поиска, различных вариантов написания, методом проб и ошибок - я добился решения проблемы!

Скачать готовое рабочее решение формы отправки писем на почту с сайта по этой прямой ссылке. НЕ ЗАБУДЬТЕ поменять ящики на свои!

Дополнительно напишу весь код сюда, чтобы было визуально понятно!

Код в файле mail.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" type="text/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 и письма будут отправляться туда. Хотя я всегда рекомендую использовать почту домена, на котором находится форма отправки писем с сайта.

Скачать готовое рабочее решение формы отправки писем на почту с сайта по этой прямой ссылке. НЕ ЗАБУДЬТЕ поменять ящики на свои!

Меняйте ящики на свои обязательно! Думаю, есть такие, кто не меняет адрес электронной почты на свой, куда будут отправляться сообщения. Затем отправляют пробное письмо, а оно не приходит и думают, что форма не рабочая. Так вот, мне часто приходят такие тестовые сообщения! Меняйте ящики!!!

Всем удачи и добра!

Прочитано 3367 раз

Поделитесь с друзьями этой статьей!

Макс Пуля

Приветствую! Присоединяйтесь к сообществу Epic Blog и выражайте свои мысли.

epicblog.net

14 комментарии

  • Комментировать Максим Вторник, 27 Ноябрь 2018 19:13 написал Максим

    Привет! А можно к ней приклеить отправку файла?

    Пожаловаться
  • Комментировать Макс Пуля Пятница, 09 Ноябрь 2018 09:00 написал Макс Пуля

    Здравствуйте, Василий. Да, вы правы! Улучшениям нет предела)) В этом вся суть: берешь этот РАБОЧИЙ код и улучшаешь его, как нужно именно вам!

    Пожаловаться
  • Комментировать Василий Воскресенье, 04 Ноябрь 2018 06:32 написал Василий

    Здравствуйте. Прошу обратить внимание на строку 7 кода HTML. Email: майла на сайте даже не "майлообразного" текста, сообщение отправляется с этим текстом вместо email. Но если (input type="email"...), то браузер заставляет писать email. Хотя человек сможет ввести ложный адрес, но это уже о другая тема. Спасибо.

    Пожаловаться
  • Комментировать Халит Понедельник, 22 Октябрь 2018 13:46 написал Халит

    Всем привет! Форма работает, но на почту ничего не приходит. Емеил ввёл свой.

    Пожаловаться
  • Комментировать Макс Пуля Вторник, 09 Октябрь 2018 11:24 написал Макс Пуля

    Похоже, что такая проблема только в вашем случае! Проверьте на другом хостинге, например. И свяжитесь с хостерами. В поле email в форме есть required placeholder="Обязательное поле" - что не допускает отправку пустой формы!

    Пожаловаться
  • Комментировать Эндрю Суббота, 06 Октябрь 2018 15:42 написал Эндрю

    Привет!

    Круто, всё работает.
    Единственный момент — если не заполнить ни одного поля формы и кликнуть по кнопке «Отправить» (которая submit), попадаешь на страницу с текстом:

    Fatal error: Call to undefined function show_error() in /home/virtwww/w_serdeles-ru_46921d0f/http/lp/partners.php on line 32

    Можно ли как-то это победить?

    Пожаловаться
  • Комментировать Роман Вторник, 18 Сентябрь 2018 16:15 написал Роман

    Это то что я долго искал! спасибо!!!

    Пожаловаться
  • Комментировать Сашка Четверг, 30 Август 2018 14:12 написал Сашка

    Все, я уже понял. Это же не js, с чего бы ему в браузере работать сразу без хоста.

    Пожаловаться
  • Комментировать Сашка Четверг, 30 Август 2018 13:37 написал Сашка

    То есть, если я просто запущу файл из архива, он сработает?
    Не очень похоже. При отправке происходит просто переход на страницу send.php и в окне браузера отображается код с этой страницы. Все. Аллес. Что я делаю не так?

    Пожаловаться
  • Комментировать Макс Пуля Четверг, 16 Август 2018 09:25 написал Макс Пуля

    Думаю, что вы не все правильно прописываете, когда добавляете новые поля. Количество полей не ограничено!
    Что касается стилей, тут все индивидуально! Нужно подстраивать под свой проект. Например, если вы используете шаблонный дизайн или готовый проект, то скорее всего, в файле стилей (css) уже прописаны стили для form. Пишите в комментариях, если нужно добавить стили к форме. Тогда сделаю форму v4=)

    Пожаловаться

Оставить комментарий