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

Автор Макс Пуля

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

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

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

Код в файле 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 и выражайте свои мысли.

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

  • Макс Пуля написал Макс Пуля

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

  • Эндрю написал Эндрю

    Привет!

    Круто, всё работает.
    Единственный момент — если не заполнить ни одного поля формы и кликнуть по кнопке «Отправить» (которая 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 и в окне браузера отображается код с этой страницы. Все. Аллес. Что я делаю не так?

  • Макс Пуля написал Макс Пуля

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

  • Вера написал Вера

    Форма работает! Это отлично!)
    Но при добавлении новых полей, письма не приходят, печаль…
    Посоветуйте пожалуйста к ней стили

  • Макс Пуля написал Макс Пуля

    ВНИМАНИЕ! Не пытайтесь скопировать код! Не получится=) Скачивайте решение по ссылке, внедряйте в свой проект и пользуйтесь=)) На всякий случай, дублирую ссылку https://epicblog.net/download/form_v3.zip

  • сисадмин написал сисадмин

    Шикарный пост - кратко и по делу! Спасибо, добрый человек!

  • Вася написал Вася

    Вот это круто!!! Классная рабочая форма отправки Давно искал такую. спасибо!