Wysyłanie wiadomości e-mail w PHP

W tym tutorialu dowiesz się, jak wysłać wiadomość e-mail z poziomu PHP. Możemy użyć dwóch metod: wbudowanej funkcji mail() lub popularnej klasy PHPMailer. Przejdźmy krok po kroku.

1. Formularz do wysyłania e-maili

Na początek, tworzymy prosty formularz, który pozwala użytkownikowi wprowadzić dane do wysyłki wiadomości.












2. Przykład 1: Funkcja mail()

Funkcja mail() jest wbudowaną funkcją PHP, która pozwala na wysyłanie e-maili. Oto przykładowy kod, który wysyła wiadomość e-mail bez potrzeby używania żadnych dodatkowych bibliotek:

Po przesłaniu formularza, PHP wykona funkcję mail(), która wysyła wiadomość e-mail do podanego odbiorcy.


<?php
// Funkcja wysyłania maila
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $recipient = $_POST['recipient'];
    $subject = $_POST['subject'];
    $message = $_POST['message'];

    // Wysyłanie maila
    $headers = 'From: webmaster@example.com' . "\r\n" .
               'Reply-To: webmaster@example.com' . "\r\n" .
               'X-Mailer: PHP/' . phpversion();

    if (mail($recipient, $subject, $message, $headers)) {
        echo "Wiadomość została wysłana!";
    } else {
        echo "Wystąpił problem podczas wysyłania wiadomości.";
    }
}
?>

        

3. Przykład 2: PHPMailer

PHPMailer to rozszerzenie PHP, które pozwala na wysyłanie bardziej zaawansowanych wiadomości, takich jak HTML z załącznikami. Poniżej znajduje się przykład użycia PHPMailer:

W tym przypadku, przed użyciem PHPMailer, musisz go zainstalować (przez Composer), aby działał poprawnie. PHPMailer obsługuje serwery SMTP, umożliwiając bezpieczniejsze wysyłanie wiadomości e-mail.


<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $recipient = $_POST['recipient'];
    $subject = $_POST['subject'];
    $message = $_POST['message'];

    $mail = new PHPMailer(true);
    try {
        $mail->isSMTP();
        $mail->Host = 'smtp.example.com'; // Zastąp odpowiednim serwerem SMTP
        $mail->SMTPAuth = true;
        $mail->Username = 'your_email@example.com'; // Zastąp odpowiednim adresem
        $mail->Password = 'your_password'; // Zastąp odpowiednim hasłem
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
        $mail->Port = 587;

        $mail->setFrom('your_email@example.com', 'Webmaster');
        $mail->addAddress($recipient);

        $mail->isHTML(true);
        $mail->Subject = $subject;
        $mail->Body = $message;

        $mail->send();
        echo "Wiadomość została wysłana!";
    } catch (Exception $e) {
        echo "Wystąpił problem podczas wysyłania wiadomości: {$mail->ErrorInfo}";
    }
}
?>

        

4. Co warto wiedzieć?

Funkcja mail() jest bardzo prosta, ale ma ograniczenia, takie jak brak zaawansowanej obsługi formatów (np. HTML), brak obsługi załączników i większych plików, czy też możliwość trafienia do folderu spam w niektórych przypadkach.

PHPMailer to potężniejsze narzędzie, które umożliwia wysyłanie wiadomości HTML, dodawanie załączników, lepszą obsługę serwerów SMTP oraz inne zaawansowane funkcje.

5. Ćwiczenie:

Twoje zadanie to: przepisz oba kody (zarówno funkcję mail(), jak i PHPMailer) w swoim edytorze PHP i sprawdź, jak różnią się oba rozwiązania. Użyj formularza do wysyłania testowych wiadomości i sprawdź, która metoda działa najlepiej w Twoim przypadku!