1 (2019-03-01 18:01:54 отредактировано opiums)

Тема: Улучшенный плагин Simple Contact

Больше всего мне не нравится, когда мне на почту летит спам из моей формы на сайте, поэтому, получив гору спамных писем я взял за переработку плагина обратной связи у себя на сайте. Результат:
http://files.opiums.eu/me/GetSimple/2018-10-11_172920.jpg
Скачать плагин c яндекс диска
Скачать плагин
Скачать обновлённую версию плагина

Особенности:

  • Контрольный вопрос был заменён на логический, т.к. математические вопросы такого типа боты обходят

  • Добавлен в форму htmlspecialchars();, для предотвращения XSS атак

  • Добавлена кодировка header('Content-Type: text/html; charset=utf-8');

  • Ваш емайл прописывается вначале файла simple-contact.php в 15 строке

  • Для установки распаковать содержимое архива в папку /plugins/ и включить его в плагинах

Сайт opiums

Поделиться

2

Re: Улучшенный плагин Simple Contact

Доброго времени суток! Не могу разобраться в причине, но письма с использованием этого варианта плагина (у оригинала та же беда) приходят кракозяблами. Какие-то нелады с кодировкой. На локальном сервере Заголовок письма выглядит как " тема РїСЂРѕР±Р° 18" - "тема 18" и имя прописывается: ??мя: тема 18. А на рабочем хостинге вообще всё письмо приходит кривое:
> ИмÑ: Павел
> E-mail: 113.162@mail.ru
> Тема: Пробное пиÑьмо
> Сообщение: Заменил мыло на Ñерверное,
> может, дойдет
> IP: 31.13.145.23
> Сайт: forum-99.ru
Перерыл в сети по теме много, но с php даже не на "Вы", и как прикрутить найденные варианты выхода из ситуации -ума не хватает. Прошу помощи у знающих.

Поделиться

3

Re: Улучшенный плагин Simple Contact

в 12 строке есть запись: header('Content-Type: text/html; charset=utf-8');
попробуйте её закомментировать и посмотрите как будет приходить, ну а вообще нужно узнать что не так с кодировкой

Сайт opiums

Поделиться

4

Re: Улучшенный плагин Simple Contact

1. Строку 12 комментил, без толку. В оригинальном варианте этой строки вообще нет. Результат с оригинальным одинаков абсолютно.
Кодировка сайта UTF-8, все странички и файл плагина тоже в UTF-8 без BOM. При тестировании на OpenServer`e заголовок выглядит как " тема РїСЂРѕР±Р° 18" - а должен как "тема 18".
Это на локалке получилось поправить, добавив перед строкой

mail ($sc_to, $sc_subject, $message, $from);

код

            $sc_subject = '=?utf-8?b?'. base64_encode($sc_subject) .'?='; 
            $sc_name = '=?utf-8?b?'. base64_encode($sc_name) .'?=';
            $sc_message = '=?utf-8?b?'. base64_encode($sc_message) .'?=';
            $headers = "Content-type: text/plain; charset=\"utf-8\"\r\n"; 
            $headers .= "MIME-Version: 1.0\r\n";

и добавив переменную $headers в скобки строки mail ($sc_to, $sc_subject, $message, $from);
Основная беда в том, что через рабочий хостинг приходит письмо, а в теле полная попа:
> ИмÑ: Павел
> E-mail: 113.162@mail.ru
> Тема: Пробное пиÑьмо
> Сообщение: Заменил мыло на Ñерверное,
> может, дойдет
> IP: 31.13.145.23
> Сайт: forum-99.ru
Хотя на этом же сайте есть форма заявки в плагине корзины и на ту же почту письма приходят абсолютно читаемые. Так что вроде и на хостера грешить, что у него там криво что-то с кодировкой, не выходит. До этого стояла фос плагин GetSimple Contact - тоже с кодировкой не было проблем...

Поделиться

5

Re: Улучшенный плагин Simple Contact

Сейчас буду пробовать через рабочий хостинг отправлять уже с изменениями. Вот ещё смущает на локальном сервере в теле письма строка с именем: ??мя: проба 1, вот эти два вопросительных знака вместо буквы "И"

Поделиться

6 (2019-02-26 13:05:53 отредактировано opiums)

Re: Улучшенный плагин Simple Contact

Зачем его кодировать в base64? Ваша кодировка = CP1251.
Попробуйте так:

$message = iconv('cp1251','utf-8',$message);
mail($sc_to, $sc_subject, $message, $from);

Какая кодировка задана в php?

Сайт opiums

Поделиться

7

Re: Улучшенный плагин Simple Contact

opiums пишет:

Какая кодировка задана в php?

UTF-8 без BOM

Поделиться

8

Re: Улучшенный плагин Simple Contact

Terminus пишет:
opiums пишет:

Какая кодировка задана в php?

UTF-8 без BOM

На сервере? А какая версия самого php?

Сайт opiums

Поделиться

9

Re: Улучшенный плагин Simple Contact

Версия php на хостинге 5.3
https://yadi.sk/i/d3q9ugsL_gNL5g - скрин с исходным кодом
https://yadi.sk/i/ld1ccRpwTR4_Ew - скрин после внесённых изменения из сообщения 6
По первому письму декодер Лебедева показывает, что кодировка пришедшего письма - CP1251. А нужна для правильного отображения UTF-8
По кодировке для 5.6 - 7.1 установлена UTF-8. А вот для 5.3 - "no value" (можно глянуть на https://php53.from.sh/)

Поделиться

10

Re: Улучшенный плагин Simple Contact

Terminus пишет:

Версия php на хостинге 5.3
https://yadi.sk/i/d3q9ugsL_gNL5g - скрин с исходным кодом
https://yadi.sk/i/ld1ccRpwTR4_Ew - скрин после внесённых изменения из сообщения 6
По первому письму декодер Лебедева показывает, что кодировка пришедшего письма - CP1251. А нужна для правильного отображения UTF-8
По кодировке для 5.6 - 7.1 установлена UTF-8. А вот для 5.3 - "no value" (можно глянуть на https://php53.from.sh/)

Я тестировал плагин на сервере с php 5.6, в настройках кодировка была utf-8

Обычно такую проблему можно встретить если установлена кодировка ISO-8859-1 или что то подобное

Сайт opiums

Поделиться

11

Re: Улучшенный плагин Simple Contact

opiums пишет:

Я тестировал плагин на сервере с php 5.6, в настройках кодировка была utf-8

Есть возможность переключить на рабочем сервере на php 5.6? но сайт делался три года назад, я опасаюсь, что посыпятся какие-то другие плагины. Что посоветуете?

Поделиться

12

Re: Улучшенный плагин Simple Contact

Terminus пишет:
opiums пишет:

Я тестировал плагин на сервере с php 5.6, в настройках кодировка была utf-8

Есть возможность переключить на рабочем сервере на php 5.6? но сайт делался три года назад, я опасаюсь, что посыпятся какие-то другие плагины. Что посоветуете?

Я делал полный переход с php 5.36 на 5.6.* - вообще никак не повлияло на работу сайтов, которых у меня кстати больше 50. Проблемы будут после перехода на 7-ю версию, поэтому не стоит беспокоиться, 5.6 версия оказалась отличным решением для меня и моих сайтов.

Сайт opiums

Поделиться

13

Re: Улучшенный плагин Simple Contact

Сайты на GS? Или другие CMS тоже использовали? Я попробую переключится сейчас, других вариантов не вижу

Поделиться

14

Re: Улучшенный плагин Simple Contact

Terminus пишет:

Сайты на GS? Или другие CMS тоже использовали? Я попробую переключится сейчас, других вариантов не вижу

Использовал разные CMS, в т.ч. сайты написанные самостоятельно

Сайт opiums

Поделиться

15

Re: Улучшенный плагин Simple Contact

Спасибо за советы, камрад! Буду пробовать, о результатах отпишусь сюда.

Поделиться

16

Re: Улучшенный плагин Simple Contact

Сменил на сервере версию php  на 5.6. Ничего не изменилось. В изначальном варианте приходят кракозяблы, с изменением из сообщения 6 - тело пустое, один символ приходит в теле. Фиг его знает, что и делать. Кодировка сервера utf-8, для php - тоже, в .htaccess добавил php_value default_charset "utf-8" (только без кавычек, может, нужно было в кавычках?). Меня смущает, что декодер показывает кодировку приходящего письма как CP1251.

Поделиться

17

Re: Улучшенный плагин Simple Contact

а если попробовать просто отправить письмо, с помощью, например этого скрипта:

$to = "кому@мыло.ру"; 
$from = 'от_кого@мыло.ру';
$subject = "Проверка почты";
$message = 'Имя: Ваше_имя; Телефон: Ваш_телефон;';
$headers = "Content-type: text/html; charset=UTF-8 \r\n";
$headers .= "From: <".$from.">\r\n";
$result = mail($to, $subject, $message, $headers);

Сайт opiums

Поделиться

18

Re: Улучшенный плагин Simple Contact

Есть ещё 1 вариант, принудительно задать, но не знаю на сколько сработает, тем не менее:

mail($sc_to, $sc_subject, $message, $from, "Content-type:text/plain; charset = UTF-8\r\n");

Сайт opiums

Поделиться

19

Re: Улучшенный плагин Simple Contact

opiums пишет:

а если попробовать просто отправить письмо, с помощью, например этого скрипта:

$to = "кому@мыло.ру"; 
$from = 'от_кого@мыло.ру';
$subject = "Проверка почты";
$message = 'Имя: Ваше_имя; Телефон: Ваш_телефон;';
$headers = "Content-type: text/html; charset=UTF-8 \r\n";
$headers .= "From: <".$from.">\r\n";
$result = mail($to, $subject, $message, $headers);

Извините мою дремучесть, я не могу сообразить, каким образом физически это сделать. Куда этот скрипт вставить и как задействовать для отправки. Я готов следовать любым Вашим советам smile

Поделиться

20 (2019-03-01 14:04:25 отредактировано opiums)

Re: Улучшенный плагин Simple Contact

Terminus пишет:
opiums пишет:

а если попробовать просто отправить письмо, с помощью, например этого скрипта:

$to = "кому@мыло.ру"; 
$from = 'от_кого@мыло.ру';
$subject = "Проверка почты";
$message = 'Имя: Ваше_имя; Телефон: Ваш_телефон;';
$headers = "Content-type: text/html; charset=UTF-8 \r\n";
$headers .= "From: <".$from.">\r\n";
$result = mail($to, $subject, $message, $headers);

Извините мою дремучесть, я не могу сообразить, каким образом физически это сделать. Куда этот скрипт вставить и как задействовать для отправки. Я готов следовать любым Вашим советам smile

Например создаёте файл mail.php, и туда вносите код:

<?php
$to = "кому@мыло.ру"; 
$from = 'от_кого@мыло.ру';
$subject = "Проверка почты";
$message = 'Имя: Ваше_имя; Телефон: Ваш_телефон;';
$headers = "Content-type: text/html; charset=UTF-8 \r\n";
$headers .= "From: <".$from.">\r\n";
$result = mail($to, $subject, $message, $headers);
?>

Закидываете файл на сервер, потом пробуете его открыть по адресу (указать свой): http://ваш-сайт.ру/путь/до/файла/mail.php

Сайт opiums

Поделиться

21

Re: Улучшенный плагин Simple Contact

Сделаю, попробую, по результатам отпишусь. У меня ещё вопрос, как разработчику.
С ФОС (не только с Simple Contact) есть проблемы с отправкой если в переменной From (а в плагине, насколько я понял, это переменная $sc_to указано не мыло хостера (т.е не xxx@my-site.ru) а, к примеру мейловское или яндексовское, т.е. текущее мыло, которым пользуется заказчик. Письма просто не принимаются почтовыми серверами того же мейла или яндекса, не в спан уходят, а вообще не доходят. Саппорт хостера объясняет, что, мол, были изменения в системе безопасности и почтовик сравнивает мыло в поле From и адрес реального почтового сервера отправителя, а это адрес хостера, а не яндекса или мейла. Естественно, они не совпадают и письмо отбивается. Как-то так, если я их правильно понял. Т.е. заказчику приходится заводить ящик на хостинге, чтобы получать письма из ФОС. Это не всем нравится, понятно.
Касаемо Simple Contact, вписываю $sc_to = '113.162@mail.ru'; - письма не доходят в ящик, пишу $sc_to = 'feedback@forum-99.ru';(ящик на почте хостера, соответственно, почтовый сервер отправки его же)  - приходят. Что с этим сделать - не могу дать ума... Текст ответа хостера могу приести при необходимости.

Поделиться

22 (2019-03-01 16:34:21 отредактировано opiums)

Re: Улучшенный плагин Simple Contact

Terminus пишет:

Сделаю, попробую, по результатам отпишусь. У меня ещё вопрос, как разработчику.
С ФОС (не только с Simple Contact) есть проблемы с отправкой если в переменной From (а в плагине, насколько я понял, это переменная $sc_to указано не мыло хостера (т.е не xxx@my-site.ru) а, к примеру мейловское или яндексовское, т.е. текущее мыло, которым пользуется заказчик. Письма просто не принимаются почтовыми серверами того же мейла или яндекса, не в спан уходят, а вообще не доходят. Саппорт хостера объясняет, что, мол, были изменения в системе безопасности и почтовик сравнивает мыло в поле From и адрес реального почтового сервера отправителя, а это адрес хостера, а не яндекса или мейла. Естественно, они не совпадают и письмо отбивается. Как-то так, если я их правильно понял. Т.е. заказчику приходится заводить ящик на хостинге, чтобы получать письма из ФОС. Это не всем нравится, понятно.
Касаемо Simple Contact, вписываю $sc_to = '113.162@mail.ru'; - письма не доходят в ящик, пишу $sc_to = 'feedback@forum-99.ru';(ящик на почте хостера, соответственно, почтовый сервер отправки его же)  - приходят. Что с этим сделать - не могу дать ума... Текст ответа хостера могу приести при необходимости.

Ну всё правильно, в $sc_to необходимо указывать адрес с которого отправляется письмо, следовательно адрес хостера, потому что если вы укажете адрес яндекса, гугла или ещё какого то почтовика, принимающий сервер подсчитает это за подмену ящика и отопнёт письмо (для валидации служат различные записи, такие как DKIM). Поэтому необходимо указывать ящик, которой выдаёт вам хостер, я тоже отправляю письма не со своего майловского, а с серверного на свой майловский, да так вроде и понятно что письмо пришло именно от моего сервера. Это всё сделано с целью обезопасить получателя, иначе бы всем, например, приходили письма от президента, и добрая половина считала бы это правдой.

Сайт opiums

Поделиться

23

Re: Улучшенный плагин Simple Contact

opiums пишет:

Ну всё правильно, в $sc_to необходимо указывать адрес с которого отправляется письмо, следовательно адрес хостера, потому что если вы укажете адрес яндекса, гугла или ещё какого то почтовика, принимающий сервер подсчитает это за подмену ящика и отопнёт письмо (для валидации служат различные записи, такие как DKIM). Поэтому необходимо указывать ящик, которой выдаёт вам хостер,

Т.е. прислать информацию из ФОС на имеющийся у заказчика ящик мейла или яндекса, без наличия у него ящика хостера с именем сайта и пересылки с этого ящика на бесплатный ящик заказчика, сейчас в принципе невозможно? Я имею ввиду возможность реализации следующей цепочки: посетитель заполняет форму, отправляет, и тело письма, с котором инфа с реквизитами посетителя и текстом сообщения, приходит напрямую на ящик заказчика на публичном почтовом сервисе.

ЗЫ. Уважаемый opiums! Приношу Вам свои глубочайшие извинения за потраченное Вами время для помощи мне в вопросе кривой кодировки. Ну вот хреново быть по пояс деревянным... Решение вопроса элементарное, но только в голову пришло, в чём корень проблемы может быть. Проосто зашел в настройки этого хостерского ящика и посмотрел кодировку по умолчанию. ISO... Выставил по умолчанию кодировку, в которой принимаются письма, как UTF-8 и всё. Всё, блин... sad Ещё раз приношу свои искренние извинения, ну вот чего было мне сразу не посмотреть... sad(

Поделиться

24 (2019-03-01 17:49:28 отредактировано opiums)

Re: Улучшенный плагин Simple Contact

Terminus пишет:
opiums пишет:

Ну всё правильно, в $sc_to необходимо указывать адрес с которого отправляется письмо, следовательно адрес хостера, потому что если вы укажете адрес яндекса, гугла или ещё какого то почтовика, принимающий сервер подсчитает это за подмену ящика и отопнёт письмо (для валидации служат различные записи, такие как DKIM). Поэтому необходимо указывать ящик, которой выдаёт вам хостер,

Т.е. прислать информацию из ФОС на имеющийся у заказчика ящик мейла или яндекса, без наличия у него ящика хостера с именем сайта и пересылки с этого ящика на бесплатный ящик заказчика, сейчас в принципе невозможно? Я имею ввиду возможность реализации следующей цепочки: посетитель заполняет форму, отправляет, и тело письма, с котором инфа с реквизитами посетителя и текстом сообщения, приходит напрямую на ящик заказчика на публичном почтовом сервисе.

ЗЫ. Уважаемый opiums! Приношу Вам свои глубочайшие извинения за потраченное Вами время для помощи мне в вопросе кривой кодировки. Ну вот хреново быть по пояс деревянным... Решение вопроса элементарное, но только в голову пришло, в чём корень проблемы может быть. Проосто зашел в настройки этого хостерского ящика и посмотрел кодировку по умолчанию. ISO... Выставил по умолчанию кодировку, в которой принимаются письма, как UTF-8 и всё. Всё, блин... sad Ещё раз приношу свои искренние извинения, ну вот чего было мне сразу не посмотреть... sad(

Это не страшно, самое главное, что решение нашлось!

К теме почты. Я там кажется малость запутался сам, разъясняю:

  • В $sc_to пишется ваш ящик на публичном сервере (@yandex.ru, @mail.ru, @gmail.com, и т. д.)
    Далее, в $sc_email указывается ящик из формы, он же попадает в поле письма From и дублируется в самом письме

Значит чтобы исключить подмену адреса нам нужно сделать следующее:

$from = "From: Написать тут ящик хостера";

Или 2й вариант:

$sc_email_host = "Написать тут ящик хостера";
$from = "From: " .$sc_email_host;

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

Да... И дополняю, если вы вдруг захотите указать ящик хостера в переменной (2й вариант), а переменную разместить рядом с вашим ящиком (в начале файла), то вам необходимо обязательно объявить эту переменную в функции: global $sc_email_host; иначе письма будут приходить от пустого адреса.

Сайт opiums

Поделиться

25 (2019-03-01 18:02:52 отредактировано opiums)

Re: Улучшенный плагин Simple Contact

Сообщение в шапке обновил, добавил:
Скачать обновлённую версию плагина

Сайт opiums

Поделиться