Php name e mail: PHP Forms Validate E-mail and URL

Отправка электронной почты из веб-формы с помощью PHP

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

Начало работы

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

Для простоты я буду использовать форму всего с тремя полями ввода и кнопкой отправки. HTML-код выглядит следующим образом:

Открывающий тег

 содержит два атрибута: метод и действие. Атрибут метода сообщает браузеру, как обрабатывать данные при отправке формы. Всегда устанавливайте его для отправки по электронной почте. Установка содержимого формы на URL-адрес, который выглядит плохо и может привести к раскрытию конфиденциальной информации. Атрибут действия сообщает браузеру, куда отправлять данные формы для обработки. В этом примере я отправляю его на страницу с именем accept.php.

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

Создание страницы для скрипта обработки

Помимо обработки данных формы, скрипт подтвердит отправку сообщения. Создайте веб-страницу со следующим HTML-кодом в разделе  и сохраните ее как accept.php в той же папке, что и форма:

Страница в конечном итоге будет использовать логику PHP для отображения правильного сообщения.

Сбор данных из формы

Чтобы получить доступ к данным из поля, просто добавьте атрибут name в кавычки в пару квадратных скобок после $_POST. Например, $_POST[’email’] содержит значение поля с именем электронной почты.

Чтобы обработать форму, необходимо убедиться, что она была отправлена, а затем сформировать содержимое сообщения электронной почты.

    1. Над типом документа в файле accept.php создайте следующий блок кода PHP:

Имя кнопки отправки в моей форме — «Отправить», поэтому это подтверждает, что $_POST[‘send’] существует, другими словами, форма была отправлена. Если вы используете другое имя для кнопки отправки, измените его, чтобы оно совпадало. Переменные PHP чувствительны к регистру: $_post или $_Post не будут работать. Также убедитесь, что открывающая и закрывающая скобки совпадают (перед открывающей фигурной скобкой стоят две закрывающие скобки).

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

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

 

    3. Начните строить тело сообщения электронной почты на следующей строке:

 

PHP использует точку (точка) для соединения строк (текста) вместе, так что это добавляет значение поля имени к буквальному тексту «Имя:». Строка заканчивается двумя символами возврата каретки и новой строки. Обратите внимание, что \r\n\r\n заключен в двойные кавычки. Если вы используете одинарные кавычки, вы получите \r\n\r\n как обычный текст.

    4. Текст сообщения электронной почты должен состоять из одной строки, поэтому добавьте остальные поля, поставив перед знаком равенства точку, например: поле.

    5. Протестируйте свой код, добавив следующую строку для отображения тела сообщения:

    6. Загрузите страницу с формой в браузере, введите что-нибудь в каждое поле и нажмите кнопку «Отправить сообщение». Если все пойдет хорошо, вы должны увидеть что-то похожее на следующий скриншот:

Рис. 1. Содержимое всех полей формы объединено в одну строку.

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

Отправка электронного письма

Если все прошло успешно, вы можете попробовать отправить электронное письмо. PHP не отправляет почту. Он действует как посредник для почтового транспортного агента (MTA) веб-сервера, поэтому лучше всего делать это на работающем веб-сайте.

  1. Удалить сообщение echo $; и замените его следующим кодом:

Это передает функции mail() три аргумента: адрес, на который отправляется электронное письмо, строку темы и  сообщения. Если функции удастся передать сообщение агенту передачи сообщений, $success будет иметь значение true.

    2. Отредактируйте основной раздел страницы следующим образом, чтобы отобразить соответствующее сообщение:

Если задано значение $success и оно верно, отображается сообщение «Спасибо». В противном случае отображается сообщение об ошибке. Сообщение об ошибке также будет отображаться, если кто-то попытается получить доступ к accept.php без отправки формы.

    3. Загрузите форму и файл accept.php на свой веб-сайт и снова протестируйте форму. Если вы получили сообщение «Спасибо», проверьте свой почтовый ящик (и спам-ловушку), чтобы узнать, получили ли вы электронное письмо. Если да, поздравляю. Если нет, не беспокойтесь. Код на данный момент является абсолютным минимумом для отправки электронной почты, и он работает не на всех серверах.

Добавление заголовков электронной почты

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

    1. Вставьте новую строку в сценарий непосредственно перед строкой, которая отправляет электронное письмо, и создайте заголовок для адреса отправителя следующим образом:

Я использовал двойные кавычки, потому что каждый заголовок должен быть разделен возврат каретки и символ новой строки. Не указывайте адрес электронной почты отправителя в заголовке From. Этот заголовок должен быть адресом, который использует доменное имя вашего сайта.

    2. Большинство современных веб-сайтов используют кодировку UTF-8. Поэтому добавьте новый заголовок на следующей строке, используя оператор «точка-равно»:

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

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

Функция filter_input() принимает три аргумента. Первый указывает, что ввод был отправлен почтовым методом. Второе — это имя поля ввода. Третий аргумент указывает, как проверить ввод. В этом случае он подтверждает, что это один адрес электронной почты. Первый и третий аргументы являются константами PHP и чувствительны к регистру.

Если ввод не похож на действительный адрес электронной почты, функция возвращает false. В противном случае он возвращает адрес, который сохраняется как $email. Заголовок Reply-To добавляется, только если электронное письмо выглядит нормально. Помещение символа возврата каретки и новой строки в начало имеет тот же эффект, что и добавление их в конец предыдущего заголовка.

    4. Теперь, когда вы определили дополнительные заголовки электронной почты, передайте их в качестве четвертого аргумента функции mail() :

    5. Сохраните accept.php, загрузите исправленную версию на свой веб-сайт и снова протестируйте форму. . Если вы все еще не получили электронное письмо, проверьте следующий раздел.

Проверка того, что электронная почта получена из надежного источника

Многие хостинговые компании требуют передачи пятого аргумента tomail() , чтобы убедиться, что она исходит из надежного источника. Это ваш собственный адрес электронной почты в кавычках, которому предшествует -f (дефис-f). Если вы по-прежнему не получаете электронное письмо после добавления дополнительных заголовков, измените строку, которая отправляет письмо, следующим образом (используя свой собственный адрес электронной почты в последнем аргументе):

Хотите узнать больше о PHP? Эти курсы LinkedIn Learning могут помочь:

  • Основное обучение PHP
  • Советы, приемы и приемы PHP
  • PHP: объектно-ориентированное программирование с базами данных
  • PHP: объектно-ориентированное программирование

Отправка электронной почты с помощью PHP API Mailgun

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

Как разработчик, вы всегда ищете самый простой (экономичный по времени) и эффективный способ решения проблемы.

Часто это достигается выполнением двух условий:

  1. Использование внешних библиотек, применимых к вашему решению.

  2. Разработка масштабируемых приложений.

Первое условие объяснять не надо — ведь вы же не начнете писать ОС, не написав приложение, верно? На протяжении всего поста мы рассмотрим, как использовать предварительно написанные пакеты для отправки электронной почты. А теперь перейдем ко второму пункту: читайте дальше.

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

Если вы заботитесь о доставке (а вы должны), Mailgun предлагает высокую надежность, поскольку он разработан для очень хорошей обработки транзакционной электронной почты.

Вы можете настроить несколько доменов и выбрать, хотите ли вы делиться IP-адресами или создавать свою собственную репутацию. Чтобы защитить заголовки ваших электронных писем, Mailgun требует, чтобы в учетную запись были добавлены DKIM и SPF, а также чтобы они прошли проверку на уровне аутентификации и выравнивания. Все эти вещи работают вместе, чтобы помочь вам с доставкой электронной почты.

Теперь к хорошему: настройка PHP-скрипта-оболочки для Mailgun . Сначала мы будем использовать менеджер пакетов, а затем посмотрим примеры его применения.

PEAR — это инициатива сообщества, которая позволяет нам повторно использовать компоненты кода PHP, в то время как зависимый код также добавляется и поддерживается.

Во-первых, вам понадобится PHP и менеджер пакетов для продолжения. Их лучше всего устанавливать с помощью Debian Advanced Package Manager (APT), если вы используете Linux.

Хотя PEAR — это более старое решение, оно по-прежнему широко используется и является сокращением от PHP Extension and Application Repository. Судя по установленной версии PHP, у вас, вероятно, уже есть PEAR. Вы можете проверить, запустив груша команда без аргументов. Если вы получили предупреждение о том, что в вашей системе его нет, просто запустите: sudo apt install php-pear. Теперь мы готовы установить сторонний PHP-код с помощью PEAR.

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

Шаги с PEAR применяются следующим образом:

  1. Установка зависимостей проекта и включение пакетов с помощью основного класса или сценария vendor/autoloader.php

  2. Предоставление переменных, связанных с API

  3. Создание экземпляра класса/клиента Mail отправить электронное письмо (а)

Просто, не так ли?

Мы можем установить пакет Mail, набрав sudo pear install Mail . После завершения установки следующим шагом будет включение этого в файл сценария:

require_once "Mail.php";

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

Если вы перейдете на панель инструментов API, вы можете найти следующую необходимую информацию на вкладке домена:

Нам нужны переменные host , user и password , а также port 7 для использования 9018 :

Мы используем SMTP-соединение для отправки электронной почты через нашу учетную запись Mailgun.

Мы собираем указанные выше параметры в массив и создаем экземпляр класса Mail следующим образом: Здесь переменная $to содержит значение адреса получателя, а переменная $headers представляет собой массив, содержащий дополнительные поля для доставки.

На этом этапе вы можете проверить полный окончательный код:

Вы можете скачать полный исходный код здесь.

Если вы все настроили, то можете попробовать запустить скрипт: php mailer.php.

Вы запускаете его и получаете уродливую трассировку стека ошибок! Внимательно изучите его:

Неустранимая ошибка PHP: Uncaught Error: Class 'Net_SMTP' не найден в /usr/share/php/Mail/smtp>php:366.

Это означает, что мы забыли добавить еще одну зависимость проекта, необходимую для использования PEAR Mail. Запустите

sudo pear install Net_SMTP 9.0188  и попробуйте еще раз!

Вывод:

Сообщение успешно отправлено!

Если вы следили, то ваше сообщение должно было прийти на указанный почтовый ящик, и я вам молча аплодирую. Браво!

Мы увидели пример сценария для начала работы с Mailgun с менеджером пакетов PEAR и создали PHP-скрипты для отправки электронной почты с помощью SMTP и HTTP API. Но есть и другие варианты, которые вы можете использовать, если PEAR вам не подходит. На самом деле вы можете воспроизвести тот же результат с помощью Composer, и Mailgun подробно рассказывал об этом ранее в блоге.

Оставить комментарий

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

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