Subject windows 1251 b

Subject windows 1251 b

Здесь могла бы быть ваша реклама

Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel

Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.

Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо

После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..

Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.

Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.

На последок как оно происходит на форумах

Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.

Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12

PHP письма приходят в кракозябрах. Заголовок письма php mail() в кракозябрах

Очень частая и неудобная ситуация, когда мы отправляем письмо за счет PHP mail, а оно приходит в кракозябрах. Может портиться как все письмо, так и его часть, например, тело или только заголовок. Все эти проблемы из-за неправильно выбранной кодировки.

Общие решения проблемы с кодировкой.
1а. Если письма отправляются в кодировке UTF-8, то переводим кодировку сайта в UTF-8. Если не помогает, то прописываем в самом начале страницы: без лишних пробелов.

Читайте также:  Как создать клон системы windows 10

1б. Если письма отправляются в кодировке windows-1251, то переводим кодировку сайта в windows-1251 (ANSI). Также можно прописать в начале сайта

2. При отправке писем, можно попробавть использовать преобразователи кодировок на те переменные, которые передаются в письме: $text = iconv(‘utf-8’, ‘windows-1251’, $text); или $text = iconv(‘windows-1251′’, ‘utf-8’, $text);

3. Бывает, что приходит в письме только заголовок в кракозябрах , для этого изменяем его кодировку отдельно. Пример:
$to = ‘admin@mail.ru’;
$subject = ‘=?utf-8?B?’.base64_encode(‘Новое сообщение!’).’?=’;
$headers = ‘From: =?UTF-8?B?’ . base64_encode($name) . ‘?= \r\n»;
$headers .= ‘Return-path: \r\n»;
$headers .= ‘Content-type: text/plain; charset=utf-8’ . «\r\n»;
$headers .= ‘Content-Transfer-Encoding: quoted-printable’ . «\r\n\r\n»;
$message = «Новый запрос!\n\nИмя: $name\n\nEmail: $email\n\nТелефон: $tel\n\n»;
$mail = mail($to, $subject, $message, $headers);

ps Если Кодировка сайта UTF-8, а в заголовке письма и от кого приходят кракозябры, то меняем $subject = ‘Новое сообщение!; на $subject = ‘=?utf-8?B?’.base64_encode(‘Новое сообщение!’).’?=’;

Не забывайте, что на главной странице, внизу всегда актуальный список программ-сервисов.

Кракозябрица в имени отправителя письма на почте Yandex

Введение

Доброго времени суток, уважаемые!

Хочу кратенько поведать о проблеме отображения имени отправителя письма при отправке на ящики Яндекс.Почты и привести ее решение.

Заранее прошу маститых программистов меня простить. Возможно, для вас эта ситуация не стоит выеденного яйца.
Но мне пришлось посидеть над ее решением. Надеюсь, это может оказаться полезным кому-нибудь.

С чего все начиналось

Итак, есть самописный сайт на php + angular. Обычный лендинг с калькулятором.
Пришла очередь задаче по отправке писем клиентам и менеджерам о поступивших заказах.

Казалось бы, чего уж проще? Берешь и пишешь:

При этом сохраняем файл в кодировке UTF-8 без BOM и выполняем.
Смотрим почтовый ящик gmail — все в порядке! Имя отправителя отображается вполне себе корректно:

Смотрим Яндекс — опять красота.

Уже открываю шампанское… Вот она, победа. Но не тут-то было.
Открываю письмо и вижу:

Убираю шампанское, достаю бубны. Начинаю шерстить интернет в поисках решения, пишу в поддержку Яндекса.
Мне приходит ответ: «Попробуйте кодировать в base64». Что кодировать — я так и не понял. Пробовал кодировать кириллические символы и заголовок целиком.

Но приходит мысль: зачем изобретать велосипед? Надо посмотреть, как делают старшие товарищи по цеху. Открываю первое письмо и смотрю его свойства. Что же я там вижу?

Логика подсказывает, что заветное решение находится внутри символов «=?… ?=» (да простится мне серость моя сообществом мудрейших!).
Смотрю дальше и вижу кодировку windows-1251. Так, еще один шаг к успеху! Подвигаю шампанское ближе.

Затем идет еще символ «B» и знак вопроса. Отбрасываю их, беру оставшийся код и смотрю, что же это такое?

Так, у меня файл с кодировкой utf-8. Сохраняю его как windows-1251 и запускаю снова.

Решение вопроса

Для файлов в кодировке utf-8 я использовал такое решение:

Обратите внимание — тема письма также закодирована:

В результате я получил корректное отображение отправителя письма:

Прошу не судить строго за мой первый литературно-технический очерк. Буду благодарен профессиональным отзывам и дополнением материала.

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

  • 17 января 2021 в 21:55 Как найти email пользователя GitHub и написать Telegram бота для решения этой задачи?
  • 15 февраля 2021 в 01:06 Еще одна реализация DI на PHP
  • 6 апреля 2021 в 15:40 Собеседование на PHP разработчика. Более 100 вопросов для Junior, Middle и Senior
  • 10 апреля 2021 в 00:24 Простое решение для раздачи файлового архива через временные WEB-ссылки
  • 15 апреля 2021 в 13:08 Как я 30 дней авто обновление валюты чинил Opencart 3.0
Читайте также:  Хранятся настройки сети windows

Это «Песочница» — раздел, в который попадают дебютные посты пользователей, желающих стать полноправными участниками сообщества.

Если у вас есть приглашение, отправьте его автору понравившейся публикации — тогда её смогут прочитать и обсудить все остальные пользователи Хабра.

Чтобы исключить предвзятость при оценке, все публикации анонимны, псевдонимы показываются случайным образом.

Не надо пропускать:

  • рекламные и PR-публикации
  • вопросы и просьбы (для них есть Хабр Q&A);
  • вакансии (используйте Хабр Карьеру)
  • статьи, ранее опубликованные на других сайтах;
  • статьи без правильно расставленных знаков препинания, со смайликами, с обилием восклицательных знаков, неоправданным выделением слов и предложений и другим неуместным форматированием текста;
  • жалобы на компании и предоставляемые услуги;
  • низкокачественные переводы;
  • куски программного кода без пояснений;
  • односложные статьи;
  • статьи, слабо относящиеся к или не относящиеся к ней вовсе.

Отправка почты из PHP: как написать правильно

В данной статье рассмотрена отправка почты из PHP с детальным описанием функции mail(), использования русских символов и защиты от спама.

Отправка почты из скриптов на PHP — функция, которая очень часто встречается в веб-приложениях. К сожалению, как показывает практика, большинство разработчиков используют ее неправильно, допуская в своих скриптах одни и те же ошибки. В результате оказывается, что письмо получателю пришло в неверной кодировке, просто не дошло или вообще неумело написанная форма отправки сообщения была использована для рассылки спама.

Формат почтового сообщения

Для того чтобы быть уверенным, что ваше сообщение отправляется действительно верно, необходимо иметь по меньшей мере базовые представления о формате почтового сообщения. Формат почтового сообщения описан в нескольких стандартизирующих документах, основными из которых являются RFC 822 (описывает формат передачи простого текста на английском языке) и RFC 2045 (описывает расширения этого формата для передачи произвольных данных).

Ниже приведен самый простой пример текстового сообщения, составленного в соответствии с приведенными выше стандартами и готового к отправке:

Именно в таком формате клиент для отправки почты (MS Outlook, TheBat! или Mozilla Thunderbird) подготавливает сообщение, а затем отправляет его получателю (кстати, большинство почтовых клиентов позволяют просмотреть исходный код сообщения, в Mozilla Thunderbird, например, для этого служит комбинация клавиш Ctrl+U ). Задача нашего скрипта на языке PHP — добиться точно такого же формата письма.

Как видно из приведенного выше примера, электронное письмо содержит две части: в одной (верхней) размещаются заголовки, а в другой (нижней), собственно, текст письма. Отделены эти части друг от друга пустой строкой. Заголовки состоят из строк, в которых содержится тема письма (Subject), имя и адрес отправителя (From), получателя (To) и другая информация. В самом простом случае каждая строка содержит пару «ИмяЗаголовка: ЗначениеЗаголовка». Особенно необходимо подчеркнуть, что, согласно стандартам, в заголовках ни при каких обстоятельствах не должны содержаться русские символы.

Грамотное использование русских символов в заголовках почтового сообщения

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

Кодировка может быть любой из списка «windows-1251», «koi8-r», «utf-8» и т.д. Во всех случаях, как правило, кодировка сообщения будет совпадать с кодировкой, в которой работает сайт. То есть в большинстве случаев это будет «windows-1251», реже — «utf-8».

Способ кодирования указывает на то, каким именно образом русские символы будут преобразованы в безопасный набор. Способа определяется два: так называемый «Q-encoding» (обозначается одной буквой «Q») и «Base64» (обозначается одной буквой «B»).

К сожалению, штатной функции, которая могла бы обычную строку преобразовать в Q-encoded текст, в PHP нет, зато есть функция, которая умеет выполнять аналогичное преобразование в Base64. Итак, PHP код правильного создания заголовка темы почтового сообщения может выглядеть следующим образом:

Читайте также:  Чем отличие windows 10 home от windows 10 pro

Здесь предполагается, что в переменной $_POST[«subject»] у Вас содержится тема почтового сообщения, записанная по-русски в кодировке windows-1251.

Адрес отправителя или получателя может быть записан в виде «user@example.com» или в виде «Имя пользователя user@example.com». Во втором случае имя пользователя необходимо преобразовать так же, как в предыдущем примере. Ниже приведен пример, в котором предполагается, что в переменной $_POST[«username»] содержится имя пользователя, а в переменной $_POST[«email»] — его электронный адрес:

Функция mail()

Отправка почтовых сообщений в большинстве скриптов выполняется системной функцией mail() . Описание синтаксиса функции mail всегда можно найти в оригинальном руководстве. Эта функция принимает всего 5 параметров, из которых три являются обязательными, а остальные два — опциональными:

  • to — Электронный адрес получателя сообщения
  • subject — Тема сообщения
  • message — Тело сообщения
  • additional_headers — дополнительные заголовки
  • additional_parameters — дополнительные параметры

На самом деле функция mail() просто формирует строку следующего вида:

а затем передает ее на обработку стандартной UNIX’овой команде отправки почты, которая носит имя /usr/sbin/sendmail . Сравнивая то, что выдает mail() , с тем, что должно получиться (см. пример выше), можно составить точный план подготовки переменных для передачи в функцию:

  1. Закодировать поле Subject с использованием base64, как в примере выше.
  2. Закодировать поле To.
  3. В случае необходимости создать $additional_headers , самостоятельно сформировав все необходимые заголовки (например, добавив поле «From:») и разделив эти заголовки парой символов «\r\n».

После этого сформированный набор параметров можно передавать на вход функции mail().

Работа над ошибками с помощью additional_parameters

Как уже упоминалось выше, функция mail() для отправки почты просто вызывает стандартную команду sendmail , при необходимости передавая ей дополнительные параметры. В каком случае может возникнуть необходимость их использования? Самый часто встречающийся случай — проблема с адресом отправителя. Этот адрес нередко изменяется функцией sendmail на адрес вида «имя_пользователя_на_сервере_хостинга@адрес_сервера_хостинга.ru». Чтобы избежать такого поведения, необходимо передать команде параметр » -femail@отправителя.ru » (обратите внимание на формат строки: «минус-эф», а затем без пробелов электронный адрес).

Защита от спама

Спамеры очень часто для рассылки используют плохо написанные формы отправки почты на PHP. Дело в том, что стандарт допускает использование нескольких получателей, которые могут быть перечислены через запятую в заголовке «To», а также использование произвольного количества специальных заголовков с именем «Сс» (копия) и «Bcc» (скрытая копия). Предположим, что в Вашей форме есть поле темы, которое без изменений транслируется в заголовок «Subject». Для того чтобы отправить произвольное сообщение на тысячу адресов, спамеру достаточно в поле Subject вписать примерно такой текст:

Таким образом отправляемое письмо будет дополнено заголовками «Cc» и почтовая программа, обнаружив все эти заголовки в тексте письма, примется рассылать его всем получателям из списка. Аналогичная ситуация и с переменными $additional_headers и $to — любое из них при удачном стечении обстоятельств может быть использовано злоумышленниками в своих интересах.

Борьба с этим явлением может вестись двумя способами:

Проверка всего пользовательского ввода и фильтрация опасных символов (т.е символов «\r» и «\n»). Эти символы нужно либо заменять на пробелы, либо отказываться обрабатывать некорректно введенные параметры. Например, замену можно выполнить так:

Выполнение кодирования Base64, помимо прочего, защищает и от спамеров, т.к. «вытягивает» закодированный текст в одну строку.

Как все это сделать проще

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

Оцените статью