Как на PHP отправить данные формы на почту

Короткий ответ: создайте HTML-форму, примите данные через $_POST, проверьте поля, соберите текст письма и отправьте его через mail() или SMTP-библиотеку. Для реального сайта надежнее использовать SMTP, потому что обычная mail() часто блокируется или попадает в спам

Запрос часто формулируют как “на мой номер телефона/почту”. На телефон PHP сам по себе SMS не отправляет: для этого нужен SMS-шлюз, Telegram-бот, WhatsApp API или сервис уведомлений. Почта проще: почти каждый хостинг поддерживает отправку email, но правила зависят от конкретного провайдера

Простая HTML-форма

Файл contact.php

<?php
$message = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = trim($_POST['name'] ?? '');
    $email = trim($_POST['email'] ?? '');
    $text = trim($_POST['text'] ?? '');

    if ($name === '' || $email === '' || $text === '') {
        $message = 'Заполните все поля';
    } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $message = 'Введите корректный email';
    } else {
        $to = 'you@example.com';
        $subject = 'Сообщение с сайта';
        $body = "Имя: {$name}\nEmail: {$email}\n\nСообщение:\n{$text}";
        $headers = "From: no-reply@example.com\r\n";
        $headers .= "Reply-To: {$email}\r\n";

        if (mail($to, $subject, $body, $headers)) {
            $message = 'Сообщение отправлено';
        } else {
            $message = 'Не удалось отправить сообщение';
        }
    }
}
?>

<!doctype html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <title>Форма обратной связи</title>
</head>
<body>
    <h1>Написать нам</h1>

    <?php if ($message !== ''): ?>
        <p><?php echo htmlspecialchars($message); ?></p>
    <?php endif; ?>

    <form method="post">
        <input name="name" placeholder="Ваше имя">
        <input name="email" placeholder="Ваш email">
        <textarea name="text" placeholder="Сообщение"></textarea>
        <button type="submit">Отправить</button>
    </form>
</body>
</html>

Замените you@example.com на вашу почту, а no-reply@example.com на адрес вашего домена. На многих хостингах письмо с чужого домена в From может не отправиться или попасть в спам

Как запустить и проверить

Локально форма может не отправлять письма, потому что на компьютере обычно не настроен почтовый сервер. Проверять отправку лучше на хостинге или через SMTP-сервис

Для локальной проверки формы можно сначала временно заменить mail() на запись в файл

file_put_contents('messages.txt', $body . "\n---\n", FILE_APPEND);

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

Почему mail может не работать

Функция mail() передает письмо почтовой системе сервера. Если сервер не настроен, письмо не уйдет. Если домен не имеет SPF/DKIM/DMARC, письмо может попасть в спам. Если в From указан чужой адрес, хостинг может заблокировать отправку

Поэтому для реального сайта лучше использовать SMTP: например, почту домена, SendGrid, Mailgun, UniSender, Яндекс 360 или другой сервис, который вы реально используете

SMTP-вариант в реальном проекте

Обычно SMTP подключают через библиотеку PHPMailer или Symfony Mailer. Логика такая: вы не надеетесь на серверную mail(), а явно указываете SMTP-хост, порт, логин, пароль и отправителя

Примерный смысл настроек

$mail->isSMTP();
$mail->Host = 'smtp.example.com';
$mail->SMTPAuth = true;
$mail->Username = 'no-reply@example.com';
$mail->Password = 'password';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;

Пароль нельзя хранить в публичном репозитории. Для нормального проекта вынесите его в переменные окружения или закрытый конфиг

Как отправить данные на телефон

Если нужен именно телефон, есть несколько путей

  • отправлять письмо на email, который вы читаете с телефона
  • отправлять уведомление в Telegram через бота
  • использовать SMS API
  • использовать CRM или сервис заявок, который сам шлет уведомления

PHP здесь будет только отправителем запроса. Сам “номер телефона” без внешнего сервиса SMS не принимает обычные PHP-сообщения

Мини-практика

Сначала сделайте форму, которая пишет заявки в messages.txt. После этого добавьте отправку на почту. Так вы сможете понять, где проблема: в форме, в обработке POST или именно в почтовой доставке

Дополнительное упражнение: добавьте поле phone и отправляйте его в тексте письма, но не пытайтесь отправлять SMS без отдельного сервиса

Частые ошибки

Проверяют mail локально и думают, что код сломан На локальном компьютере почтовая отправка часто не настроена. Проверяйте на хостинге или через SMTP

Не валидируют email Используйте filter_var($email, FILTER_VALIDATE_EMAIL), иначе в письмо попадет мусор

Ставят email пользователя в From Лучше использовать адрес вашего домена в From, а email пользователя указывать в Reply-To

Показывают данные формы без экранирования Если выводите введенные данные на страницу, используйте htmlspecialchars()

Что почитать дальше по PHP

Если нужен общий маршрут по теме, откройте рубрику PHP. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x