Wysyłanie e‑maili w PHP — mail() i PHPMailer

Formularz kontaktowy oraz dwa sposoby wysyłki: prosta funkcja mail() i biblioteka PHPMailer do pracy z SMTP.

Co przećwiczysz?

  • tworzenie prostego formularza kontaktowego;
  • wysyłanie maila funkcją mail() (tekstowa wiadomość);
  • wykorzystanie biblioteki PHPMailer do wysyłki SMTP;
  • różnice między mail() a PHPMailer (możliwości, ograniczenia).
Poziom: INF.03 / technik informatyk
Temat: PHP + e‑mail / SMTP

1. Formularz do wysyłania e‑maili

Uzupełnij poniższy formularz, aby wysłać testową wiadomość. W pliku send_email.php zdecydujesz, czy użyć funkcji mail(), czy PHPMailer.

2. Przykład: funkcja mail()

Prosty sposób wysyłania e‑maila to wbudowana w PHP funkcja mail(). Działa, jeśli serwer ma poprawnie skonfigurowany system pocztowy.

<?php
// send_email.php — wersja z mail()

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

    // Prosta walidacja
    if (!filter_var($recipient, FILTER_VALIDATE_EMAIL)) {
        echo "Nieprawidłowy adres e-mail odbiorcy.";
        exit;
    }

    // Nagłówki (nadawca, odpowiedź)
    $headers  = "From: webmaster@example.com\r\n";
    $headers .= "Reply-To: webmaster@example.com\r\n";
    $headers .= "X-Mailer: PHP/" . phpversion();

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

3. Przykład: PHPMailer (SMTP)

PHPMailer pozwala wysyłać wiadomości przez serwer SMTP (np. Gmail, hosting), wspiera HTML, załączniki i lepszą obsługę błędów. Wymaga wcześniejszej instalacji (np. Composerem).

<?php
// send_email.php — uproszczona wersja z PHPMailer
// composer require phpmailer/phpmailer

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

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

    if (!filter_var($recipient, FILTER_VALIDATE_EMAIL)) {
        echo "Nieprawidłowy adres e-mail odbiorcy.";
        exit;
    }

    $mail = new PHPMailer(true);

    try {
        // Ustawienia SMTP (dostosuj do swojego serwera)
        $mail->isSMTP();
        $mail->Host       = 'smtp.example.com';   // serwer SMTP
        $mail->SMTPAuth   = true;
        $mail->Username   = 'twoj_email@example.com';
        $mail->Password   = 'twoje_haslo';
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
        $mail->Port       = 587;

        // Nadawca i odbiorca
        $mail->setFrom('twoj_email@example.com', 'Webmaster');
        $mail->addAddress($recipient);

        // Treść wiadomości
        $mail->isHTML(false);          // zwykły tekst
        $mail->Subject = $subject;
        $mail->Body    = $message;

        $mail->send();
        echo "Wiadomość została wysłana (PHPMailer).";
    } catch (Exception $e) {
        echo "Błąd wysyłania (PHPMailer): {$mail->ErrorInfo}";
    }
}
?>
        

4. Kiedy użyć mail(), a kiedy PHPMailer?

5. Zadanie dla Ciebie