PHPMailer je programová knihovna, která reguluje přenos e-mailů prostřednictvím PHP. PHPMailer se používá hlavně pro kontaktní formuláře na webových stránkách, ale lze jej použít i k odesílání soukromých e-mailů.

Co je PHPMailer?

PHPMailer je poštovní rozšíření pro PHP, které vyvíjí a spravuje komunita PHP. E-maily odeslané pomocí PHPMailer mají menší pravděpodobnost, že skončí ve složce se spamem, než e-maily odeslané pomocí vestavěné poštovní funkce PHP. Důvodem je to, že e-maily napsané pomocí PHPMailer jsou odesílány pomocí protokolu SMTP. SMTP je zkratka pro Simple Mail Transfer Protocol (jednoduchý protokol pro přenos pošty) a používá se k přenosu e-mailů přes internet. Na rozdíl od vestavěné poštovní funkce podporuje PHPMailer také e-maily ve formátu HTML a přílohy.

K čemu se PHPMailer používá?

PHPMailer je ve srovnání s jinými e-mailovými poskytovateli nebo integrovanými poštovními programy v počítači poněkud složitější na používání, což může vyvolat otázku, proč se lidé rozhodli jej používat. PHP framework zjednodušuje vytváření automatických odpovědí, například těch, které jsou potřebné pro internetový obchod. PHPMailer je navíc vhodný také pro kontaktní formuláře na webových stránkách.

Jaké jsou požadavky na PHPMailer?

K používání PHPMailer potřebujete SMTP server. Je na vás, zda použijete mailový server od poskytovatele nebo si nastavíte vlastní server. K instalaci PHP rozšíření je nejlepší použít Composer (správce balíčků pro PHP).

Tip

Zvládnutí základů PHP je dalším důležitým předpokladem pro používání PHPMaileru. Náš tutoriál PHP pro začátečníky vám pomůže, pokud máte potíže se základy PHP.

Jak nainstalovat PHPMailer krok za krokem

Krok 1: Stáhněte si aktuální verzi PHPMailer

Stáhněte si nejnovější verzi PHPMailer. Můžete tak učinit pomocí Composeru nebo ručně z GitHubu.

Možnost 1: Stažení pomocí Composeru

Pokud máte nainstalovaný správce balíčků Composer, můžete jednoduše použít tento příkaz:

composer require phpmailer/phpmailer
bash

Důležité: pokud jste nainstalovali PHPMailer pomocí Composeru, musíte do svého PHP kódu zahrnout Composer, abyste mohli odesílat e-maily.

Lze použít následující řádek kódu:

require_once "vendor/autoload.php";
bash

Klíčové slovo**„require_once“**zajišťuje, že Composer bude zahrnut pouze jednou. V opačném případě může dojít k chybám programu. Instalace pomocí Composeru je nyní dokončena.

Možnost 2: Stáhnout přímo z GitHubu

Zdrojové soubory PHPMailer lze také stáhnout ručně kliknutím na tlačítko Code v příslušném úložišti GitHub a stažením souboru ZIP. Pokud máte v systému nainstalován Git, můžete úložiště alternativně naklonovat pomocí příkazu v příkazovém řádku.

Krok 2: Rozbalte soubory

Pokud jste si zdrojový kód PHPMailer stáhl ručně, musíte otevřít soubory ZIP. Vyberte umístění, kam chcete PHPMailer nainstalovat, a zahrňte PHPMailer do svého skriptu. Za předpokladu, že jste soubory PHPMailer rozbalili do složky s názvem PHPMailer, můžete použít následující řádky kódu:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
/*Class for handling exceptions and errors*/
require 'C:/PHPMailer/src/Exception.php';
/*PHPMailer class*/
require 'C:/PHPMailer/src/PHPMailer.php';
/*SMTP class needed to connect to an SMTP server*/.
require 'C:/PHPMailer/src/SMTP.php';
/*When creating a PHPMailer object, pass the parameter ‘true’ to activate exceptions (messages in the event of an error)*/
$email = new PHPMailer(true);
php

Jak posílat e-maily pomocí PHPMailer krok za krokem

Krok 1: Zahrnout jmenné prostory

Zajistěte, aby byly jmenné prostory správné, abyste mohli přistupovat k PHPMailer. K tomu je zapotřebí Use příkazů, takže váš kód by měl obsahovat následující řádky:

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

K jednotlivým třídám se dostanete tak, že za poslední lomítko přidáte jejich názvy.

Krok 2: Zachycení chyb

Ačkoli PHPMailer je velmi spolehlivý způsob odesílání e-mailů, mohou se čas od času vyskytnout chyby. Zahrnutí příkazu try catch do odesílání e-mailů zabrání tomu, aby citlivá data na vašem poštovním serveru byla odeslána uživatelům jako chybová zpráva:

try {
    // Try to create a new instance of PHPMailer class, where exceptions are enabled
    $mail = new PHPMailer (true);
// (...)
} catch (Exception $e) {
        echo "Mailer Error: ".$e->getMessage();
}
php

Krok 3: Ověření pomocí SMTP

Abyste mohli používat PHPMailer, musíte se ověřit pomocí SMTP. Zadejte adresu svého poštovního serveru vedle příslušného protokolu ( TLS/SSL nebo SMTP) a uveďte port spolu s uživatelským jménem a heslem. Protokol a port, které použijete, závisí na vašem poskytovateli poštovních služeb. Příslušné údaje o serveru lze získat na webových stránkách poskytovatele poštovních služeb.

$mail->isSMTP();
$mail->SMTPAuth = true;
// Personal data
$mail->host = "smtp.domain.com";
$mail->Port = 587;
$mail->username = "name.surname@domain.com";
$mail->password = "testpassword4321";
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
php

Místo ENCRYPTION_STARTTLS můžete jako metodu šifrování použít také ENCRYPTION_SMTPS. S ENCRYPTION_SMTPS se připojení naváže pouze v případě, že je aktivní TLS TLS. To znamená, že komunikace se serverem je možná pouze v případě, že server podporuje šifrovací opatření nezbytná pro bezpečný přenos. S StartTLS se připojení k poštovnímu serveru naváže bez šifrování. Šifrování se použije až poté. Pokud není možné použít šifrování TLS, zbývající výměna dat proběhne nešifrovaně.

SMTPS nabízí vyšší úroveň zabezpečení, zatímco StartTLSmá lepší kompatibilitu. Vzhledem ke své kompatibilitě je StartTLS obecně preferovanou volbou.

Krok 4: Uveďte příjemce e-mailu

Nyní můžete ve skriptu určit příjemce vaší e-mailové zprávy.

// Sender
$mail->setFrom('info@example.com', 'name');
// Recipient, the name can also be stated
$mail->addAddress('info@example.com', 'name');
// Copy
$mail->addCC('info@example.com');
// Blind copy
$mail->addBCC('info@example.com', 'name');
php

Krok 5: Přidejte obsah e-mailu

Nezapomeňte na obsah svého e-mailu. Ten se obvykle skládá z předmětu a textu, který lze zadat ve formátu HTML i v jiném formátu. Je důležité si uvědomit, že starší software nemusí být schopen zpracovat aktuální standard HTML5, proto je dobré vytvořit e-mail pomocí HTML.

Pomocí funkce addAttachment můžete také snadno odesílat přílohy pomocí PHPMailer. Pomocí PHPMailer lze odesílat také obrázky, hudbu, dokumenty, videa a GIFy. Přílohy můžete také přejmenovat pomocí volitelného druhého parametru, který se přenáší do funkce.

$mail->isHTML(true);
// Subject
$mail->Subject = 'The subject of your mail';
// HTML content
$mail->Body = 'The mail text as HTML content. <b>bold</b> elements are allowed.';
$mail->AltBody = 'The text as a simple text element';
// Add attachment
$mail-> addAttachment("/home/user/Desktop/sampleimage.png", "sampleimage.png");
php

Krok 6: Použijte správné kódování znaků

Je dobré povolit UTF-8 v PHPMailer, aby se zabránilo chybám při zobrazování při zpracování znaků s diakritikou z jiných jazyků, zejména při použití různých příloh. Toho lze dosáhnout přidáním následujících řádků kódu do skriptu PHP:

$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
php

Krok 7: Odeslat e-mail

Nyní je čas odeslat e-mail. K tomu použijte následující příkaz:

$mail->send();
php

Nejlepší je umístit veškerý kód zobrazený v požadavku odeslání do bloku příkazu try ve skriptu, abyste mohli zachytit případné chyby.

Příklad kódu pro odeslání e-mailu pomocí PHPMailer

Níže je uveden celý kód, který potřebujete k odeslání e-mailu s přílohou obrázku příjemci podle vašeho výběru pomocí PHPMailer:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once "vendor/autoload.php";
// Enable or disable exceptions via variable
$debug = true;
try {
    // Create instance of PHPMailer class
    $mail = new PHPMailer($debug);
     if ($debug) {
         // issue a detailed log
        $mail->SMTPDebug = SMTP::DEBUG_SERVER; 
    }
    // Authentication with SMTP
    $mail-> isSMTP();
    $mail->SMTPAuth = true;
    // Login
    $mail->Host = "smtp.domain.com";
    $mail->Port = 587;
    $mail->Username = "name.surname@domain.com";
    $mail->Password = "testpassword4321";
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->setFrom('info@example.com', 'name');
    $mail->addAddress('info@example.com', 'name');
    $mail-> addAttachment("/home/user/Desktop/sampleimage.png", "sampleimage.png");
    $mail->CharSet = 'UTF-8';
    $mail->Encoding = 'base64';
    $mail->isHTML(true);
    $mail->Subject = 'The subject of your mail';
    $mail->Body = 'The mail text in HTML content. <b>bold</b> elements are allowed.';
    $mail->AltBody = 'The text as a simple text element';
    $mail->send();
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: ".$e->getMessage();
}
php
Přejít do hlavního menu