PHPMailer er et pro­gram­bi­bli­o­tek, der styrer e-mail-over­før­sel via PHP. PHPMailer bruges ho­ved­sa­ge­ligt til kon­takt­for­mu­la­rer på hjem­mesi­der, men kan også bruges til at sende private e-mails.

Hvad er PHPMailer?

PHPMailer er en e-mail-udvidelse til PHP, der udvikles og ved­li­ge­hol­des af PHP-fæl­les­ska­bet. E-mails sendt med PHPMailer ender sjældnere i spam-mappen end dem, der sendes med den ind­byg­ge­de mail-funktion i PHP. Det skyldes, at e-mails skrevet med PHPMailer sendes via SMTP. SMTP står for Simple Mail Transfer Protocol og bruges til at overføre e-mails via in­ter­net­tet. Derudover un­der­støt­ter PHPMailer også HTML-e-mails og ved­hæf­te­de filer, i mod­sæt­ning til den ind­byg­ge­de mail-funktion.

Hvad bruges PHPMailer til?

PHPMailer er lidt mere be­svær­ligt at bruge sam­men­lig­net med andre e-mail-udbydere eller in­te­gre­re­de e-mail-pro­gram­mer på din computer, hvilket måske får dig til at undre dig over, hvorfor folk vælger at bruge det. PHP-ram­me­vær­ket gør det nemmere at oprette au­to­ma­ti­ske svar, som f.eks. dem, der er nød­ven­di­ge i en webshop. Derudover er PHPMailer også velegnet til kon­takt­for­mu­la­rer på hjem­mesi­der.

Hvad er kravene til PHPMailer?

Du skal bruge en SMTP-server for at kunne bruge PHPMailer. Det er op til dig, om du vil bruge en mail­ser­ver fra en udbyder eller selv opsætte en server. Det er bedst at bruge Composer (en pak­ke­hånd­te­ring til PHP) til at in­stal­le­re PHP-ud­vi­del­sen.

Tip

At mestre grund­læg­gen­de PHP er en anden vigtig for­ud­sæt­ning for at kunne bruge PHPMailer. Vores PHP-vej­led­ning for begyndere kan hjælpe dig, hvis du har problemer med de grund­læg­gen­de elementer i PHP.

Sådan in­stal­le­res PHPMailer trin for trin

Trin 1: Download den aktuelle version af PHPMailer

Download den nyeste version af PHPMailer. Du kan gøre det via Composer eller manuelt fra GitHub.

Mulighed 1: Download via Composer

Hvis du har in­stal­le­ret pak­ke­hånd­te­rin­gen Composer, kan du blot bruge denne kommando:

composer require phpmailer/phpmailer
bash

Vigtigt: Hvis du har in­stal­le­ret PHPMailer via Composer, skal du indsætte Composer i din PHP-kode for at kunne sende e-mails.

Følgende kodelinje kan bruges:

require_once "vendor/autoload.php";
bash

Nøg­le­or­det**»require_once«**sikrer, at Composer kun indlæses én gang. Ellers kan der opstå pro­gram­fejl. In­stal­la­tio­nen via Composer er nu afsluttet.

Mulighed 2: Download direkte fra GitHub

PHPMailer-kil­de­fi­ler­ne kan også down­lo­a­des manuelt ved at klikke på knappen »Code« i det på­gæl­den­de GitHub-repo­si­tory og downloade ZIP-filen. Hvis Git er in­stal­le­ret på din computer, kan du i stedet klone repo­si­tory­et ved hjælp af en kom­man­do­linje­kom­man­do.

Trin 2: Pak filerne ud

Hvis du har down­lo­a­det PHP­Mai­lers kildekode manuelt, skal du pakke ZIP-filerne ud. Vælg den mappe, hvor du vil in­stal­le­re PHPMailer, og indsæt PHPMailer i dit script. Hvis du har pakket PHPMailer-filerne ud i en mappe ved navn PHPMailer, kan du bruge følgende ko­de­linjer:

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

Sådan sender du e-mails med PHPMailer trin for trin

Trin 1: Indsæt nav­ne­om­rå­der

Sørg for, at nav­ne­om­rå­der­ne er korrekte, så du kan få adgang til PHPMailer. Der kræves Use sætninger til dette, så din kode skal indeholde følgende linjer:

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

Du kan få adgang til de enkelte klasser ved at angive navnene efter den sidste skråstreg.

Trin 2: Find fejlene

Selvom PHPMailer er en meget pålidelig måde at sende e-mails på, kan der fra tid til anden opstå fejl. Ved at indsætte en try-catch-sætning i en e-mail-ud­sen­del­se undgår du, at følsomme data fra din mail­ser­ver sendes til brugerne som en fejl­med­del­el­se:

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

Trin 3: Log ind via SMTP

Du skal godkende dig selv via SMTP for at kunne bruge PHPMailer. Indtast adressen på din mail­ser­ver ved siden af det relevante protokol (enten TLS/SSL eller SMTP) og angiv po­rt­num­me­ret sammen med dit bru­ger­navn og din ad­gangs­ko­de. Hvilken protokol og hvilket po­rt­num­mer du skal bruge, afhænger af din mail­ud­by­der. De relevante ser­vero­p­lys­nin­ger kan findes på mail­ud­by­de­rens hjem­mesi­de.

$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

I stedet for ENCRYPTION_STARTTLS kan du også vælge ENCRYPTION_SMTPS som kryp­te­rings­me­to­de. Med ENCRYPTION_SMTPS oprettes der kun en for­bin­del­se, hvis TLS er aktiveret. Det betyder, at kom­mu­ni­ka­tion med en server kun er mulig, hvis serveren un­der­støt­ter de kryp­te­rings­for­an­stalt­nin­ger, der kræves for sikker over­før­sel. Med StartTLS oprettes for­bin­del­sen til mail­ser­ve­ren uden kryp­te­ring. Først derefter anvendes kryp­te­ring. Hvis det ikke er muligt at anvende TLS-kryp­te­ring, vil den re­ste­ren­de da­ta­ud­veks­ling foregå ukryp­te­ret.

SMTPS tilbyder et højere sik­ker­heds­ni­veau, mens StartTLShar bedre kom­pa­ti­bi­li­tet. På grund af sin kom­pa­ti­bi­li­tet er StartTLS generelt det fo­re­truk­ne valg.

Trin 4: Angiv mod­ta­ge­ren af e-mailen

Nu kan du angive mod­ta­ger­ne af din e-mail i scriptet.

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

Trin 5: Indsæt indholdet af e-mailen

Glem ikke indholdet af din e-mail. Det består som regel af en emnelinje og en tekst, som kan angives i både HTML- og ikke-HTML-versioner. Det er vigtigt at bemærke, at ældre software muligvis ikke kan håndtere den aktuelle HTML5-standard, så det kan være en god idé at oprette din e-mail i HTML.

Du kan også nemt sende ved­hæf­te­de filer med PHPMailer ved hjælp af funk­tio­nen ad­dAt­ta­ch­ment. Billeder, musik, do­ku­men­ter, videoer og GIF-filer kan også sendes med PHPMailer. Du kan desuden omdøbe dine ved­hæf­te­de filer ved hjælp af en valgfri anden parameter, der overføres til funk­tio­nen.

$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

Trin 6: Brug den korrekte tegn­kod­ning

Det er en god idé at aktivere UTF-8 i PHPMailer for at undgå vis­nings­fejl ved be­hand­ling af bogstaver med accenter fra andre sprog, især når der bruges ved­hæf­te­de filer. Du kan gøre dette ved at tilføje følgende ko­de­linjer til dit PHP-script:

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

Trin 7: Send e-mail

Nu er det tid til at sende din e-mail. Brug følgende kommando til at gøre dette:

$mail->send();
php

Det er bedst at placere al den kode, der vises i send-an­mod­nin­gen, i try-blokken i dit script, så du kan opfange even­tu­el­le fejl.

Ko­de­ek­sem­pel til af­sen­del­se af en e-mail med PHPMailer

Nedenfor finder du al den kode, du skal bruge for at sende en e-mail med en bil­led­ved­hæf­tet fil til en modtager efter eget valg ved hjælp af 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
Gå til ho­ved­me­nu­en