PHPMailer on oh­jel­ma­kir­jas­to, joka hoitaa säh­kö­pos­tin lä­het­tä­mi­sen PHP:n kautta. PHP­Mai­le­ria käytetään pää­asias­sa verk­ko­si­vus­to­jen yh­tey­den­ot­to­lo­mak­keis­sa, mutta sitä voidaan käyttää myös yk­si­tyis­ten säh­kö­pos­ti­vies­tien lä­het­tä­mi­seen.

Mikä on PHPMailer?

PHPMailer on PHP:lle tar­koi­tet­tu säh­kö­pos­ti­laa­jen­nus, jota kehittää ja ylläpitää PHP-yhteisö. PHP­Mai­le­ril­la lähetetyt säh­kö­pos­tit päätyvät harvemmin ros­ka­pos­ti­kan­sioon kuin PHP:n si­sään­ra­ken­ne­tul­la pos­ti­toi­min­nol­la lähetetyt. Tämä johtuu siitä, että PHP­Mai­le­ril­la kir­joi­te­tut säh­kö­pos­tit lä­he­te­tään SMTP:n kautta. SMTP tar­koit­taa Simple Mail Transfer Pro­toco­lia, ja sitä käytetään säh­kö­pos­tien siir­tä­mi­seen in­ter­ne­tis­sä. Lisäksi PHPMailer tukee myös HTML-säh­kö­pos­te­ja ja liitteitä, toisin kuin si­sään­ra­ken­net­tu pos­ti­toi­min­to.

Mihin PHP­Mai­le­ria käytetään?

PHP­Mai­le­rin käyttö on hieman työ­lääm­pää ver­rat­tu­na muihin säh­kö­pos­ti­pal­ve­lui­hin tai tie­to­ko­nee­seen asen­net­tui­hin säh­kö­pos­tioh­jel­miin, minkä vuoksi saatat ihmetellä, miksi ihmiset va­lit­se­vat juuri sen. PHP-kehys helpottaa au­to­maat­tis­ten vas­taus­ten luomista, kuten verk­ko­kau­pas­sa tar­vit­ta­via vas­tauk­sia. Lisäksi PHPMailer sopii hyvin verk­ko­si­vus­to­jen yh­tey­den­ot­to­lo­mak­kei­siin.

Mitkä ovat PHP­Mai­le­rin vaa­ti­muk­set?

PHP­Mai­le­rin käyt­tä­mi­seen tarvitaan SMTP-palvelin. Voit valita, käytätkö pal­ve­lun­tar­joa­jan säh­kö­pos­ti­pal­ve­lin­ta vai asennatko oman pal­ve­li­men. PHP-laa­jen­nuk­sen asen­ta­mi­seen on suo­si­tel­ta­vaa käyttää Composer-työkalua (PHP:n pa­ket­tien­hal­lin­taoh­jel­maa).

Vinkki

PHP:n pe­rus­tei­den hal­lit­se­mi­nen on toinen tärkeä edellytys PHP­Mai­le­rin käytölle. Aloit­te­li­joil­le suunnattu PHP-oppaamme auttaa sinua, jos sinulla on vai­keuk­sia PHP:n pe­rus­tei­den kanssa.

PHP­Mai­le­rin asennus vaihe vaiheelta

Vaihe 1: Lataa PHP­Mai­le­rin uusin versio

Lataa PHP­Mai­le­rin uusin versio. Voit tehdä tämän Com­po­se­rin avulla tai ma­nu­aa­li­ses­ti Git­Hu­bis­ta.

Vaih­toeh­to 1: Lataa Com­po­se­rin avulla

Jos olet asentanut Composer-pa­ke­tin­hal­lin­taoh­jel­man, voit käyttää seuraavaa komentoa:

composer require phpmailer/phpmailer
bash

Tärkeää: jos olet asentanut PHP­Mai­le­rin Com­po­se­rin avulla, sinun on si­säl­ly­tet­tä­vä Composer PHP-koodiisi, jotta voit lähettää säh­kö­pos­te­ja.

Seuraavaa koo­di­ri­viä voidaan käyttää:

require_once "vendor/autoload.php";
bash

Avainsana**”require_once”**varmistaa, että Composer ladataan vain kerran. Muussa ta­pauk­ses­sa saatat kohdata oh­jel­moin­ti­vir­hei­tä. Asennus Com­po­se­rin avulla on nyt valmis.

Vaih­toeh­to 2: Lataa suoraan Git­Hu­bis­ta

PHP­Mai­le­rin läh­de­koo­di­tie­dos­tot voi ladata myös ma­nu­aa­li­ses­ti nap­saut­ta­mal­la vastaavan GitHub-arkiston Code-pai­ni­ket­ta ja la­taa­mal­la ZIP-tiedoston. Jos jär­jes­tel­mää­si on asennettu Git, voit vaih­toeh­toi­ses­ti kloonata arkiston ko­men­to­ri­vi­ko­men­nol­la.

Vaihe 2: Pura tiedostot

Jos olet ladannut PHP­Mai­le­rin läh­de­koo­din ma­nu­aa­li­ses­ti, sinun on avattava ZIP-tiedostot. Valitse sijainti, johon haluat asentaa PHP­Mai­le­rin, ja lisää PHPMailer sk­rip­tii­si. Olettaen, että olet purkanut PHPMailer-tiedostot kansioon nimeltä PHPMailer, voit käyttää seuraavia koo­di­ri­ve­jä:

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

Kuinka lähettää säh­kö­pos­te­ja PHP­Mai­le­ril­la vaihe vaiheelta

Vaihe 1: Lisää nimitilat

Varmista, että nimitilat ovat oikein, jotta PHPMailer-kirjastoa voidaan käyttää. Tätä varten tarvitaan Use komentoa, joten koo­dis­sa­si tulisi olla seuraavat rivit:

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

Voit avata yk­sit­täi­set luokat li­sää­mäl­lä niiden nimet viimeisen kaut­ta­vii­van jälkeen.

Vaihe 2: Virheiden ha­vait­se­mi­nen

Vaikka PHPMailer on erittäin luo­tet­ta­va tapa lähettää säh­kö­pos­te­ja, virheitä voi silti esiintyä ajoittain. Li­sää­mäl­lä try-catch-lause säh­kö­pos­tin lä­he­tyspro­ses­siin voit estää sen, että pos­ti­pal­ve­li­me­si ar­ka­luon­toi­set tiedot lä­he­te­tään käyt­tä­jil­le vir­heil­moi­tuk­se­na:

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

Vaihe 3: Kirjaudu sisään SMTP:n kautta

Jotta voit käyttää PHP­Mai­le­ria, sinun on tun­nis­tau­tut­ta­va SMTP:n kautta. Kirjoita säh­kö­pos­ti­pal­ve­li­me­si osoite kyseisen pro­to­kol­lan (joko TLS/SSL tai SMTP) viereen ja lisää port­ti­nu­me­ro sekä käyt­tä­jä­tun­nuk­se­si ja sa­la­sa­na­si. Käyt­tä­mä­si pro­to­kol­la ja portti riippuvat säh­kö­pos­ti­pal­ve­lun­tar­joa­jas­ta­si. Tar­vit­ta­vat pal­ve­lin­tie­dot löydät säh­kö­pos­ti­pal­ve­lun­tar­joa­jan verk­ko­si­vuil­ta.

$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

Sa­laus­me­ne­tel­mä­nä voi käyttää ENCRYPTION_STARTTLS sijaan myös ENCRYPTION_SMTPS. Ase­tuk­sel­la ENCRYPTION_SMTPS yhteys muo­dos­te­taan vain, jos TLS on käytössä. Tämä tar­koit­taa, että yh­tey­den­pi­to pal­ve­li­men kanssa on mah­dol­lis­ta vain, jos palvelin tukee tur­val­li­sen tie­don­siir­ron edel­lyt­tä­miä sa­laus­me­ne­tel­miä. Ase­tuk­sel­la StartTLS yhteys pos­ti­pal­ve­li­meen muo­dos­te­taan ilman salausta. Salaus otetaan käyttöön vasta myöhemmin. Jos TLS-salausta ei voida käyttää, jäljellä oleva tie­don­siir­to tapahtuu sa­laa­mat­to­ma­na.

SMTPS tarjoaa paremman tie­to­tur­van, kun taas StartTLSon yh­teen­so­pi­vam­pi. Yh­teen­so­pi­vuu­ten­sa vuoksi StartTLS on yleensä suo­si­tel­ta­vin vaih­toeh­to.

Vaihe 4: Ilmoita säh­kö­pos­tin vas­taa­not­ta­ja

Nyt voit määrittää säh­kö­pos­ti­vies­ti­si vas­taa­not­ta­jat sk­rip­tis­sä.

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

Vaihe 5: Lisää säh­kö­pos­tin sisältö

Älä unohda säh­kö­pos­ti­vies­ti­si sisältöä. Se koostuu yleensä otsikosta ja tekstistä, jotka voidaan määrittää sekä HTML- että ei-HTML-versioina. On tärkeää huomata, että vanhemmat oh­jel­mis­tot eivät vält­tä­mät­tä tue nykyistä HTML5-stan­dar­dia, joten voi olla hyvä idea laatia säh­kö­pos­ti­vies­ti­si HTML-muodossa.

Voit myös lähettää lii­te­tie­dos­to­ja helposti PHP­Mai­le­rin avulla ad­dAt­tach­ment-funktiota käyt­tä­mäl­lä. PHP­Mai­le­ril­la voi lähettää myös kuvia, musiikkia, asia­kir­jo­ja, videoita ja GIF-tie­dos­to­ja. Voit myös nimetä lii­te­tie­dos­to­si uudelleen va­lin­nai­sel­la toisella pa­ra­met­ril­la, joka vä­li­te­tään funk­tiol­le.

$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

Vaihe 6: Käytä oikeaa merkistöä

On suo­si­tel­ta­vaa ottaa UTF-8 käyttöön PHP­Mai­le­ris­sa, jotta vältetään näyt­tö­vir­heet kä­si­tel­täes­sä muiden kielten ak­sent­ti­merk­ke­jä si­säl­tä­viä kirjaimia, etenkin kun käytetään lii­te­tie­dos­to­ja. Voit tehdä tämän li­sää­mäl­lä seuraavat koo­di­ri­vit PHP-sk­rip­tii­si:

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

Vaihe 7: Lähetä säh­kö­pos­ti

Nyt on aika lähettää säh­kö­pos­ti­vies­ti­si. Tee se seu­raa­val­la ko­men­nol­la:

$mail->send();
php

On suo­si­tel­ta­vaa sijoittaa kaikki lä­he­tys­pyyn­nös­sä näkyvä koodi skriptisi try-lauseen lohkoon, jotta voit havaita mah­dol­li­set virheet.

Koo­die­si­merk­ki säh­kö­pos­tin lä­het­tä­mi­ses­tä PHP­Mai­le­ril­la

Alla on kaikki tar­vit­ta­va koodi, jolla voit lähettää säh­kö­pos­ti­vies­tin, jossa on kuvaliite, va­lit­se­mal­le­si vas­taa­not­ta­jal­le PHP­Mai­le­rin avulla:

<?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
Siirry pää­va­lik­koon