Как да изпратите имейл с помощта на функцията PHP mail().
⚡ Умно обобщение
PHP mail е вградената функция, която изпраща имейл директно от PHP скрипт, използвайки SMTP настройките на сървъра. Това ръководство обхваща синтаксиса и параметрите на mail(), конфигурирането на SMTP в php.ini, дезинфекцирането на потребителския вход с filter_var, изпращането на защитена поща и използването на PHP.Mailза надеждна доставка.

Какво е PHP поща?
PHP mail е вградената PHP функция, която се използва за изпращане на имейли от PHP скриптове.
Функцията за поща приема следните параметри:
- Тема:
- Съобщение
- Имейл адреси с CC или BCC
Защо и кога да използвате PHP поща
Функцията за поща е полезна в много ситуации:
- Това е рентабилен начин за уведомяване на потребителите за важни събития.
- Позволете на потребителите да се свързват с вас по имейл, като предоставят формуляр за връзка с нас на уебсайта, който изпраща предоставеното съдържание по имейл.
- Разработчиците могат да го използват, за да получават системни грешки по имейл.
- Можете да го използвате, за да изпратите имейл до вашите абонати за бюлетин.
- Можете да го използвате, за да изпращате връзки за нулиране на парола на потребители, които са забравили паролите си.
- Можете да го използвате, за да изпращате имейли с линкове за активиране и потвърждение. Това е полезно при регистриране на потребители и проверка на техните имейл адреси.
Изпращане на поща чрез PHP
Функцията за поща в PHP има следния основен синтаксис.
<?php mail($to_email_address,$subject,$message,[$headers],[$parameters]); ?>
ТУК,
- “$to_email_address” е имейл адресът на получателя на имейла
- “$subject” е темата на имейла
- “$message” е съобщението, което трябва да бъде изпратено.
- „[$headers]“ е по избор; може да се използва за включване на информация като CC и BCC.
- CC е акроним за „carbon copy“ (копие). Използва се, когато искате да изпратите копие на заинтересовано лице, т.е. имейл с жалба, изпратен до компания, може да бъде изпратен като CC и до борда за жалби.
- BCC е акроним за скрито копие. Подобно е на CC, но имейл адресите, включени в секцията BCC, не се показват на останалите получатели.
Прост Mail Transmission Протокол (SMTP)
PHP пощата използва Simple Mail Transmission Протокол (SMTP) за изпращане на поща.
На хостван сървър, SMTP настройките вече биха били зададени.
Настройките за SMTP поща могат да бъдат конфигурирани от файла „php.ini“ в инсталационната папка на PHP.
За да конфигурирате SMTP настройките на вашия локален хост, ако използвате XAMPP на Windows, намерете файла „php.ini“ в директорията „C:\xampp\php“.
- Отворете го с Notepad или друг текстов редактор. В този пример ще използваме Notepad. Кликнете върху менюто Edit.
- Кликнете върху менюто „Намери…“
- Ще се появи диалоговият прозорец „Търсене“
- Кликнете върху бутона „Намери следващото“
Намерете записите под [function mail]. Редовете по подразбиране обикновено изглеждат така:
- ; SMTP = локален хост
- ; smtp_port = 25
Премахнете точката и запетаята преди SMTP и smtp_port и задайте SMTP на вашия SMTP сървър и порта към вашия SMTP порт. Настройките ви трябва да изглеждат по следния начин:
- SMTP = smtp.example.com
- smtp_port = 25
Забележка: SMTP настройките могат да бъдат получени от вашия доставчик на уеб хостинг. Ако сървърът изисква удостоверяване, добавете следните редове:
- auth_username = example_username@example.com
- auth_password = примерна_парола
Запазете новите промени и рестартирайте Apache сървър.
PHP Mail Пример
Нека сега разгледаме пример, който изпраща обикновен имейл.
<?php $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; mail($to_email,$subject,$message,$headers); ?>
Изход:
Забележка: горният пример приема само 4-те задължителни параметъра. Трябва да замените горния фиктивен имейл адрес с истински имейл адрес.
Дезинфекциране на въведените от потребителя имейли
Горният пример използва твърдо кодирани стойности в изходния код за имейл адреса и други подробности за простота.
Да предположим, че трябва да създадете формуляр за контакт, където потребителите попълват данните и след това ги изпращат.
- Потребителите могат случайно или умишлено да инжектират код в заглавките, което може да доведе до изпращане на спам имейли.
- За да защитите системата си от подобни атаки, можете да създадете персонализирана функция, която дезинфекцира и валидира стойностите преди изпращането на имейла.
Нека създадем персонализирана функция, която валидира и дезинфекцира имейл адреса, използвайки вградената функция filter_var. Функцията filter_var се използва за дезинфекция и валидиране на потребителските входни данни.
Той има следния основен синтаксис.
<?php filter_var($field, SANITIZATION_TYPE); ?>
ТУК,
- „filter_var(…)“ е функцията за валидиране и дезинфекция
- “$field” е стойността на полето, което трябва да се филтрира.
- „ТИП_НА_ДЕЗАГНУВАНЕ“ е видът дезинфекция, която ще се извърши на терена, като например:
- FILTER_VALIDATE_EMAIL – връща true за валидни имейл адреси и false за невалидни имейл адреси.
- FILTER_SANITIZE_EMAIL – премахва невалидни символи от имейл адреси, така че адрес с разпръснати символи се редуцира до info@domain.com.
- ФИЛТЪР_ДЕЗАГНОСТИРАНЕ_URL – премахва невалидни символи от URLс, оставяйки чист адрес, като например https://www.example.com.
- FILTER_SANITIZE_STRING – премахва тагове от низови стойности, така че am bold става am bold. Обърнете внимание, че този филтър е остарял в PHP 8.1; използвайте htmlspecialchars() вместо това.
Кодът по-долу използва персонализирана функция за изпращане на защитена поща.
<?php function sanitize_my_email($field) { $field = filter_var($field, FILTER_SANITIZE_EMAIL); if (filter_var($field, FILTER_VALIDATE_EMAIL)) { return true; } else { return false; } } $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; // check if the email address is invalid $secure_check = sanitize_my_email($to_email); if ($secure_check == false) { echo "Invalid input"; } else { // send email mail($to_email, $subject, $message, $headers); echo "This email is sent using PHP Mail"; } ?>
Изход:
Закрепете Mail
Имейлите могат да бъдат прихванати по време на предаване от нежелани получатели.
Това може да разкрие съдържанието на имейла на нежелани получатели.
Защитената поща решава този проблем чрез transmitизпращане на имейли през криптирана връзка, използваща SSL или TLS, например SMTP през SSL на порт 465 или STARTTLS на порт 587.
Криптирането разбърква съобщението преди изпращането му, така че само пощенският сървър на целевия получател може да го прочете.
PHPMailъъъ: По-добра алтернатива на mail()
За реални приложения, повечето разработчици използват PHPMailer библиотека вместо функцията mail(). PHPMailer се удостоверява с външен SMTP сървър, което значително подобрява доставяемостта и прави прикачените файлове и HTML имейлите лесни.
Инсталирайте го с Composer, след което изпращайте имейли чрез удостоверена, криптирана SMTP връзка, както е показано по-долу.
<?php use PHPMailer\PHPMailer\PHPMailer; require 'vendor/autoload.php'; $mail = new PHPMailer(true); $mail->isSMTP(); $mail->Host = 'smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'user@example.com'; $mail->Password = 'secret'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom('noreply@example.com', 'My App'); $mail->addAddress('name@example.com'); $mail->Subject = 'Testing PHPMailer'; $mail->Body = 'This email is sent using PHPMailer over SMTP'; $mail->send(); ?>
В сравнение с mail(), PHPMailer ви предоставя SMTP удостоверяване, вградено криптиране, поддръжка на прикачени файлове и по-ясна обработка на грешки, поради което е препоръчителният избор за производствена електронна поща.






