отправить php как слышите так и пишите
Отправить php как слышите так и пишите
(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 как слышите так и пишите
Отправка e-mail в PHP
Обычно я пишу вступление о том, почему данная тема так важна для изучения. Но не в этот раз, потому что здесь, уверен, ни у одного человека не возникнет вопрос: «Зачем отправлять e-mail в PHP?». Поэтому предлагаю сразу приступить к делу и узнать об этом более подробно, тем более, что проще реализации отправки e-mail через PHP и придумать нельзя, так что поймут даже те, кто не знаком с PHP вообще.
Для начала давайте с Вами разберёмся немного с теорией. Скучно, но поверьте важно. Для отправки e-mail необходим SMTP-сервер. На большинстве платных хостингах он обязательно имеется. Однако, если такой возможности нет (допустим, хостинг бесплатный или очень дешёвый), то тогда можно воспользоваться сторонним SMTP-сервером (например, mail.ru). То есть главное: для отправки необходим SMTP-сервер.
Как видите, всё интуитивно понятно: кому отправлять, какая тема и само сообщение. Если Вы используете пакет Denwer, то после запуска скрипта, Вы сможете найти файл в директории «tmp/!sendmail«, в котором и содержатся данные Вашего письма. Открыть эти файлы можно либо в блокноте, но лучше открыть их в какой-нибудь почтовой программе (например, The Bat или Microsoft Outlook).
Я не даром написал вперемешку русский и английский текст, чтобы проверить кодировку. Очень часто она распознаётся неправильно, и в результате, пользователи видят «абракадабру«. Чтобы этого избежать необходимо задать кодировку. И как раз для кодировки, а также для других особых параметров и существует четвёртый аргумент функции mail():
Также сообщения можно отправлять в HTML-формате. Для этого достаточно всего лишь заменить «text/plain» на «text/html«. И Вы сможете в сообщении использовать HTML-теги. Только не забывайте, что всякие теги, наподобие: «
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 20 ):
А как сделать автоматическое сообщение вот такие сообщения например это «вместо_этого_текста_приклепленный_фаил Вот файл который вы заказали с вместо_этого_текста_название_сайта. Если вы не заказывали данный файл просто игнорируйте это сообщение.» или «вместо_этого_текста_имя_пользователя на ваш комментарий ответили!»?
Для этого надо делать шаблон письма, например, такой: «%user% на Ваш комментарий ответили». Затем через PHP перед отправкой надо заменить с помощью функции str_replace %user% на конкретное имя пользователя.
Спасибо, но вопрос был как сделать письмо чтобы автоматический приходило всем зарегистрированным, или каким-то особенным пользователям, или вообще просто любым.
Это надо сделать в цикле. Если же пользователей много, то здесь всё гораздо сложнее, так как сервер может не выдержать. Для отправки письма большому количеству пользователей нужно запускать скрипт много раз, каждый раз отправляя небольшие партии. Например, при первом запуске отправить 20 писем. При втором ещё 20, при третьем ещё 20 и так далее, пока не будут отправлены все письма. Интервал надо делать хотя бы 30 секунд.
Да, письмо дойдёт до всех трёх ящиков. Однако, минус данного способа: каждый из получателей увидит адреса других получателей. Сделать уведомление автоматическим элементарно. Например, при добавлении нового сообщения на форум, надо вызвать функцию mail(). Тогда сразу же придёт уведомление.
Спасибо, а как сделать каждый из получателей не видел адрес других получателей? Или можете сказать как Вы делали такие уведомления?
Надо через цикл (например, for) по очереди вызывать функцию mail, каждый раз отправляя одному получателю.
Михаил, очень нужна ваша помощь. на моём тестовом хостинге не работает функция «mail», но там можно через сторонний SMTP сервер. Расскажите как им пользоваться,и как его настроить. Прошу расскажите мне или напишите статью. Оооочень надо
Проверьте можно ли на хостинге прямо указать сторонний SMTP, чтобы функция mail на него отправляла. Либо поищите скрипты, которые будут сами отправлять почту в обход стандартной функции.
извините за нелепый вопрос: а как на этот скрипт попадает пользователь? ведь РНР «сидит» и работает на сервере. и можно ли каким то образом РНР-скрипты вставлять в HTML страницы.
Пользователь к нему обращается, отправляя запрос. В HTML-страницах нельзя использовать PHP, но в PHP-коде можно использовать HTML.
Как отправлять текстовые сообщения с помощью PHP
Russian (Pусский) translation by Yuri Yuriev (you can also view the original English article)
В этом уроке мы рассмотрим основы отправки текстовых сообщений с помощью PHP.
Обзор
Отправка текстового сообщения (SMS) на самом деле довольно проста.
Ниже приведена упрощённая схема передачи сообщения из веб-приложения на беспроводное устройство.
Большинство беспроводных сетей имеют шлюз SMS, посредством которого сообщения электронной почты могут отправляться в виде текстовых сообщений на мобильное устройство. Это хорошо, потому что, с точки зрения разработчика, он вообще свободен, однако, это не бесплатный сервис для конечного пользователя. Плата с получателя сообщения берётся, а сообщения, отправленные по электронной почте, будут считаться текстовым сообщением, отличным от сети.
Email на SMS
Чтобы отправить SMS по электронной почте, обычно требуется только две вещи:
Для большинства носителей можно придерживаться следующего соглашения:
Чтобы отправить текст Mr. Example, вы можете просто добавить 3855550168@vtext.com в любой почтовый клиент, набрать сообщение и нажать отправить. Это отправит текстовое сообщение на номер телефона +1 (385) 555-0168 по беспроводной сети Verizon.
Например, я отправлю текстовое сообщение самому себе с помощью Gmail.
Когда мой телефон получит сообщение, оно должно выглядеть так:
PHP’s mail функция
Давайте сделаем еще один шаг. Используя SMS Gateway, мы можем отправить текстовое сообщение по электронной почте, используя функцию mail PHP. Функция mail имеет следующую запись:
Можете почитать ещё here.
В ранней версии функциональности мы могли бы написать следующий PHP-код:
Тест-драйв
Проведём тест с PHP, чтобы убедиться, что всё настроено правильно, и что mail функция фактически отправит текстовое сообщение. Используя следующий код, мы можем запустить:
Когда мой телефон получит сообщение, оно выглядит так:
Если вы получаете сообщение об ошибке, см. раздел troubleshooting.
Добавление удобства
Разметка
Избегая основ, давайте рассмотрим эту идею и обернём вокруг неё пользовательский интерфейс. Сначала мы создадим простую форму:
Стиль
Далее мы брызнем CSS:
Это даст нам следующий простой вид:
Скрипт
Самой важной частью этого является скрипт PHP. Мы напишем этот фрагмент кода:
Примечание: метод mail только уведомляет, было ли отправлено сообщение. Это не даёт возможности проверить, было ли сообщение успешно принято сервером-получателем или почтовым ящиком.
Окончательный код
Исправление проблем
Ошибка локального домена
. вам придется установить и настроить почтовый сервер. Это выходит за рамки данного урока. Однако, если вы работаете на своей локальной машине, переход на нечто вроде XAMPP может решить эту проблему. Или попробуйте установить Mercury Mail вместе с WAMP, MAMP или LAMP (или SAMP или OAMP и пр.) систему (много разных «AMP»).
PHPMailer
Другим вариантом (методом, который я предпочитаю) является использование PHPMailer. Ниже представлен пример использования PHPMailer для подключения к SMTP-серверу Gmail и отправки сообщения.
Его использование так же просто, как включение класса в ваш скрипт.
Это должно распечатывать что-то вроде:
Может потребоваться немного больше, чтобы настроить соединение в зависимости от вашей ситуации. Если вы планируете использовать Gmail, Google предоставил information on connecting.
Заключение
Существует множество методов для выполнения задачи отправки SMS через веб-приложение. Этот метод действительно предназначен для низкоуровневых сообщений (скорее всего, менее 1000 текстовых сообщений в месяц), а разработчики хотят оставить ноги сухими, не размахивая наличными. Другие варианты включают:
Этот урок никоим образом не является всесторонним обзором отправки текстовых сообщений с PHP; но это должно заставить вас начать! Надеюсь, этот урок вас заинтересовал. Большое вам спасибо за чтение!
Как грамотно отправлять почту из скриптов (в частности — на 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:
Теперь мы умеем создавать форму, получать данные от пользователя и отправлять полученную информацию себе на почту.
Вменяемая инструкция к PHPMailer “Отправка писем и файлов на почту”
Apr 23, 2019 · 4 min read
PHPMailer обновился и инструкция к прошлой версии не актуальна, хотя вы также можете использовать прикреплённые файлы в той инструкции. Работать будет.
Прошло несколько лет, но у вас всё также нет выхода, и PHPMAILER — это самый простой способ отправлять со своего сайта письма на почту.
О чем эта инструкция.
Это инструкция по добавлению на ваш сайт PHPMailer и отправки писем с прикреплёнными файлами к вам на почту без перезагрузки страницы.
1. Скачиваем PHPMailer
Переходим на сайт https://github.com/PHPMailer/PHPMailer и скачиваем последнюю версию
Во всём архиве нам нужны только 3 файла:
Всё остальн о е, что хранится на Github — на*уй не нужно, можете удалять.
2. Удаляем из файлов весь хлам
Этот пункт вы можете пропустить. Он не является обязательным
Файлы, написанные разработчиками PHPMailer, содержат немереное количество мусора, состоящего из одних комментариев (зачем?!). Вес этих трёх файлов вместе с комментариями равен 196кб, после удаления комментов вес составит 72кб. Почти в 3 раза…
Я предлагаю удалить все комментарии в файлах с помощью какого-нибудь “PHP минификатора”. Можете использовать любой, я взял (первый попавшийся) http://php-minify.com
Процедуру повторяете со всеми тремя файлами.
Для наглядности файл Exception.php
3. Перемещаем файлы в проект
И теперь помещаем эти 3 файла в наш проект. Я создал специально для этих файлов папку под названием phpmailer
4. Создаём файл конфигурации
Создадим файл send.php с таким содержанием
Здесь вам нужно отредактировать эти поля под себя:
Нужно использовать не пароль от самой почты, а “Пароль приложения”. В настройках вашей почты, будь то Gmail, Yandex или Mailru— есть раздел “Пароли приложений”, где вы можете специально создать отдельный сгенерированный пароль для PHPMailer.
Сохраняем этот файл send.php и помещаем его в корень сайта
В примере указаны настройки для Яндекса. Вы можете использовать любую почту для отправки. Для изменения почты отправки, к примеру, на Gmail — нужно изменить эти поля:
$mail->Host = ‘smtp.gmail.com’; // SMTP сервер
$mail->SMTPSecure = ‘ssl’; // шифрование
$mail->Port = 465; // Порт
5. Создаём HTML форму
Теперь поместим эту форму в нужное место на вашем сайте
Обратите внимание на onsubmit. Там вторым аргументом должно быть указано имя файла, то есть send.php.