Jak odesílat e-maily pomocí PHPMailer
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).
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/phpmailerbashDů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";bashKlíč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);phpJak 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;phpK 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();
}phpKrok 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;phpMí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');phpKrok 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");phpKrok 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';phpKrok 7: Odeslat e-mail
Nyní je čas odeslat e-mail. K tomu použijte následující příkaz:
$mail->send();phpNejlepší 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