php mail перенос строки в письме

Php mail перенос строки в письме

php mail перенос строки в письме. Смотреть фото php mail перенос строки в письме. Смотреть картинку php mail перенос строки в письме. Картинка про php mail перенос строки в письме. Фото php mail перенос строки в письме

Full MemberРедактировать | Профиль | Сообщение | Цитировать | Сообщить модератору интересует только перенос строки!

отправляется письмо, формируется текст в php:

но некоторые почтовые клиенты, не видят перенос строки
,

я сейчас попробовал добавить \n\r

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

я так понимаю, что некоторые клиенты почты удаляют HTML теги или нет?

php mail перенос строки в письме. Смотреть фото php mail перенос строки в письме. Смотреть картинку php mail перенос строки в письме. Картинка про php mail перенос строки в письме. Фото php mail перенос строки в письме

.:МордератоР:.Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору rtyug
сколько раз повторять?
Perl, PHP: отправка формы на e-mail

Цитата:

но некоторые почтовые клиенты, не видят перенос строк

все зависит от формата, в котором посылается письмо.. есть HTML, то
, если
обычный текст, то либо UNIX формат \n, либо Windows \r\n
любой почтовый клиент должен понимать оба

———-
Away/DND
Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:45 01-09-2010
rtyug

php mail перенос строки в письме. Смотреть фото php mail перенос строки в письме. Смотреть картинку php mail перенос строки в письме. Картинка про php mail перенос строки в письме. Фото php mail перенос строки в письме

так, тоже, должно работать, наверное??
я попробую.

Цитата:

сколько раз повторять?
Perl, PHP: отправка формы на e-mail [?]

меня интересую только перенос строк, а не отправка.

видимо, именно клиент не понимает html или их удаляет

Всего записей: 490 | Зарегистр. 13-05-2009 | Отправлено: 02:55 01-09-2010 | Исправлено: rtyug, 03:00 01-09-2010
rtyug

php mail перенос строки в письме. Смотреть фото php mail перенос строки в письме. Смотреть картинку php mail перенос строки в письме. Картинка про php mail перенос строки в письме. Фото php mail перенос строки в письме

Full Member

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору но на ukr.net

Источник

Php mail перенос строки в письме

(PHP 4, PHP 5, PHP 7, PHP 8)

mail — Отправляет электронную почту

Описание

Отправляет электронную почту.

Список параметров

Получатель, или получатели письма.

Тема отправляемого письма.

Тема должна соответствовать » RFC 2047.

Каждая строка должна быть отделена символом CRLF (\r\n). Строки не должны быть длиннее 70 символов.

(Только для Windows) Если PHP передаёт данные напрямую SMTP-серверу и в начале строки стоит точка, то она будет удалена. Чтобы избежать этого замените все такие точки на две.

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

Обычно используется для добавления дополнительных заголовков (From, Cc, and Bcc). Несколько дополнительных заголовков должны быть разделены CRLF (\r\n). Если для составления этого заголовка используются внешние данные, то они должны быть проверены для избежания инъекций нежелательных заголовков.

Если передан массив, то его ключи будут именами заголовка, а значения значениями.

До PHP 5.4.42 и 5.5.27, параметр additional_headers не имел защиты от инъекции. Так что пользователи должны удостовериться, что передаваемые заголовки безопасны и содержат только заголовки. т.е. не содержат несколько переводов строк подряд, что стартует тело сообщения.

Если сообщения не отправляются, попробуйте использовать только LF (\n). Некоторые агенты пересылки сообщений Unix (особенно » qmail) автоматически заменяют LF на CRLF (что приводит к двойному CR, если использовалось CRLF). Используйте эту меру в крайнем случае, так как это нарушает » RFC 2822.

Так как escapeshellcmd() применяется автоматически, то нельзя использовать некоторые символы, допустимые к использованию в email-адресах некоторыми RFC. mail() не допускает такие символы, поэтому в программах, в которых они требуются, рекомендуется использовать альтернативы для их отправки (например фреймворки или библиотеки).

Возвращаемые значения

Важно заметить, что то что письмо было принято для передачи вовсе НЕ означает что оно достигло получателя.

Список изменений

ВерсияОписание
7.2.0Параметр additional_headers может принимать значения типа массив.

Примеры

Пример #1 Отправка письма.

Использование функции mail() для отправки простого письма:

// Сообщение
$message = «Line 1\r\nLine 2\r\nLine 3» ;

Пример #2 Отправка письма с дополнительными заголовками.

Добавление простых заголовков, сообщающих почтовому агенту адреса From и Reply-To:

Пример #3 Отправка письма с дополнительными заголовками, переданными массивом

В этом примере посылается то же письмо, что и в примере выше, но дополнительные заголовки задаются массивом (доступно с PHP 7.2.0).

Пример #4 Отправка письма с дополнительными аргументами командной строки.

Пример #5 Отправка HTML-сообщения

С помощью функции mail() также можно отправить и HTML-письмо.

// несколько получателей
$to = ‘johny@example.com, sally@example.com’ ; // обратите внимание на запятую

// тема письма
$subject = ‘Birthday Reminders for August’ ;

// текст письма
$message = ‘

Birthday Reminders for August

Источник

Как грамотно отправлять почту из скриптов (в частности — на PHP)

Первая часть текста взята из инструкции хостинг-провайдера Netangels. Вторая — авторская.

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

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

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

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

To: =?windows-1251?b?0J/QvtC70YPRh9Cw0YLQtdC70Yw/PQ==?=
Subject: =?windows-1251?b?0Y3RgtC+INGC0LXQvNCwINGB0L7QvtCx0YnQtdC90LjRjz89?=
Content-Type: text/plain; charset=«windows-1251»
Content-Transfer-Encoding: 8bit

Это почтовое сообщение на русском языке
Содержит несколько строк

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

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

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

=? кодировка? способ кодирования? закодированный текст?=

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

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

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

Content-type: multipart/.

С этим заголовком знаком любой разработчик, которому доводилось решать проблемы отправки писем с вложениями или HTML письмами. И зачастую письма, сформированные без использования библиотек вроде PEAR::Mail_mime отображаются не очень корректно. Практика показывает, что если при формировании письма жестко придерживаться стандарта, которы задается в RFC (в частности — RFC 2046) — подавляющее большинство клиентских программ (включая таких любителей придерживаться стандартов, как Mozilla Thunderbird) отображает письмо корректно. Далее мы будем исходить из того, что читатель этого документа представляет себе основной синтаксис команд и понимает, что таке boundary и почему необходимо указывать Content-type для каждой из частей письма. Постараемся отметить основные ошибки.

Ошибка первая — неверный subtype

Ошибка вторая — неверный порядок частей

Ошибка третья — выбор только одного субтипа

Зачастую разработчик, формирующий из программы письмо забывает, что любая из частей письма может так же иметь Content-type: multipart, а значит можно выстроить некоторое подобие древовидной структуры, гарантирующей, что каждая из частей письма займет правильное место. Вот как примерно может выглядеть структура письма, имеющего текстовую и HTML версию (HTML с картинками), а так же приложенный документ MS Word:

Источник

Отправка письма средствами PHP

Мы проделали часть работы. Мы можем с помощью сценария получить данные, которые вводит пользователь в форме. Но пока они видны только самому пользователю. Нам нужно дополнить сценарий таким образом, чтобы данные отсылались нам на почту (или сохранялись в базе данных, чтобы их читать на сайте).

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

Создадим новую переменную $msg, которая будет содержать текст письма:

Мы получили текст письма, правда выглядит он пока не слишком опрятным. Можно было добавить пробелов между предложениями или разбить на отдельные строчки, но в целом результат нас устраивает.

Попробуем переделать пример:

Вместо переноса строк мы видим \n как обычный текст, который затесался между нашими словами для письма. Фигня какая-то.

Проблема заключается в том, что PHP по разному обрабатывает строки, заключённые в одинарные или двойные кавычки. В нашем случае, что перенос строк заработал, необходимо использовать двойные кавычки. Попробуем:

Мы видим, что символы \n исчезли, но текст всё равно выводится в одну строку. Однако, если вы откроете исходный код страницы, то увидите, что на самом деле текст разбит на отдельные строки. Но браузер игнорирует подобные переносы, поэтому мы не замечаем эффекта переноса строк. Если бы мы выводили строку в текстовый документ, то всё бы работало, как мы хотели. В письме переносы также будут работать.

Обратите внимание на следующую особенность. В примере с двойными кавычками мы вставляли имена переменных прямо в текст без обрамляющий кавычек. PHP самостоятельно подставляет значения переменных в текст. Это очень удобно. Здесь важно понимать разницу между одинарными и двойными кавычками в PHP-коде. Данное объяснение выходит за рамки изучаемого урока.

У нас есть все необходимые компоненты для отправки письма. Осталось скомпоновать в одно целое. Создадим отдельные переменные для каждого элемента письма:

В PHP есть встроенная функция для отправки письма mail(). Простой вариант функции выглядит следующим образом:

Как видите, в этом варианте не используется электронный адрес отправителя. Остальные параметры являются обязательными. На практике используют другой вариант функции с четырьмя параметрами, где нужно указать электронную почту отправителя. Причем, у четвёртого параметра следует обязательно добавить слово From: (с пробелом). Полностью, функция выглядит так:

Мы соединили слово From: с адресом почты через точку (оператор конкатенации) и получили четвёртый параметр для функции.

Если вы хотите также отправить копию и скрытую копию, то следует добавить нужные элементы («Cc: » или «Bcc: «) в четвёртом параметре, отделяя элементы комбинацией символов возврата каретки и новой строки, например так:

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

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

А дальше формируются данные для отправки письма. Пример расчитан на кодировку UTF-8:

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

Источник

Настраиваем функцию mail в PHP

php mail перенос строки в письме. Смотреть фото php mail перенос строки в письме. Смотреть картинку php mail перенос строки в письме. Картинка про php mail перенос строки в письме. Фото php mail перенос строки в письме

В этой статье пойдет разговор о том, как выполнить настройку своего Mail на PHP. Рассмотрим особенности использования Mail, что делать, если письма не отправляются, как выполняется отправка с вложением и какие бывают проблемы с кодировкой.

Какой бы интернет-проект на PHP вы не сделали, на нём должна быть форма обратной связи, что особенно актуально для проектов коммерческого направления. А значит, вам не обойтись без функции mail. Что же, давайте посмотрим, как использовать эту функцию для отправки сообщений.

Лирическое отступление

Прежде чем двигаться дальше, давайте немного вспомним теорию. Чтобы отправлять письма, нам потребуется почтовый сервер SMTP. Но это не проблема, т. к. он есть практически на всех современных платных хостингах. SMTP — сетевой протокол (protocol), используемый для передачи почты в сетях TCP/IP. Почтовые серверы и прочие агенты пересылки задействуют SMTP для получения и отправки сообщений.

Для приёма почты нам понадобится POP-сервер. Также следует понимать, что сам по себе PHP не отправляет сообщение, а лишь передаёт команды приложению sendmail — именно оно занимается отправкой, следовательно, его нужно иметь (если используете Денвер, то данное приложение уже встроено). Вдобавок ко всему, все сообщения почты помещаются в директорию под названием «tmp/!sendmail».

Как настроить mail?

Настройка выполняется в конфигурационном файле php.ini. В этом файле нужно прописать путь к лог-файлам, а также задать значения порта.

Общее описание функции:

php mail перенос строки в письме. Смотреть фото php mail перенос строки в письме. Смотреть картинку php mail перенос строки в письме. Картинка про php mail перенос строки в письме. Фото php mail перенос строки в письме

Если вы являетесь веб-мастером и используете Денвер, то информация, которая будет вами отправлена, сохранится на виртуальном диске Z в папке «tmp!sendmail».

Особенности использования

Работа функции mail в PHP зависит от ряда нюансов, включая вид операционной системы, выполненные настройки и параметры. Вот некоторые особенности: — во время отправки письма заголовок Form задаётся через необязательный параметр «additional_headers». Если его нет, нередко возникает ошибка при отправлении; — заголовки разделяйте символами перевода на новую строку и перевода каретки (\r\n); — следите, чтобы длина строки не превышала 70 знаков, для регулировки тоже используйте (\r\n).

Что делать, если функция не отправляет письма?

Даже если учесть всё вышеперечисленное, mail в PHP иногда не работает, причём на локальном сервере всё отправляется нормально. Одна из причин — некорректная настройка функции непосредственно на хостинге. Для решения проблемы рекомендуется обратиться к конфигурационному файлу php.ini и посмотреть на параметры функции «disable_functions». Дело в том, что нужная вам функция mail() может не работать, если она занесена в php.ini в раздел запрещённых (disable_functions).

php mail перенос строки в письме. Смотреть фото php mail перенос строки в письме. Смотреть картинку php mail перенос строки в письме. Картинка про php mail перенос строки в письме. Фото php mail перенос строки в письме

Идём дальше. Мы можем проверить работоспособность, написав простой код и разместив его в корневом каталоге созданного веб-проекта (сайта):

Если всё функционирует верно, на экране браузера мы увидим цифру один — «1». Её нам вернёт «print» после выполнения. В качестве кодировки рекомендуется использовать UTF-8.

php mail перенос строки в письме. Смотреть фото php mail перенос строки в письме. Смотреть картинку php mail перенос строки в письме. Картинка про php mail перенос строки в письме. Фото php mail перенос строки в письме

Важный момент! Если вы в качестве локального сервера используете OpenServer, то письма будут сохраняться в папке C:\openserver\userdata\temp\email. Естественно, если вы его установили на локальный диск «С».

Отправка с вложением

Давайте посмотрим, как отсылать сообщения, включающие в себя прикреплённый файл. Воспользуемся для этого функцией sendMailAttachment() :

Проблемы с кодировкой

Бывает, что после доставки сообщения поступают в виде вопросов «?» либо каких-то непонятных символов. Это свидетельствует о проблемах с кодировкой. Проблема может заключаться в заголовке From. Такие заголовки по стандарту должны быть в US-ASCII. Существуют 2 формы кодирования —BASE64 и Quoted-Printable. BASE64 более универсальна и может работать с UTF-8, поэтому лучше использовать ее. Пример:

php mail перенос строки в письме. Смотреть фото php mail перенос строки в письме. Смотреть картинку php mail перенос строки в письме. Картинка про php mail перенос строки в письме. Фото php mail перенос строки в письме

Однако в данном варианте заголовки могут быть нечитаемы. Для решения данной проблемы следует написать заголовок так:

php mail перенос строки в письме. Смотреть фото php mail перенос строки в письме. Смотреть картинку php mail перенос строки в письме. Картинка про php mail перенос строки в письме. Фото php mail перенос строки в письме

Также необходимо использовать исключительно кодировку UTF-8.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *