PHPMailer je pro­gram­ska knjižnica, ki omogoča po­ši­lja­nje e-pošte prek jezika PHP. PHPMailer se večinoma uporablja za kontaktne obrazce na spletnih straneh, vendar ga je mogoče uporabiti tudi za po­ši­lja­nje zasebnih e-poštnih sporočil.

Kaj je PHPMailer?

PHPMailer je poštna raz­ši­ri­tev za PHP, ki jo razvija in vzdržuje skupnost PHP. E-poštna sporočila, poslana s PHPMai­ler­jem, se redkeje znajdejo v mapi za neželeno pošto kot tista, poslana z vgrajeno poštno funkcijo PHP. To je zato, ker se e-poštna sporočila, napisana s PHPMai­ler­jem, pošiljajo prek SMTP. SMTP pomeni Simple Mail Transfer Protocol (preprost protokol za prenos pošte) in se uporablja za prenos e-poštnih sporočil prek interneta. Poleg tega PHPMailer podpira tudi HTML-pošto in priloge, za razliko od vgrajene poštne funkcije.

Za kaj se uporablja PHPMailer?

PHPMailer je v pri­mer­ja­vi z drugimi ponudniki e-poštnih storitev ali vgra­je­ni­mi poštnimi programi na vašem ra­ču­nal­ni­ku nekoliko bolj zapleten za uporabo, zato se morda spra­šu­je­te, zakaj se ljudje odločajo zanj. Ta PHP-okvir po­e­no­sta­vlja ustvar­ja­nje av­to­mat­skih odgovorov, kot so tisti, ki so potrebni za spletno trgovino. Poleg tega je PHPMailer primeren tudi za kontaktne obrazce na spletnih straneh.

Kakšne so zahteve za PHPMailer?

Za uporabo PHPMai­ler­ja po­tre­bu­je­te SMTP-strežnik. Sami se odločite, ali boste uporabili poštni strežnik ponudnika ali pa si nastavili lastnega. Raz­ši­ri­tev PHP je najbolje namestiti s pomočjo Com­po­ser­ja (upra­vi­te­lja paketov za PHP).

Tip

Osvojitev osnov PHP je še en pomemben pogoj za uporabo PHPMai­ler­ja. Naš PHP-vodnik za začetnike vam lahko pomaga, če imate težave z osnovami PHP.

Kako korak za korakom namestiti PHPMailer

Korak 1: Prenesite naj­no­vej­šo različico PHPMai­ler­ja

Prenesite naj­no­vej­šo različico PHPMai­ler­ja. To lahko storite s Com­po­ser­jem ali ročno s spletne strani GitHub.

Možnost 1: Prenos s pomočjo Com­po­ser­ja

Če imate nameščen upra­vi­telj paketov Composer, lahko preprosto uporabite ta ukaz:

composer require phpmailer/phpmailer
bash

Pomembno: če ste PHPMailer namestili s Com­po­ser­jem, morate v svojo kodo PHP vključiti Composer, da boste lahko pošiljali e-pošto.

Uporabite lahko naslednjo vrstico kode:

require_once "vendor/autoload.php";
bash

Ključna beseda**»require_once«**za­go­ta­vlja, da se Composer vključi le enkrat. V na­spro­tnem primeru lahko pride do napak v programu. Na­me­sti­tev s pomočjo Com­po­ser­ja je zdaj za­klju­če­na.

Možnost 2: Prenos ne­po­sre­dno iz GitHuba

Izvorne datoteke PHPMai­ler­ja lahko prenesete tudi ročno, tako da v ustreznem re­po­zi­to­ri­ju GitHub kliknete gumb »Code« in prenesete datoteko ZIP. Če imate v sistemu nameščen Git, lahko re­po­zi­to­rij namesto tega klonirate z ukazom v ukazni vrstici.

Korak 2: Raz­pa­ki­raj­te datoteke

Če ste izvorno kodo PHPMai­ler­ja prenesli ročno, morate odpreti datoteke ZIP. Izberite mesto, kamor želite namestiti PHPMailer, in ga vključite v svoj skript. Če ste datoteke PHPMai­ler­ja raz­pa­ki­ra­li v mapo z imenom PHPMailer, lahko uporabite naslednje vrstice kode:

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

Kako pošiljati e-pošto s PHPMai­ler­jem – korak za korakom

Korak 1: Vključite imenske prostore

Preverite, ali so imenski prostori pravilno na­sta­vlje­ni, da boste lahko dostopali do PHPMai­ler­ja. Za to je potrebnih Use stavkov, zato mora vaša koda vsebovati naslednje vrstice:

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

Do po­sa­me­znih razredov lahko dostopate tako, da za zadnjo poševnico vnesete njihova imena.

Korak 2: Od­kri­va­nje napak

Čeprav je PHPMailer zelo zanesljiv način za po­ši­lja­nje e-pošte, se občasno lahko pojavijo napake. Vklju­či­tev stavka »try catch« v postopek po­ši­lja­nja e-pošte bo pre­pre­či­la, da bi se ob­ču­tlji­vi podatki z vašega poštnega strežnika poslali upo­rab­ni­kom v obliki napaknega sporočila:

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

Korak 3: Prijava prek SMTP

Za uporabo PHPMai­ler­ja se morate prijaviti prek protokola SMTP. Vnesite naslov svojega poštnega strežnika ob ustreznem protokolu ( TLS/SSL ali SMTP) ter navedite vrata skupaj z upo­rab­ni­škim imenom in geslom. Protokol in vrata, ki jih upo­ra­blja­te, sta odvisna od vašega ponudnika poštnih storitev. Ustrezne podatke o strežniku najdete na spletni strani ponudnika poštnih storitev.

$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

Namesto ENCRYPTION_STARTTLS lahko kot metodo ši­fri­ra­nja uporabite tudi ENCRYPTION_SMTPS. Pri ENCRYPTION_SMTPS se povezava vzpostavi le, če je TLS aktiven. To pomeni, da je ko­mu­ni­ka­ci­ja s stre­žni­kom mogoča le, če strežnik podpira ukrepe ši­fri­ra­nja, potrebne za varen prenos. Pri StartTLS se povezava s poštnim stre­žni­kom vzpostavi brez ši­fri­ra­nja. Šele nato se uporabi ši­fri­ra­nje. Če ni mogoče uporabiti ši­fri­ra­nja TLS, bo preostala izmenjava podatkov potekala ne­ši­fri­ra­no.

SMTPS za­go­ta­vlja višjo raven varnosti, medtem koje StartTLSbolj združljiv. Zaradi te zdru­žlji­vo­sti je StartTLS na splošno bolj pri­lju­blje­na izbira.

Korak 4: Navedite pre­je­mni­ka e-poštnega sporočila

Zdaj lahko v skriptu določite pre­je­mni­ke svojega e-poštnega sporočila.

// 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

Korak 5: Vnesite vsebino e-poštnega sporočila

Ne pozabite na vsebino e-poštnega sporočila. Ta običajno obsega naslov in besedilo, ki ju lahko pri­pra­vi­te v obliki HTML in v obliki brez HTML. Pomembno je vedeti, da starejša pro­gram­ska oprema morda ne podpira tre­nu­tne­ga standarda HTML5, zato je pri­po­ro­člji­vo, da e-poštno sporočilo obli­ku­je­te v formatu HTML.

S pomočjo funkcije ad­dAt­ta­chment lahko v PHPMai­ler­ju enostavno pošiljate tudi priloge. S PHPMai­ler­jem lahko pošiljate slike, glasbo, dokumente, vi­de­o­po­snet­ke in GIF-datoteke. Priloge lahko pre­i­me­nu­je­te tudi z dodatnim drugim pa­ra­me­trom, ki ga prenesete v funkcijo.

$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

Korak 6: Uporabite pravilno kodiranje znakov

Pri­po­ro­člji­vo je v PHPMai­ler­ju omogočiti podporo za UTF-8, da se pre­pre­či­jo napake pri pri­ka­zo­va­nju pri obdelavi črk z na­gla­sni­mi znaki iz drugih jezikov, še posebej pri uporabi različnih prilog. To lahko storite tako, da v svoj PHP-skript dodate naslednje vrstice kode:

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

7. korak: Pošlji e-pošto

Zdaj je čas, da pošljete e-pošto. Za to uporabite naslednji ukaz:

$mail->send();
php

Najbolje je, da vso kodo, prikazano v zahtevku za po­ši­lja­nje, vstavite v blok izjave try v svojem skriptu, da boste lahko zaznali morebitne napake.

Primer kode za po­ši­lja­nje e-pošte s PHPMai­ler­jem

Spodaj je navedena vsa koda, ki jo po­tre­bu­je­te za po­ši­lja­nje e-poštnega sporočila s priloženo sliko izbranemu pre­je­mni­ku s pomočjo PHPMai­ler­ja:

<?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
Go to Main Menu