- Отправка mail() в php
- Создание файла mail.php и основных переменных
- Формирование текстовой версии письма (text/plain) и таблицы для HTML-версии
- Доработка HTML-версии почтового сообщения
- Создание заголовков почтового письма
- Формирование итогового сообщения письма
- Отправка mail() в php с проверкой
- Итоговый код
- PHP_ORIG_SCRIPT
- Php способы отправки email
- Описание
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Отправка Email с PHP Mail и PHPMailer: Полное Руководство
- Функция PHP mail()
- Создание Тестового Файла PHP Mail
- Компоненты PHP mail
- Отправка Писем с PHPMailer
- Использование PHPMailer с SMTP Hostinger
- Компоненты PHPMailer
- Контактная Форма PHPMailer
- Устранение Распространённых Ошибок PHP Mail и PHPMailer
- Адрес Отправителя Отклонён: Не Принадлежит Пользователю
- Системе Gmail не Удалось Подтвердить, что Это Письмо Отправлено из Домена VashDomen.com
- Сообщения Попадают в Спам
- Заключение
Отправка mail() в php
Рассмотрим, как отправить почтовое сообщение с помощью php функции mail(). В данной статье мы создадим максимально «белую» отправку, чтобы ваше письмо не попало в папку «Спам».
Какие мы решим возможные проблемы:
- HTML-only message, but there is no HTML tag.
Ваше сообщение должно содержать тег . - Message only has text/html MIME parts.
Вам нужно добавить текстовую версию письма (text/plain). - HTML and text parts are different.
Убедитесь, что ТЕКСТОВАЯ версия почтового сообщения похожа на HTML версию. - При отправке на почту gmail:
Вы не можете использовать Gmail адрес, если Вы не отправляете от Gmail. - PHP_ORIG_SCRIPT
При создании нашего php кода для отправки функции mail() мы учтём моменты выше, чтобы минимизировать процент попадания письма в папку «Спам».
Создание файла mail.php и основных переменных
Создадим в корне сайта файл mail.php и добавим в него следующий код.
Мы создали 4 переменных:
- $admin_email — список получателей (через запятую);
- $form_subject — тема письма;
- $project_name — отправитель письма;
- $html — начало HTML письма (далее мы его будет дополнять контентом).
Формирование текстовой версии письма (text/plain) и таблицы для HTML-версии
Сформируем таблицу $table для HTML-версии (text/html) почтового сообщения.
Затем в переменную $plain_text добавим текстовую версию. Всё это сделаем в цикле foreach . Также предусмотрим возможный вариант $_POST[‘value’] в виде массива (значений чекбоксов).
Таким образом, мы обработали полученные с фронтенда данные формы.
Доработка HTML-версии почтового сообщения
В первом пункте данной статьи мы создали файл mail.php и объявили основные переменные для нашего файла, в числе которых была переменная $html . Во втором пункте мы создали переменную $table , в которой сформировали HTML-таблицу из name и value . Теперь нам необходимо добавить таблицу с данными к переменной $html .
Так же мы добавили функцию adopt для кодирования темы письма и сгенерировали разделитель, т.к. почтовое сообщение будет состоять из нескольких частей Content-Type: multipart/alternative .
Создание заголовков почтового письма
Сформируем заголовки в виде массива (для PHP >= 7.2).
Для более старых версий php необходимо создавать $headers без использования массива. В конце каждой строки нужно добавлять \r\n
Формирование итогового сообщения письма
Собираем воедино сообщение, которое будем использовать для отправки 3 параметром функции mail().
На что стоит обратить внимание:
Желательно чтобы заголовки From, Reply-To и Return-Path совпадали.
Только вместо Return-Path мы укажем обратный адрес e-mail в 5 параметре функции mail() . Это позволит избежать проблему №4 в начале данной статьи.
Отправка mail() в php с проверкой
Все необходимые переменные для заполнения параметров мы подготовили, осталось отправить письмо и в случае ошибки вернуть сообщение об этом.
Итоговый код
В результате наш mail.php должен выглядеть примерно так:
PHP_ORIG_SCRIPT
Для удаления заголовка X-PHP-Originating-Script существует 2 способа
(если знаете ещё, поделитесь в комментариях):
- редактирование php.ini
- редактирование .htaccess
Чтобы не попасть в папку спам мы сделали всё от нас зависящее.
Остальные настройки вам необходимо делать на сервере: SPF, DKIM, DMARC, PTR.
Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.
Источник
Php способы отправки email
(PHP 4, PHP 5, PHP 7, PHP 8)
mail — Отправляет электронную почту
Описание
Отправляет электронную почту.
Список параметров
Получатель, или получатели письма.
Формат этого параметра должен соответствовать » RFC 2822. Несколько примеров:
- user@example.com
- user@example.com, anotheruser@example.com
- User
- User , Another User
Тема отправляемого письма.
Тема должна соответствовать » 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 не имел защиты от инъекции. Так что пользователи должны удостовериться, что передаваемые заголовки безопасны и содержат только заголовки. т.е. не содержат несколько переводов строк подряд, что стартует тело сообщения.
При отправке письмо должно содержать заголовок From . Он может быть установлен с помощью параметра additional_headers , или значение по умолчанию может быть установлено в php.ini .
Если заголовок отсутствует, будет сгенерировано сообщение об ошибке вида Warning: mail(): «sendmail_from» not set in php.ini or custom «From:» header missing . Заголовок From также определяет заголовок Return-Path при отправке напрямую через SMTP (только Windows).
Если сообщения не отправляются, попробуйте использовать только LF (\n). Некоторые агенты пересылки сообщений Unix (особенно » qmail) автоматически заменяют LF на CRLF (что приводит к двойному CR, если использовалось CRLF). Используйте эту меру в крайнем случае, так как это нарушает » RFC 2822.
Параметр additional_params может быть использован для передачи дополнительных флагов в виде аргументов командной строки для программы сконфигурированной для отправки писем, указанной директивой sendmail_path . Например, можно установить отправителя письма при использовании sendmail с помощью опции -f .
Параметр автоматически экранируется функцией escapeshellcmd() , чтобы не допустить выполнение команд. Но escapeshellcmd() позволяет добавлять дополнительные параметры. В целях безопасности рекомендуется проверять и очищать этот параметр.
Так как escapeshellcmd() применяется автоматически, то нельзя использовать некоторые символы, допустимые к использованию в email-адресах некоторыми RFC. mail() не допускает такие символы, поэтому в программах, в которых они требуются, рекомендуется использовать альтернативы для их отправки (например фреймворки или библиотеки).
Пользователь, под которым работает веб-сервер должен быть добавлен в список доверенных в конфигурации sendmail для того чтобы избежать добавления заголовка ‘X-Warning’ при указании отправителя с помощью опции (-f). Для пользователей sendmail — это файл /etc/mail/trusted-users .
Возвращаемые значения
Возвращает true , если письмо было принято для передачи, иначе false .
Важно заметить, что то что письмо было принято для передачи вовсе НЕ означает что оно достигло получателя.
Список изменений
Версия | Описание |
---|---|
7.2.0 | Параметр additional_headers может принимать значения типа массив. |
Примеры
Пример #1 Отправка письма.
Использование функции mail() для отправки простого письма:
// Сообщение
$message = «Line 1\r\nLine 2\r\nLine 3» ;
// На случай если какая-то строка письма длиннее 70 символов мы используем wordwrap()
$message = wordwrap ( $message , 70 , «\r\n» );
// Отправляем
mail ( ‘caffeinated@example.com’ , ‘My Subject’ , $message );
?>
Пример #2 Отправка письма с дополнительными заголовками.
Добавление простых заголовков, сообщающих почтовому агенту адреса From и Reply-To:
= ‘nobody@example.com’ ;
$subject = ‘the subject’ ;
$message = ‘hello’ ;
$headers = ‘From: webmaster@example.com’ . «\r\n» .
‘Reply-To: webmaster@example.com’ . «\r\n» .
‘X-Mailer: PHP/’ . phpversion ();
mail ( $to , $subject , $message , $headers );
?>
Пример #3 Отправка письма с дополнительными заголовками, переданными массивом
В этом примере посылается то же письмо, что и в примере выше, но дополнительные заголовки задаются массивом (доступно с PHP 7.2.0).
= ‘nobody@example.com’ ;
$subject = ‘the subject’ ;
$message = ‘hello’ ;
$headers = array(
‘From’ => ‘webmaster@example.com’ ,
‘Reply-To’ => ‘webmaster@example.com’ ,
‘X-Mailer’ => ‘PHP/’ . phpversion ()
);
mail ( $to , $subject , $message , $headers );
?>
Пример #4 Отправка письма с дополнительными аргументами командной строки.
Параметр additional_params может быть использован для передачи дополнительных параметров программе, используемой для отправки писем с помощью директивы sendmail_path .
Пример #5 Отправка HTML-сообщения
С помощью функции mail() также можно отправить и HTML-письмо.
// несколько получателей
$to = ‘johny@example.com, sally@example.com’ ; // обратите внимание на запятую
// тема письма
$subject = ‘Birthday Reminders for August’ ;
// текст письма
$message = ‘
Birthday Reminders for August
Источник
Отправка Email с PHP Mail и PHPMailer: Полное Руководство
Электронная почта — неотъемлемая часть любого проекта или бизнеса. Хотя существует множество платформ для корпоративной почты, включая Hostinger, Zoho Mail и G Suite, вы также можете отправлять письма с помощью PHP. В этом руководстве мы расскажем, как работает отправка email с PHP mail() — встроенной функции, PHPMailer и простым протоколом передачи почты (SMTP).
Функция PHP mail()
Функция PHP mail() вызывает программу Sendmail, обычно настраиваемую системным администратором, которая и позволяет отправлять электронные письма.
Чтобы использовать эту функцию, убедитесь, что ваш хостинг-провайдер позволяет вам вручную управлять службой Sendmail.
Возникли проблемы с отправкой писем? Hostinger предусмотрена функция PHP mail().
Если вы уже являетесь клиентом Hostinger, вы можете включить или отключить эту функцию, войдя в hPanel. Нажмите «Почта» -> «Управление почтовыми сервисами».
Служба Sendmail должна быть включена по умолчанию. Однако рекомендуем перепроверить это в вашей панели управления хостингом.
Создание Тестового Файла PHP Mail
Прежде всего, вам необходимо создать файл для PHP-скрипта и поместить его в каталог public_html, чтобы к нему можно было легко получить доступ через доменное имя.
- В hPanel щёлкните на Файловый менеджер ->Перейдите на страницу Файлового менеджера.
- Создайте новый файл, нажав на иконку «Новый Файл» в верхнем меню. Назовём наш файл testmail.php и завершим процесс создания, нажав кнопку «Создать«.
- Дважды кликните по файлу testmail.php, поскольку мы собираемся редактировать его с помощью функции PHP mail(). Вот пример основных компонентов функции, которые мы будем использовать в этом руководстве. Они будут объяснены более подробно в следующем разделе. Сейчас просто нажмите «Save & Close«, когда закончите редактировать.
- Теперь вы можете отправить электронное письмо, открыв в браузере VashDomen/testmail.php. Не забудьте заменить «VashDomen» на доменное имя, которое вы использовали для создания тестового файла testmail.php.
- Теперь отправка email с PHP должна работать. Письмо должно прийти на почту получателя.
Компоненты PHP mail
Как мы и обещали, сейчас мы более подробно рассмотрим компоненты PHP-скрипта для отправки сообщений. В примере ниже вы увидите базовый синтаксис email, который поможет лучше понять эту функцию.
Однако, если вам нужна дополнительная информация о функции Sendmail и её компонентах, вы можете обратиться к официальной документации PHP.
Вот синтаксис PHP, который мы использовали в предыдущем разделе:
Теперь давайте рассмотрим каждую его часть отдельно.
Эти первые две строки охватывают отчёты об ошибках. Они сообщат вам, если скрипт не удалось выполнить.
Эта строка должна содержать адрес электронной почты отправителя. Большинство хостинг-провайдеров не разрешают использовать случайные адреса, так как это может быть использовано с целью спуфинга (англ.) — подделки писем. Всегда указывайте адреса, созданные для вашего доменного имени или бренда, тогда отправка email c PHP mail должна быть успешной.
Здесь вы вводите адрес электронной почты получателя.
Здесь мы вводим тему письма.
Здесь мы вводим текст сообщения.
Указывает важную информацию, такую как адрес отправителя.
Эта строка используется при выполнении функции. Оставьте её без изменений.
Сообщение, которое появится в случае успешного выполнения скрипта.
Отправка Писем с PHPMailer
PHPMailer — популярная библиотека отправки почты для PHP. Она поддерживает отправку писем, как через функцию mail(), так и через простой протокол передачи почты (SMTP). Библиотека значительно упрощает сложный процесс отправки писем с помощью PHP, предоставляя набор готовых функций для создания и отправки почты.
Установить PHPMailer довольно просто, особенно если у вас установлен Composer. Если вы используете Hostinger, вам не нужно об этом беспокоиться, поскольку он по умолчанию включен в каждый пакет хостинга.
Однако, если вам нужно установить PHPMailer вручную, тогда подключите свою учётную запись хостинга через терминал SSH. Следуй этой инструкции:
- Загрузите и установите SSH-клиент PuTTY.
- Перейдите в панель управления hPanel, найдите и кликните по «SSH-доступ» в разделе «Расширенные«.
- Обратите внимание на раздел с информацией для SSH-доступа. Вам понадобится SSH IP, порт, имя пользователя и пароль.
- Откройте PuTTY, затем укажите свой SSH IP и порт соответственно.
- Нажмите Open, появится командное окно. Введите своё имя пользователя и пароль SSH. Как только это будет сделано, нажмите Enter.
ПРИМЕЧАНИЕ: PuTTY НЕ показывает пароли. Не волнуйтесь, если вы не увидите ваш пароль на экране.
Использование PHPMailer с SMTP Hostinger
Теперь, когда PHPMailer готов к работе, вы можете начать использовать его для отправки почты средствами PHP и через Hostinger SMTP.
- Создайте учётную запись электронной почты, войдя в hPanel. Перейдите в раздел «Почтовые аккаунты» -> «Создать новую учётную запись электронной почты». Введите новый адрес электронной почты и установите пароль, затем нажмите «Создать».
- Когда закончите, обратите внимание на свои данные SMTP, расположенные на той же странице в самом вверху.
ПРИМЕЧАНИЕ. Для того чтобы отправить письмо через PHPMailer, вам нужно знать имя пользователя учётной записи электронной почты, пароль к учётной записи, хост SMTP и порт SMTP.
Компоненты PHPMailer
Чтобы понять, как работает PHPMailer, давайте разберём приведённый выше пример скрипта, который использует SMTP для отправки электронной почты. Вот подробное объяснение каждого компонента:
Эта строка импортирует класс PHPMailer в глобальное пространство имён.
Включает различные библиотеки, необходимые PHPMailer.
Все похожие переменные содержат важную информацию, такую как сведения о сервере, заголовки сообщений, вложения и многое другое. Короче говоря, они гарантируют, что отправитель защищён аутентификацией SMTP.
Определяет, что происходит при выполнении скриптов.
В случае сбоя отправки скрипта отобразится сообщение об ошибке с пояснением.
Определяет, что произойдёт, если скрипт будет выполнен.
Если письмо успешно отправлено, появится это сообщение.
СОВЕТ: строка SMTPDebug = 2; полезна лишь в том случае, если вы тестируете скрипт и хотите увидеть, как он работает. Измените её на SMTPDebug = 0; если вы закончили тест. Таким образом, конечный пользователь не увидит отчёт по SMTP.
Если вы обратили внимание, то, наверняка, заметили, что в этом примере мы делаем что-то немного по-другому. Вместо обычного текста, мы отправляем HTML-сообщение.
Следовательно, содержимое вашего сообщения будет загружаться из файла message.html, расположенного в том же каталоге — public_html.
Этот формат обеспечивает больше функциональности по сравнению с обычными текстовыми сообщениями. HTML предлагает много опций для настройки. Например, вы можете изменить цвет, стиль, изображение или даже включить мультимедийные файлы, которые обычно устаревают в обычном текстовом сообщении.
Контактная Форма PHPMailer
Возможности PHPMailer не ограничиваются только отправкой PHP-почты. Ещё один вариант его применения — создание контактной формы, с помощью которой ваша аудитория сможет с вами связаться.
Вот пример скрипта:
Делаем всё то же самое, что и с предыдущими скриптами. Вам нужно создать новый файл в папке public_html. В данном случае мы назвали файл formscript.php. Отредактируйте информацию внутри скрипта соответствующим образом. После этого вам нужно только запустить скрипт из вашего браузера.
Вот как выглядит результат:
Как только ваш клиент отправит форму, он получит подтверждающее сообщение, а содержимое формы будет доставлено вам на почтовый адрес, которое вы должны указать здесь:
СОВЕТ: если контактная форма PHPMailer не работает, добавьте строку $mail->SMTPDebug = 2;, чтобы узнать, что вызывает проблему. Не забудьте удалить эту строку или поменять 2 на 0, когда закончите.
PHPMailer имеет больше примеров применения, которые вы найдёте в их официальном репозитории GitHub. Кроме того, если вы используете WordPress, вы можете легко создать контактную форму с помощью таких плагинов, как WP Forms , Formidable Form или Gravity Forms .
Устранение Распространённых Ошибок PHP Mail и PHPMailer
Отправка Email с PHP или PHPMailer время от времени может сопровождаться ошибками. Вот список наиболее распространённых проблем и способы их решения.
Адрес Отправителя Отклонён: Не Принадлежит Пользователю
Эта ошибка означает, что серверу не удалось пройти аутентификацию с использованием предоставленных данных.
Чтобы исправить это, проверьте адрес электронной почты, который вы использовали для отправки сообщения, и убедитесь, что он соответствует существующему ящику электронной почты. Если он указывает не на тот почтовый ящик, измените его соответствующим образом. Также убедитесь, что вы включили SPF-запись (англ).
Системе Gmail не Удалось Подтвердить, что Это Письмо Отправлено из Домена VashDomen.com
Если вы увидели это предупреждение при тестировании почтового скрипта PHP, это может означать одно из следующих:
- Ваша SPF-запись не включена. Вы можете найти инструкции по её добавлению здесь (англ.).
- Вы отправили электронное письмо с адреса, который не существует или не принадлежит вам. Убедитесь, что вы используете действительные данные аутентификации SMTP.
Сообщения Попадают в Спам
Есть несколько причин, по которым сообщения PHP могут попадать в спам. Вот некоторые из самых распространённых:
- Тема сообщения, вводящая в заблуждение или похожая на спам. Например, когда вы указываете одно слово: «тест» или «тестирование», «привет», «срочно» или что-то подобное. Убедитесь, что ваша тема чётко отображает суть сообщения.
- Вы используете неправильный адрес отправителя и ваше сообщение отфильтровывается как спам. Такая мера безопасности направлена на борьбу со спуфингом и мошенничеством.
- Вы используете слова, которые работают как триггеры для фильтрации спама. В эту категорию входят такие фразы, как «отличное предложение», «нажмите здесь», «специальная акция», «это не спам» и т. д. Попробуйте изменить содержание сообщения, чтобы проверить, так ли это.
- В вашем списке рассылки нет кнопки «Отписаться от рассылки«. Когда много людей сообщают о ваших письмах как о спаме, вам будет сложно избежать спам-фильтра. Наличие кнопки отказа от подписки — отличный способ предотвратить это и вызвать больше доверия у ваших читателей.
Заключение
Теперь вы знаете, как происходит отправка email с PHP, а также, как использовать PHPMailer для отправки писем с аутентификацией SMTP. Не смотря на то, что в этом руководстве представлены базовые примеры, тот же синтаксис можно использовать в разработке контактной формы и других расширений для вашего сайта.
Для более подробной информации не забудьте посетить страницу проекта PHPMailer. Если у вас есть какие-либо советы, рекомендации или идеи, мы будем рады услышать их в разделе комментариев ниже.
Елена имеет профессиональное техническое образование в области информационных технологий и опыт программирования на разных языках под разные платформы и системы. Более 10 лет посвятила сфере веб, работая с разными CMS, такими как: Drupal, Joomla, Magento и конечно же наиболее популярной в наши дни системой управления контентом – WordPress. Её статьи всегда технически выверены и точны, будь то обзор для WordPress или инструкции по настройке вашего VPS сервера.
Источник