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

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

Автор

Оцените материал
(15 голосов)
Новая форма отправки данных на почту с сайта с решенной проблемой кодировки писем в 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, от кого будут приходить письма, например Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

 

/* Указываем переменные, в которые будет записываться информация с формы */
$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 и письма будут отправляться туда. Хотя я всегда рекомендую использовать почту домена, на котором находится форма отправки писем с сайта.

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

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

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

Прочитано 473 раз
Рекомендуемое:

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

Макс Пуля

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

epicblog.net
Другие материалы в этой категории: « Плавная прокрутка к якорю - Скрипт и jQuery

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

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

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

    Пожаловаться
  • Комментировать Вера Среда, 15 Август 2018 20:13 написал Вера

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

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

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

    Пожаловаться
  • Комментировать сисадмин Четверг, 02 Август 2018 15:57 написал сисадмин

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

    Пожаловаться
  • Комментировать Вася Среда, 01 Август 2018 09:37 написал Вася

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

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

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