SetupSlovenčina
Úvod > E-mail > PHP trieda PHPMailer na odosielanie e-mailov s SMTP autorizáciou

PHP trieda PHPMailer na odosielanie e-mailov s SMTP autorizáciou

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.

Dôležité upozornenie: Podpora posielania mailov bez autentifikácie bola zrušená. Každý mail musí byť SMTP autentifikovaný. Ak používate PHP funkciu mail(), prerobte si prosím svoje skripty a na odosielanie e-mailov používajte PHPMailer alebo inú vhodnú knižnicu.

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}";
}
?>