6 / 6 / 1
Регистрация: 28.01.2016
Сообщений: 40
|
||||||
1 | ||||||
Сломалась отправка писем через mail() после переезда на новых хостинг18.04.2017, 18:56. Показов 3220. Ответов 16
Коллеги, привет!
Не моуг разобраться с отправкой писем через функцию mail(). Есть старенький небольшой сайтик в кодировке Windows-1251. Работал простенький скрипт по отправке уведомлений с формы обратной связи. Потом сайт переехал на другой хостинг и письма стали приходить с кракозябликами. У меня доступа к хостингу нет, есть только к файлам черех фтп. Менять кодировку сайта на Utf-8 не предлагать, потому что надо вернуть работоспособность как есть. Может на хостинге другие настройки, которые флияют на mail()? Файл скрипта, который отправляет письма в кодировке Windows-1251. Уже пробовал пересохранить файл в UTF-8 и, соответственно, менять кодировку в заголовке на Utf-8. Всё равно приходят на почту иероглифы. В чём может быть проблема? Письма отправляются примерно так:
0
|
18.04.2017, 18:56 | |
Ответы с готовыми решениями:
16
Отправка писем через функцию mail(); Отправка писем через функцию mail(); Отправка писем через функцию mail(); и решения с ЧС Отправка через SMTP писем с mail.ru на yandex.ru |
6 / 6 / 1
Регистрация: 28.01.2016
Сообщений: 40
|
||||||
19.04.2017, 15:20 [ТС] | 3 | |||||
miketomlin, Спасибо за статью. Прочитал по ссылке, сделал как там - не работает. Приходят иероглифы.
Посмотрел на php.net функцию, скопипастил её, сохранил файл в кодировке Utf-8, запустил на хостинге. Письмо приходит, в спам НЕ попадает. Поле "от кого" заполняется правильно. Тема и текст письма в иероглифах. Не пойму в чём причина. Ниже фрагмент кода.
Добавлено через 2 часа 11 минут miketomlin, включил mail.log на хостинге. Вот что выводит при отработке функции, которая в предыдущем моём сообщении. Кликните здесь для просмотра всего текста
mail() on [/home/directory/test.php:12]: To: admin@yandex.ru -- Headers: From: =?UTF-8?B?Mt8ddsywfk8=?= <no-reply@site.ru> MIME-Version: 1.0 Content-type: text/html; charset=UTF-8 Content-Transfer-Encoding: BASE64
Есть способ посмотреть не только заголовки в логе, но и текст сообщения, который отправляется? Добавлено через 1 час 46 минут Но директива sendmail_path меняет только в php.ini или httpd.conf, а у меня нет доступа к ним =(
0
|
Заблокирован
|
|
19.04.2017, 15:27 | 4 |
0
|
6 / 6 / 1
Регистрация: 28.01.2016
Сообщений: 40
|
|
19.04.2017, 15:32 [ТС] | 5 |
miketomlin, никто не мешает. Столкнулся с трудностями, попытался разобраться — не получилось. Нужна помощь зала.
0
|
Заблокирован
|
|
19.04.2017, 15:38 | 6 |
Содержимое письма тоже нужно кодировать. В статье я показал, как.
Добавлено через 1 минуту Пока что я вижу, что вы везде суете UTF-8, внося лишний раздрай.
0
|
6 / 6 / 1
Регистрация: 28.01.2016
Сообщений: 40
|
|||||||||||
19.04.2017, 17:48 [ТС] | 7 | ||||||||||
miketomlin, переписал отправку как в вашей статьей. Всё равно тема письма и само сообщение приходит иероглифами. Не пойму, что не так.
miketomlin, Я так понял, на почту приходит письмо с закодированными темой и текстом сообщения. После обработки строк, которые пришли в сообщении функцией base64_decode() возвращается то, что мы отправляли — тема "Тест" и сообщение "Это тестовое сообщение".
0
|
Заблокирован
|
|
19.04.2017, 18:55 | 8 |
Может, почтовик (ПС/клиент) тупой. Попробуйте отправить на Mail.Ru, Yandex и т.п.
Добавлено через 3 минуты В Яндекс.Почте можно просмотреть служебные заголовки вместе с «телом письма». Если что-нибудь получите, выложите сюда дамп.
0
|
6 / 6 / 1
Регистрация: 28.01.2016
Сообщений: 40
|
||||||
20.04.2017, 10:44 [ТС] | 9 | |||||
miketomlin, Я отправлял и на яндекс и на mail.ru. В обоих случаях письма смторел через веб-интерфейс. Результат один и тот же.
Подсмотрел на одном сайте вариант отправки письма, когда сообщение передают не как параметр $message в функцию mail(), а через конкатенацию добавляют к заголовкам и передают в функцию mail() четвёртым парамтером $headers. Подправил функцию, и текст письма отобразился корректно. Но вот тема сообщения продолжает приходить на почту закодированная в base64. Ниже немного подправленный код:
0
|
6 / 6 / 1
Регистрация: 28.01.2016
Сообщений: 40
|
|
20.04.2017, 11:13 [ТС] | 11 |
miketomlin, ниже заголовки писем с яндекса
Когда $message передаю третьим параметром в mail() Кликните здесь для просмотра всего текста
Received: from mxfront9o.mail.yandex.net ([127.0.0.1])
by mxfront9o.mail.yandex.net with LMTP id hkKGem0r for <adress@yandex.ru>; Thu, 20 Apr 2017 10:35:12 +0300 Received: from s052d765a.fastvps-server.com (s052d765a.fastvps-server.com [2a03:f480:1:1e::31]) by mxfront9o.mail.yandex.net (nwsmtp/Yandex) with ESMTPS id ohisl16JCZ-ZCMa1lTW; Thu, 20 Apr 2017 10:35:12 +0300 (using TLSv1.1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)) (Client certificate not present) X-Yandex-Front: mxfront9o.mail.yandex.net X-Yandex-TimeMark: 1492673712 X-Yandex-Spam: 1 Received: from s052d765a.fastvps-server.com (localhost.localdomain [127.0.0.1]) by s052d765a.fastvps-server.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id v3K7ZBwU020765 for <adress@yandex.ru>; Thu, 20 Apr 2017 10:35:11 +0300 Received: (from www-data@localhost) by s052d765a.fastvps-server.com (8.14.4/8.14.4/Submit) id v3K7ZBFh020764; Thu, 20 Apr 2017 10:35:11 +0300 Date: Thu, 20 Apr 2017 10:35:11 +0300 Message-Id: <201704200735.v3K7ZBFh020764@s052d765a.fastvps-server.com> To: adress@yandex.ru Subject: =?Windows-1251?B?PT93aW5kb3dzLTEyNTE/Qj8wdVh4?= =?Windows-1251?B?OGc9PT89?= X-PHP-Originating-Script: 1004:testMail3.php From: "no-reply@site.ru" <no-reply@site.ru> MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Type: text/plain; charset=windows-1251 Return-Path: www-data@s052d765a.fastvps-server.com X-Yandex-Forward: e6bbadb0f561a65e712f9bf771e63e0a M2ZMdUlQTGw4Zkx1NHU3bElQSHU3dUg1NWUzbzVTRT0NCg== Ниже заголовки, когда, $message добавил к $headers и передал всё четврётрым параметром Кликните здесь для просмотра всего текста
Received: from mxfront3g.mail.yandex.net ([127.0.0.1]) by mxfront3g.mail.yandex.net with LMTP id k3nirQZg for <adress@yandex.ru>; Thu, 20 Apr 2017 11:00:04 +0300 Received: from s052d765a.fastvps-server.com (s052d765a.fastvps-server.com [2a03:f480:1:1e::31]) by mxfront3g.mail.yandex.net (nwsmtp/Yandex) with ESMTPS id ohFmJKh69V-03ueriiW; Thu, 20 Apr 2017 11:00:03 +0300 (using TLSv1.1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)) (Client certificate not present) X-Yandex-Front: mxfront3g.mail.yandex.net X-Yandex-TimeMark: 1492675203 X-Yandex-Spam: 1 Received: from s052d765a.fastvps-server.com (localhost.localdomain [127.0.0.1]) by s052d765a.fastvps-server.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id v3K8032J021635 for <adress@yandex.ru>; Thu, 20 Apr 2017 11:00:03 +0300 Received: (from www-data@localhost) by s052d765a.fastvps-server.com (8.14.4/8.14.4/Submit) id v3K803iZ021634; Thu, 20 Apr 2017 11:00:03 +0300 Date: Thu, 20 Apr 2017 11:00:03 +0300 Message-Id: <201704200800.v3K803iZ021634@s052d765a.fastvps-server.com> To: adress@yandex.ru Subject: =?Windows-1251?B?PT93aW5kb3dzLTEyNTE/Qj8wdVh4?= =?Windows-1251?B?OGc9PT89?= X-PHP-Originating-Script: 1004:testMail3.php From: "no-reply@site.ru" <no-reply@site.ru> MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Type: text/plain; charset=windows-1251 Return-Path: www-data@s052d765a.fastvps-server.com X-Yandex-Forward: e6bbadb0f561a65e712f9bf771e63e0a 3fLuIPLl8fLu4u7lIPHu7uH55e3o5SE= Добавлено через 2 минуты KOPOJI, Когда убираю в теме base64_encode, то письмо приходит с темой =windows-1251?B??????=
0
|
6 / 6 / 1
Регистрация: 28.01.2016
Сообщений: 40
|
||||||
20.04.2017, 11:19 [ТС] | 13 | |||||
По заголовкам писем, я так понял, что когда $message передаю третьим параметром, то почему-то строка дважды кодируется в base64. Когда добавляю строку сообщения к $headers и передаю всё четвёртым параметром в mail(), то текст сообщения кодируется только один раз в base64, как и положено.
Добавлено через 3 минуты KOPOJI, сделал так, приходят одни вопросы. Кодировка файла Windows-1251
Кликните здесь для просмотра всего текста
Received: from mxfront10j.mail.yandex.net ([127.0.0.1])
by mxfront10j.mail.yandex.net with LMTP id aiJZPLyi for <adress@yandex.ru>; Thu, 20 Apr 2017 11:18:23 +0300 Received: from s052d765a.fastvps-server.com (s052d765a.fastvps-server.com [2a03:f480:1:1e::31]) by mxfront10j.mail.yandex.net (nwsmtp/Yandex) with ESMTPS id h9Qf0OZk9Z-INgClqM1; Thu, 20 Apr 2017 11:18:23 +0300 (using TLSv1.1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)) (Client certificate not present) X-Yandex-Front: mxfront10j.mail.yandex.net X-Yandex-TimeMark: 1492676303 X-Yandex-Spam: 1 Received: from s052d765a.fastvps-server.com (localhost.localdomain [127.0.0.1]) by s052d765a.fastvps-server.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id v3K8IM6L022394 for <adress@yandex.ru>; Thu, 20 Apr 2017 11:18:22 +0300 Received: (from www-data@localhost) by s052d765a.fastvps-server.com (8.14.4/8.14.4/Submit) id v3K8IMYS022393; Thu, 20 Apr 2017 11:18:22 +0300 Date: Thu, 20 Apr 2017 11:18:22 +0300 Message-Id: <201704200818.v3K8IMYS022393@s052d765a.fastvps-server.com> To: adress@yandex.ru Subject: =?Windows-1251?B?Pz8/Pw==?= X-PHP-Originating-Script: 1004:testMail3.php From: "no-reply@site.ru" <no-reply@site.ru> MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Type: text/plain; charset=windows-1251 Return-Path: www-data@s052d765a.fastvps-server.com X-Yandex-Forward: e6bbadb0f561a65e712f9bf771e63e0a Pz8/ID8/Pz8/Pz8/ID8/Pz8/Pz8/PyENCg==
0
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|
20.04.2017, 11:23 | 14 |
И в заголовке, и в сообщении?
http://php.net/manual/ru/funct... encode.php пробовали использовать?
0
|
6 / 6 / 1
Регистрация: 28.01.2016
Сообщений: 40
|
||||||
20.04.2017, 12:09 [ТС] | 15 | |||||
KOPOJI, попробовал тему пропустить через эту функцию — то же самое, приходит на почту в теме текст вида Subject: =?windows-1251?B?0uXx8g==?=
0
|
Заблокирован
|
|
20.04.2017, 14:43 | 16 |
Subject кривой:
Код
Subject: =?Windows-1251?B?PT93aW5kb3dzLTEyNTE/Qj8wdVh4?= =?Windows-1251?B?OGc9PT89?= $message указывайте в третьем параметре ф-ции, как положено, т.к. почтовик может после ваших заголовков добавить свои, что приведет к кривизне (ваши заголовки, сообщение, доп заголовки), а кроме того, перед телом сообщения должна идти пустая строка – это на будущее, когда в действительности понадобится вручную объединять заголовки с телом сообщения. Добавлено через 20 минут Код из 7-го поста у меня работает (на мэйл и на яндекс приходит нормальное письмо), правда, я взял оттуда только данные и подставил в свою песочницу: subject Код
=?windows-1251?B?0uXx8g==?= Код
From: noreply@gte-to-tam.ru MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Type: text/html; charset=windows-1251 Код
3fLuIPLl8fLu4u7lIPHu7uH55e3o5SE=
1
|
6 / 6 / 1
Регистрация: 28.01.2016
Сообщений: 40
|
|||||||||||
26.04.2017, 12:33 [ТС] | 17 | ||||||||||
miketomlin, снова вернулся к решению этого вопроса. Проблема решилась. В самое начало скрипта, который генерирует страницу отправки писем добавил строчку и письмо отправилось без дополнительной правки скрипта:
Вызов функции mb_internal_encode() возвращал значение ISO-8859-1. Не пойму причину, из-за которой всё сломалось и письмо уходило в неправильно кодировке. Сами файлы скриптов сохранены в windows-1251. Получается, что перед отправкой письму текст кодировался в другую кодировку, но так как в заголовке я указывал charset=windows-1251, указанная кодировка не соответствовала фактической. Поэтому приходили знаки ???? вместо текста. phpinfo() показал, что кодировка ISO-8859-1 указана по умолчанию в следующих параметрах:
0
|
26.04.2017, 12:33 | |
26.04.2017, 12:33 | |
Помогаю со студенческими работами здесь
17
Ошибка в строке после переезда на новый хостинг После переезда на другой хостинг не определяется запрос AJAX После переезда на другой хостинг не работает форма обратной связи Отправка писем по E-Mail Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |