Mnoho vývojárov v jazyku PHP potrebuje posielať e-maily zo svojho kódu. Jediná PHP funkcia, ktorá toto podporuje, je mail()
. Avšak táto funkcia neposkytuje žiadnu pomoc pri využívaní populárnych funkcií, ako je šifrovanie, overovanie, HTML správy a prílohy. Tiež správne formátovanie e-mailov je až prekvapujúco zložité. Existuje mnoho prekrývajúcich sa RFC, ktoré vyžadujú prísne dodržiavanie hrozných a komplikovaných pravidiel formátovania a kódovania - väčšina kódu, ktorý nájdete online a priamo používa funkciu mail()
, je jednoducho nesprávna.
Najväčším problémom pri posielaní mailu cez funkciu mail() je nemožnosť SMTP autorizácie. V súčasnosti je už prakticky nevyhnutné, aby e-mailová správa bola odoslaná cez korektne nastavený e-mailový server, a aby bol jednoznačne identifikovaný a overený jej odosielateľ. V opačnom prípade takúto správu väčšina príjemcov odmietne prijať. Riešenie tohto problému prináša trieda PHPMailer.
Ak používate starú verziu PHP 5.2 - 5.6, kompatibilnú verziu triedy si môžete stiahnuť z tohto odkazu:
https://setup.sk/download/PHPMailer_PHP_5.3-master.zip
Ak používate novšiu verziu PHP 7.0 - 8.3, kompatibilnú verziu triedy si môžete stiahnuť z tohto odkazu:
https://setup.sk/download/PHPMailer-master.zip
Najdôležitejšie vlastnosti tejto triedy:
- Pravdepodobne najpopulárnejší kód na odosielanie e-mailov v jazyku PHP na svete!
- Používaný mnohými open-source projektmi: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! a mnohými ďalšími
- Integrovaná podpora pre SMTP - posielajte bez lokálneho e-mailového servera
- Posielajte e-maily s viacerými adresátmi To, CC, BCC a Reply-to
- Multipart/alternative e-maily pre e-mailové klienty, ktoré nepodporujú HTML e-maily
- Pridávajte prílohy, vrátane inline
- Podpora pre obsah v UTF-8 a kódovania 8bit, base64, binárne a quoted-printable
- SMTP cez SSL a SMTP+STARTTLS transporty s autentifikáciou pomocou mechanizmov LOGIN, PLAIN, CRAM-MD5 a XOAUTH2
- Automatická validácia e-mailových adries
- Ochrana proti útokom na vkladanie hlavičiek
- Chybové správy vo viac ako 50 jazykoch!
- Podpora pre podpis DKIM a S/MIME
Skopírujte obsah zložky PHPMailer do jedného z adresárov uvedených v konfigurácii vášho PHP v include_path
a manuálne načítajte každý súbor triedy:
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'path/to/PHPMailer/src/Exception.php'; require 'path/to/PHPMailer/src/PHPMailer.php'; require 'path/to/PHPMailer/src/SMTP.php';
Tu je jednoduchý príklad použitia:
<?php // Naimportujte PHPMailer triedy do globálneho menného priestoru // Toto musí byť na začiatku skriptu, nie vnútri funkcie use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'path/to/PHPMailer/src/Exception.php'; // Zmeňte cestu k skriptu podľa toho, kam ste ho nakopírovali require 'path/to/PHPMailer/src/PHPMailer.php'; // Zmeňte cestu k skriptu podľa toho, kam ste ho nakopírovali require 'path/to/PHPMailer/src/SMTP.php'; // Zmeňte cestu k skriptu podľa toho, kam ste ho nakopírovali // Vytvorenie inštancie, `true` povoľuje výnimky $mail = new PHPMailer(true); try { //Server settings $mail->isSMTP(); // Pošli mail použitím SMTP $mail->Host = 'mail.webhouse.sk'; // SMTP server spoločnosti WebHouse $mail->SMTPAuth = true; // Použi SMTP autentifikáciu $mail->Username = 'from@example.com'; // SMTP meno - vaša e-mailová adresa odosielateľa, slúžiaca zároveň na autentifikáciu $mail->Password = 'secret'; // SMTP heslo - heslo do schránky vyššie $mail->SMTPSecure = false; // `PHPMailer::ENCRYPTION_STARTTLS` pre TLS kryptovanie; `PHPMailer::ENCRYPTION_SMTPS` alternatívne pre port 465 $mail->SMTPAutoTLS = false; // Pri použití kryptovania zakomentovať $mail->Port = 587; // TCP port, použite 465 pre `PHPMailer::ENCRYPTION_SMTPS` vyššie //Recipients $mail->setFrom('from@example.com', 'Janko Hraško'); // Vaša e-mailová adresa odosielateľa, voliteľne aj vaše meno $mail->addAddress('joe@example.net', 'Joe User'); // Príjemcu mailu, voliteľne aj jeho meno $mail->addAddress('ellen@example.com'); // Meno príjemcu nemusí byť zadané $mail->addReplyTo('info@example.com', 'Information'); // Kam poslať odpoveď (voliteľné) $mail->addCC('cc@example.com'); // Kam poslať kópiu mailu (voliteľné) $mail->addBCC('bcc@example.com'); // Kam poslať skrytú kópiu mailu (voliteľné) // Attachments $mail->addAttachment('./subory/priloha.tar.gz'); // Pridá prílohu $mail->addAttachment('./tmp/obrazok.jpg', 'novy.jpg'); // Názov súboru je voliteľný // Content $mail->isHTML(true); // Nastav formát emailu na HTML $mail->Subject = 'Toto je predmet mailu'; $mail->Body = 'Toto je telo HTML časti mailu <b>tučným písmom!</b>'; $mail->AltBody = 'Toto je telo v obyčajnom texte pre mailové programy nepodporujúce HTML formátovanie'; $mail->send(); echo 'Správa bola odoslaná'; } catch (Exception $e) { echo "Správa nemohla byť odoslaná. Chyba: {$mail->ErrorInfo}"; } ?>