Функция в php mail: Функция mail PHP – ленивый способ отправки почты

Содержание

PHP Mail


Введение в PHP mail

Функция Mail () позволяет отправлять электронную почту непосредственно из скрипта.


Требования

Для того чтобы почтовые функции были доступны, PHP требует установленной и работающей почтовой системы. Используемая программа определяется параметрами конфигурации в файле PHP. ini.


Установки

Функции mail являются частью ядра PHP. Для использования этих функций не требуется установка.


Конфигурация среды выполнения

Поведение функций Mail зависит от настроек в PHP. ini:

ИмяПо умолчаниюОписаниеИзменчива
mail.add_x_header«0»Добавить X-PHP-исходный скрипт, который будет включать UID сценария, за которым следует имя файла. Для PHP 5.3.0 и вышеPHP_INI_PERDIR
mail.logNULLПуть к файлу журнала, в котором будут регистрироваться все вызовы mail (). Журнал включает полный путь к сценарию, номер строки, адрес и заголовки. Для PHP 5.3.0 и вышеPHP_INI_PERDIR
SMTP«localhost»Только для Windows: DNS-имя или IP-адрес SMTP-сервераPHP_INI_ALL
smtp_port«25»Только для Windows: номер порта SMTP. Для PHP 4.3.0 и вышеPHP_INI_ALL
sendmail_fromNULLТолько для Windows: указывает адрес «from», который будет использоваться при отправке почты из Mail ()PHP_INI_ALL
sendmail_path«/usr/sbin/sendmail -t -i»Указывает, где можно найти программу Sendmail. Эта директива работает также под Windows. Если задано, SMTP, смтп_порт и сендмаил_фром игнорируютсяPHP_INI_SYSTEM

PHP 5 mail функции

ФункцииОписание
ezmlm_hash()Вычисляет хэш-значение, необходимое для езмлм
mail()Позволяет отправлять письма непосредственно из скрипта

Как проверить работу функции mail()? — База знаний WebAsyst

Для проверки работоспособности PHP-функции mail() создайте тестовый PHP-файл (например, testmail.php) следующего содержания:

<?php
$message = '';
if (isset($_POST['email']) && !empty($_POST['email'])){
  if (mail($_POST['email'], $_POST['subject'], $_POST['body'], '')){
    $message = "Email has been sent to <b>".$_POST['email']."</b>.<br>";
  }else{
    $message = "Failed sending message to <b>".$_POST['email']."</b>.<br>";
  }
}else{
  if (isset($_POST['submit'])){
    $message = "No email address specified!<br>";
  }
}

if (!empty($message)){
  $message .= "<br><br>n";
}
?>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>
      Mail test
    </title>
  </head>
  <body>
    <?php echo $message; ?>
    <form method="post" action="">
      <table>
        <tr>
          <td>
            e-mail
          </td>
          <td>
            <input name="email" value="<?php if (isset($_POST['email'])
            && !empty($_POST['email'])) echo $_POST['email']; ?>">
          </td>
        </tr>
        <tr>
          <td>
            subject
          </td>
          <td>
            <input name="subject">
          </td>
        </tr>
        <tr>
          <td>
            message
          </td>
          <td>
            <textarea name="body"></textarea>
          </td>
        </tr>
        <tr>
          <td>
            &nbsp;
          </td>
          <td>
            <input type="submit" value="send" name="submit">
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>

Загрузите созданный файл в директорию сервера, доступную по HTTP-протоколу (public_html, www, htdocs или другую в зависимости от конфигурации сервера).

Запустите файл, набрав его адрес (URL) в адресной строке браузера, например: http://domain.ru/testmail.php.

Введите в поля открывшейся страницы адрес электронной почты, тему и текст проверочного сообщения и нажмите на кнопку «send», чтобы отправить сообщение.

В случае успешной отправки на странице появится сообщение вида «Email has been sent to …». В противном случае появится сообщение вида «Failed sending message to…».

Если отправить письмо с помощью такого проверочного файла не удалось, обратитесь к системному администратору с просьбой настроить функцию mail() на вашем сервере.

Совет: ознакомьтесь также со статьей о диагностике отправки почтовых сообщений приложениями WebAsyst.

PHP | Отправка форм. POST-запросы

Отправка форм

Последнее обновление: 15.03.2021

Одним из основных способов передачи данных веб-сайту является обработка форм. Формы представляют специальные элементы разметки HTML, которые содержат
в себе различные элементы ввода — текстовые поля, кнопки и т.д. И с помощью данных форм мы можем ввести некоторые данные и отправить их на сервер. А сервер уже обрабатывает эти данные.

Создание форм состоит из следующих аспектов:

  • Создание элемента <form><form> в разметке HTML

  • Добавление в этот элемент одно или несколько поле ввода

  • Установка метода передачи данных. Чаще всего используются методы GET или POST

  • Установка адреса, на который будут отправляться введенные данные

POST-запросы

Итак, создадим новую форму. Для этого определим новый файл form.php, в которое поместим следующее содержимое:


<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<h4>Форма ввода данных</h4>
<form action="user.php" method="POST">
    <p>Имя: <input type="text" name="name" /></p>
    <p>Возраст: <input type="number" name="age" /></p>
    <input type="submit" value="Отправить">
</form>
</body>
</html>

Атрибут action="user.php" элемента form указывает, что данные формы будет обрабатывать скрипт user.php,
который будет находиться с файлом form.php в одной папке. А атрибут method="POST" указывает, что в качестве метода передачи данных будет применяться метод POST.

Теперь определим файл user.php, который будет иметь следующее содержание:


<?php
$name = "не определено";
$age = "не определен";
if(isset($_POST["name"])){
 
    $name = $_POST["name"];
}
if(isset($_POST["age"])){
 
    $age = $_POST["age"];
}
echo "Имя: $name <br> Возраст: $age";
?>

Для обработки запросов типа POST в PHP используется встроенная глобальная переменная $_POST.
Она представляет ассоциативный массив данных, переданных с помощью метода POST. Используя ключи, мы можем получить отправленные
значения. Ключами в этом массиве являются значения атрибутов name у полей ввода формы.

Например, так как атрибут name поля ввода возраста имеет значение age (<input type="number" name="age" />),
то в массиве $_POST значение этого поля будет представлять ключ «age»: $_POST["age"]

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

Теперь мы можем обратиться к скрипту form.php и ввести в форму какие-нибудь данные:

И по нажатию кнопки введенные данные методом POST будут отправлены скрипту user.php:

Необязательно отправлять данные формы другому скрипту, можно данные формы обработать в том же файле формы. Для этого изменим файл form.php
следующим образом:


<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<?php
$name = "не определено";
$age = "не определен";
if(isset($_POST["name"])){
 
    $name = $_POST["name"];
}
if(isset($_POST["age"])){
 
    $age = $_POST["age"];
}
echo "Имя: $name <br> Возраст: $age";
?>
<h4>Форма ввода данных</h4>
<form method="POST">
    <p>Имя: <input type="text" name="name" /></p>
    <p>Возраст: <input type="number" name="age" /></p>
    <input type="submit" value="Отправить">
</form>
</body>
</html>

Поскольку в данном случае мы отправляем данные этому же скрипту — то есть по тому же адресу, то у элемента форма можно не устанавливать
атрибут action.

Стоит отметить, что в принципе мы можем отправлять формы и запросом GET, в этом случае для получения тех же значений формы
применяется массив $_GET, который был рассмотрен в прошлой теме:


<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<?php
$name = "не определено";
$age = "не определен";
if(isset($_GET["name"])){
 
    $name = $_GET["name"];
}
if(isset($_GET["age"])){
 
    $age = $_GET["age"];
}
echo "Имя: $name <br> Возраст: $age";
?>
<h4>Форма ввода данных</h4>
<form method="GET">
    <p>Имя: <input type="text" name="name" /></p>
    <p>Возраст: <input type="number" name="age" /></p>
    <input type="submit" value="Отправить">
</form>
</body>
</html>

Проверка правильности email на PHP

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

Как известно email состоит из двух основных частей. Например, адрес: [email protected].

Здесь, MyEmail – это непосредственный адрес (или логин) пользователя, а myssite.ru – адрес сайта, которому соответствует электронная почта.

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

логин_пользователя@доменное_имя.доменная_зона

В итоге, задача сводилась к построению регулярного выражения для проверки, соответствует ли проверяемая стока допустимым символам и структуре email. Но, начиная с PHP 5.2, появилась возможность выполнить эту проверку встроенной функцией filter_var(). Пример такой проверки:

$email = ;
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo ;
}else{
echo ;
}

В первый параметр функции указывается строковое значение, которое нужно проверить. Второй параметр – это идентификатор применяемого фильтра (в данном случае для проверки email). Функция filter_var() универсальна и может быть использована для проверки различных значений – числовое значение, логическое или проверка валидности IP-адреса.

Валидация email с использованием регулярного выражения PHP

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

$email = ;
if (preg_match(, $email)) {
echo ;
}else{
echo ;
}

Если используете подобное регулярное выражение, стоит быть внимательным к возможным адресам. Например, в данный код решит, что введенное значение не email, если доменная зона будет более 5 символов или если адрес будет задан кириллицей. Поэтому, применяя его, учитывайте возможные вводимые значения.

Узнайте о функции PHP Mail: освоение формы электронной почты PHP

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

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

Функция почты PHP: основные советы

  • Функция почты PHP позволяет отправлять электронные письма напрямую с помощью скрипта PHP.
  • Эта функция интегрирована в ядро ​​PHP, но требует, чтобы в вашей системе была установлена ​​работающая система электронной почты (которая должна быть определена в файле php.ini).

Параметры конфигурации среды выполнения

На поведение функции mail () PHP всегда влияют настройки, определенные внутри php.ini .В таблице ниже представлен список этих конфигураций среды выполнения, которые вы можете применить:

Имя Значение по умолчанию Описание Сменный
mail.add_x_header "0" Эта функция используется для добавления X-PHP-Originating-Script, целью которого является включение UID сценария, за которым следует имя файла. Может использоваться в PHP 5.3.0 и новее PHP_INI_PERDIR
почта.журнал NULL Путь к файлу, который будет включать все предыдущие вызовы почтовой функции PHP. Этот журнал будет включать полный путь к каталогу файла сценария, номер строки, адрес получателя и необходимые заголовки. Может использоваться в PHP 5.3.0 и новее PHP_INI_PERDIR
SMTP "localhost" Только для Windows: DNS-имя или IP-адрес SMTP-сервера PHP_INI_ALL
smtp_port "25" Только для Windows: номер порта SMTP.Может использоваться в PHP 4.3.0 и новее PHP_INI_ALL
sendmail_from NULL Только для Windows: укажите адрес From , который будет использоваться для отправки почты с помощью функции PHP mail () PHP_INI_ALL
sendmail_path "/ usr / sbin / sendmail -t -i" Укажите расположение программы sendmail. Эта директива также работает в Windows. Игнорирует SMTP, smtp_port и sendmail_from, если установлено. PHP_INI_SYSTEM

Функции для отправки электронной почты

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

Функция Описание
ezmlm_hash () Вычислить значение хеш-функции, требуемое EZMLM
почта () Разрешить отправку писем прямо из скрипта

PHP mail Функция: сводка

  • Используя встроенную функцию mail () , вы можете отправлять электронные письма через свой PHP-скрипт.
  • Для правильной работы этой функции ваша система должна иметь установленную, работающую и определенную в php.ini почтовую систему.

Как отключить функцию PHP mail () для домена рассылки спама на сервере Plesk для Linux? - Справочный центр Plesk

Plesk для Linux

kb: как сделать

ABT: Группа A

Вопрос

  • Как отключить функцию mail () для домена рассылки спама на сервере Plesk?

Ответ

Отключить функцию mail () для подписки через графический интерфейс

  1. Войдите в Plesk

  2. Перейдите к Подписки> пример.com> Настроить> Настройки PHP

  3. Добавить строку disable_functions = mail в поле Дополнительные директивы конфигурации :

  4. Нажмите ОК , чтобы применить изменения

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

Предупреждение: Если установлен disable_functions = mail , но 'mail' не указан как отключенный в Домене > example.com> Настройки PHP> phpinfo () , проверьте, установлены ли на сервере какие-либо дополнительные модули PHP. . Дополнительные модули PHP могут перезаписывать настройки php.ini для домена.

Если установлен модуль Suhosin PHP, выполните следующие действия:

  1. Подключитесь к серверу через SSH и закомментируйте директиву disable_functions в конфиге Suhosin, чтобы не перекрывать те же директивы в доменах php.ini .

    # grep disable_function /etc/php.d/suhosin.ini
    ; disable_functions =

  2. Добавить дополнительную директиву PHP для домена:

    CONFIG_TEXT: disable_functions = exec, system, mail

Отключить функцию mail () для подписки через CLI:

  1. Подключиться к серверу по SSH

  2. Выполните следующую команду:

    # пример plesk bin subscription_settings -u.com -outgoing_messages_enable_sendmail false

Кроме того, утилита Sendmail может быть полностью отключена, чтобы полностью отключить функцию отправки таких писем:

Полностью отключить утилиту Sendmail

Использование утилиты Sendmail можно отключить на сервере с настройками по адресу:

  • Войдите в Plesk GUI> Инструменты и настройки> Настройки почтового сервера> Отключите опцию Разрешить скриптам и пользователям использовать Sendmail

Или на уровне плана обслуживания:

  • Войдите в Plesk GUI> Планы обслуживания> > Mail> Отключите параметр Разрешить сценариям и пользователям использовать Sendmail

Или на уровне подписки:

  • Войдите в Plesk GUI> Подписки> пример.com> Контроль исходящей почты> Подписка> Изменить ограничения> Отключите параметр Разрешить сценариям и пользователям использовать Sendmail

Дополнительная информация

Кроме того, можно заблокировать всю исходящую почту, отправляемую сценариями PHP, такими как PHPMailer, добавив следующее правило iptables (в RHEL / CentOS):

  1. Подключиться к серверу по SSH
  2. Сохраните текущие правила iptables в файл:

    # iptables-save> / root / pre_iptables_rules

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

    # iptables -I ВЫХОД -m владелец! --uid-owner postfix -m tcp -p tcp --dport 25! -d 127.0.0.1 -j ОТКАЗАТЬ

  4. Установите и включите необходимый пакет:

    # yum install iptables-services && systemctl enable iptables-services

  5. Сохраните правила iptables, чтобы изменения были постоянными:

    # / sbin / service iptables save

404 - Страница не найдена

Войти

Запомнить меня • Забыли пароль?

Просмотреть корзину (0)

Переключить навигацию

  • Дом

  • Хранить

    • Просмотреть все

    • -----

    • Weebly

    • Виртуальный хостинг

    • Управляемый VPS

    • TurnKey

    • Неуправляемый VPS

    • Неуправляемый Windows VPS

    • Зарегистрируйте новый домен

    • Перенести домены к нам

  • Состояние сети

  • Свяжитесь с нами

  • Счет

    • Авторизоваться

    • -----

    • Забыли пароль?

    ×
    Закрывать

    Название

    Загрузка...

    Загрузка ...

    Закрывать

    Представлять на рассмотрение

    Отправка вложений с помощью PHP Mail ()

    if (isset ($ _ POST) &&! Empty ($ _ POST)) {

    if (! Empty ($ _ FILES ['attachment'] [' имя '])) {

    $ file_name = $ _FILES [' вложение '] [' имя '];

    $ temp_name = $ _FILES ['вложение'] ['tmp_name'];

    $ file_type = $ _FILES ['вложение'] ['тип'];

    $ base = базовое имя ($ имя_файла);

    $ extension = substr ($ base, strlen ($ base) -4, strlen ($ base));

    // разрешены только эти типы файлов

    $ allowed_extensions = array (".doc "," docx "," .pdf "," .zip "," .png ");

    // проверяем, разрешен ли этот тип файла

    if (in_array ($ extension, $ allowed_extensions)) {

    // основные сведения о почте

    $ from = $ _POST ['user_mail'];

    $ to = "[email protected]";

    $ subject = $ _POST ['user_name'];

    $ message = $ _POST ['user_message'];

    // вещи, которые вам нужны

    $ file = $ temp_name;

    $ content = chunk_split (base64_encode (file_get_contents ($ file)));

    $ uid = md5 (uniqid5 (uniqid5) (time ())); // уникальный идентификатор

    // стандартные почтовые заголовки

    $ header = "From:".$ от. "\ r \ n";

    $ header. = "Reply-To:". $ Replyto. "\ г \ п";

    $ header. = "Версия MIME: 1.0 \ r \ n";

    // объявляем несколько типов электронной почты (простой текст + attch)

    $ header. = "Content-Type: multipart / mixed; Border = \" ". $ Uid." \ "\ R \ n ";

    $ header. = "Это сообщение, состоящее из нескольких частей, в формате MIME. \ R \ n";

    // часть обычного текста

    $ header.= "-". $ uid. "\ r \ n";

    $ header. = "Content-type: text / plain; charset = iso-8859-1 \ r \ n";

    $ header. = "Content-Transfer-Encoding: 7bit \ r \ n";

    $ header. = $ Message. "\ г \ п";

    // часть атрибута

    $ header. = "-". $ Uid. "\ R \ n";

    $ header. = "Content-Type:". $ File_type. "; Name = \" ". $ File_name." \ "\ R \ n";

    $ header. = "Content-Transfer-Encoding: base64 \ r \ n";

    $ заголовок.= "Content-Disposition: attachment; filename = \" ". $ File_name." \ "\ R \ n";

    $ header. = $ Content. "\ R \ n"; // забросил 64 закодированных attch

    // отправка почты - сообщение находится не здесь, а в заголовке, состоящем из нескольких частей

    if (mail ($ to, $ subject, $ message, $ заголовок)) {

    эхо "успех";

    } else {

    эхо "сбой";

    echo error_get_last () ['сообщение'];

    }

    } else {

    echo "тип файла не разрешен"; } // выводить html-файл

    } else {

    echo "файл не отправлен"; }

    }

    ?>

    name = "user_mail">