Блог веб разработки

Блог веб-разработки статьи | видеообзоры | исходный код

mail php

Здравствуйте друзья! Сегодня хочу поделится с вами php скриптом, который без особых проблем может отправлять письма на любую почту. Ранее я публиковал информацию об отправке писем через php.

"РАБОТА С ПОЧТОЙ PHP"

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

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

Разберем что принимает в себя данная функция:

mail($to, $subject, $body, $headers);

$to - кому отправляется письмо (почта)

$subject - Тема письма

$body - текст письма

$headers - Заголовок письма

Чтобы письмо было отправлено, я использую две функции:

function send_mail(
          $n_from,    # имя отправителя
          $e_from,   # email отправителя
          $n_to,      # имя получателя
          $e_to,     # email получателя
          $charset, # кодировка переданных данных
          $charset2, # кодировка письма
          $theme,      # тема письма
          $text,         # текст письма
          $flag          # письмо в виде html или обычного текста
        ) {

        $to = header_encode($n_to, $charset, $charset2) . ' <' . $e_to . '>';
        $theme = header_encode($theme, $charset, $charset2);
        $from =  header_encode($n_from, $charset, $charset2) .' <' . $e_from . '>';

        if($charset != $charset2) {
          $text = iconv($charset, $charset2, $text);
        }

      $headers = "From: $from\r\n";
      $type = ($flag) ? 'html' : 'plain';
      $headers .= "Content-type: text/$type; charset=$charset2\r\n";
      $headers .= "Mime-Version: 1.0\r\n";

      return mail ($to, $theme, $text, $headers);
}

function header_encode($string, $charset, $charset2) {
  if($charset != $charset2) {
    $string = iconv($charset, $charset2, $string);
  }
  return '=?' . $charset2 . '?B?' . base64_encode($string) . '?=';
}

с помощью них вы сможете правильно сформировать общие заголовки письма и передать их в функцию mail().

Рассмотрим какие параметры передаются в функцию send_mail():

$n_from - имя отправителя

$e_from - email отправителя

$n_to - имя получателя

$e_to - email получателя

$charset - кодировка переданных данных

$charset2 - кодировка письма

$theme - тема письма

$text - текст письма

$flag - флаг, (true) - письмо отправляется в формате html, (false) - письмо отправляется в формате text/plain

Можно заметить что параметров в функцию send_mail() мы передаем намного больше чем в mail(). Все эти данные необходимы для формирования заголовков.

Теперь практический пример:

Допустим у нас есть страница с формой.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Отправка почты с помощью функции mail</title>
</head>
<body>
<form action="mail.php" method="post">
    <input type="text" name="name" required  placeholder="Введите ваше имя" />
    <input type="email" name="email" required  placeholder="Введите ваш email" />
    <button >Подписаться</button>
</form>
</body>
</html>

Отправка формы идет на обработчик mail.php

<?php
function send_mail(
          $n_from,    # имя отправителя
          $e_from,   # email отправителя
          $n_to,      # имя получателя
          $e_to,     # email получателя
          $charset, # кодировка переданных данных
          $charset2, # кодировка письма
          $theme,      # тема письма
          $text,         # текст письма
          $flag          # письмо в виде html или обычного текста
        ) {

        $to = header_encode($n_to, $charset, $charset2) . ' <' . $e_to . '>';
        $theme = header_encode($theme, $charset, $charset2);
        $from =  header_encode($n_from, $charset, $charset2) .' <' . $e_from . '>';

        if($charset != $charset2) {
          $text = iconv($charset, $charset2, $text);
        }

      $headers = "From: $from\r\n";
      $type = ($flag) ? 'html' : 'plain';
      $headers .= "Content-type: text/$type; charset=$charset2\r\n";
      $headers .= "Mime-Version: 1.0\r\n";

      return mail ($to, $theme, $text, $headers);
}

function header_encode($string, $charset, $charset2) {
  if($charset != $charset2) {
    $string = iconv($charset, $charset2, $string);
  }
  return '=?' . $charset2 . '?B?' . base64_encode($string) . '?=';
}

if(
  isset($_POST['name']) &&
  trim($_POST['name']) !== '' &&
  isset($_POST['email']) &&
  filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)
){


    $message = '<h2>Новый подписчик!</h2>';
    $message .= '<p>'.trim($_POST['name']) .'<p>';
    $message .= '<p>'.trim($_POST['email']) .'<p>';
    $message .= '<span float="right">'.date('H:i d-m-Y').'</span>';
   send_mail(
          'Новый подписчик!',  // имя отправителя
          'admin@webmygames.ru', // email отправителя
          'Новый подписчик!',    // имя получателя
          'andrey-gribin@mail.ru',   // email получателя
          'UTF-8',        // кодировка переданных данных
          'KOI8-R',   // кодировка письма
          'Сообщение с сайта о новом подписчике', // тема письма
          $message,
          true  // письмо в виде html или обычного текста
        );

    }

    $referer = $_SERVER['HTTP_REFERER'];
    if($referer === null){
      $referer = '/';
    }
    header("Location: ".$referer);
?>

В самом обработчике мы используем все вышеописанные функции и в конечном итоге вызываем функцию send_mail() куда передаем данные. Общее сообщение письма сформировано в переменной $message.

Отправка осуществляется с почты admin@webmygames.ru на andrey-gribin@mail.ru.

Здесь есть очень тонкий нюанс! Почта с которой будет отправляться сообщение обязательно должна быть АДМИНСКОЙ. Если вы попробуете осуществить отправку, например с почты такого вида (andrey@yandex.ru, andrey@mail.ru, andrey@gmail.ru и т. п.), то вероятнее всего у вас ничего не пройдет.

Админская почта представляет собой такую структуру {название}@{ваш домен}. В нашем случае это admin@webmygames.ru, admin - произвольное название, webmygames.ru - домен с которого мы будем отправлять письмо. Такую почту вы можете создать на своем хостинге, иногда админская почта указывается в переданных доступах хостинга при его покупке. Как создавать админскую почту мы не будем, так как это не входит в тему поста.

В итоге работы скрипта на мою почту andrey-gribin@mail.ru пришло письмо с переданной информацией через форму отправки.

Сам процесс произошел довольно быстро без видимых задержек. Я использую данный скрипт постоянно из за его простоты, скорости работы и надежности. Письма успешно проходят на почты mail.ru, yandex.ru, gmail.com и т. п. Теперь и вы можете использовать его в своих проектах! Надеюсь я помог вам в решении вашего вопроса.

Не забывайте подписываться на

Мой блог группу Вконтакте канал youtube

С вами был Грибин Андрей. Всего вам хорошего!

Оцените статью

Еще статьи

ALL sql

Откат GIT

методы классов PHP

HTML Visibility

камера html

Broadcast Channel

selection javascript

FileSystem api

clipboard javascript

Комментарии

Проверочный код

AntonMeect

Работа в интернете

16:59 14-06-2019

Администратор

Прием прием

11:01 03-04-2019

История

    ПОДПИСКА

    • Подпишись и получай информацию о выходе новых статей на почту! Просто введите свою почту, нажмите кнопку подписаться. На почту должно будет прийти сообщение с потверждением подписки. Если сообщение не пришло проверьте раздел спам или попробуйте другую почту. Также по всем техническим проблемам вы можете написать в поддержку

    НОВОСТИ

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