PHPMailer är ett pro­gram­bib­li­o­tek som reglerar e-po­stö­ver­fö­ring via PHP. PHPMailer används främst för kon­takt­for­mu­lär på webb­plat­ser, men kan också användas för att skicka privata e-post­med­de­lan­den.

Vad är PHPMailer?

PHPMailer är ett e-post­tillägg för PHP som utvecklas och un­der­hålls av PHP-com­mu­ni­tyn. E-post­med­de­lan­den som skickas med PHPMailer hamnar mindre ofta i skräp­post­map­pen än de som skickas med den inbyggda e-post­funk­tio­nen i PHP. Detta beror på att e-post­med­de­lan­den som skrivs med PHPMailer skickas med SMTP. SMTP står för Simple Mail Transfer Protocol och används för att överföra e-post­med­de­lan­den över internet. Dessutom stöder PHPMailer även HTML-e-post­med­de­lan­den och bilagor, till skillnad från den inbyggda e-post­funk­tio­nen.

Vad används PHPMailer till?

PHPMailer är lite mer om­ständ­ligt att använda jämfört med andra e-post­le­ve­ran­tö­rer eller in­te­gre­ra­de e-post­pro­gram på din dator, vilket kan få dig att undra varför folk väljer att använda det. PHP-ramverket förenklar skapandet av au­to­ma­tis­ka svar, till exempel sådana som behövs för en webbutik. Dessutom är PHPMailer också lämpligt för kon­takt­for­mu­lär på webb­plat­ser.

Vilka är kraven för PHPMailer?

Du behöver en SMTP-server för att kunna använda PHPMailer. Det är upp till dig om du vill använda en e-post­ser­ver från en le­ve­ran­tör eller kon­fi­gu­re­ra din egen server. Det är bäst att använda Composer (en pa­ket­han­te­ra­re för PHP) för att in­stal­le­ra PHP-tillägget.

Tips

Att behärska grunderna i PHP är ett annat viktigt krav för att kunna använda PHPMailer. Vår PHP-hand­led­ning för nybörjare kan hjälpa dig om du har problem med grunderna i PHP.

Hur man in­stal­le­rar PHPMailer steg för steg

Steg 1: Ladda ner den aktuella versionen av PHPMailer

Ladda ner den senaste versionen av PHPMailer. Du kan göra detta med Composer eller manuellt från GitHub.

Al­ter­na­tiv 1: Ladda ner med Composer

Om du har in­stal­le­rat pa­ket­han­te­ra­ren Composer kan du helt enkelt använda följande kommando:

composer require phpmailer/phpmailer
bash

Viktigt: om du har in­stal­le­rat PHPMailer med Composer måste du inkludera Composer i din PHP-kod för att kunna skicka e-post.

Följande kodrad kan användas:

require_once "vendor/autoload.php";
bash

Nyc­kelor­det**“require_once”**sä­ker­stäl­ler att Composer endast in­klu­de­ras en gång. Annars kan pro­gram­fel uppstå. In­stal­la­tio­nen med Composer är nu klar.

Al­ter­na­tiv 2: Ladda ner direkt från GitHub

PHPMailer-käll­fi­ler­na kan också laddas ner manuellt genom att klicka på knappen Code i mot­sva­ran­de GitHub-arkiv och ladda ner ZIP-filen. Om Git är in­stal­le­rat på ditt system kan du al­ter­na­tivt klona arkivet med hjälp av ett kom­man­do­rads­be­fall.

Steg 2: Packa upp filerna

Om du har laddat ner PH­P­Mai­lers källkod manuellt måste du öppna ZIP-filerna. Välj den plats där du vill in­stal­le­ra PHPMailer och inkludera PHPMailer i ditt skript. Om du har packat upp PHPMailer-filerna i en mapp som heter PHPMailer kan du använda följande kodrader:

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

Hur man skickar e-post­med­de­lan­den med PHPMailer steg för steg

Steg 1: Inkludera nam­nut­rym­men

Se till att nam­nut­rym­me­na är korrekta för att kunna komma åt PHPMailer. Det krävs Use satser för detta, så din kod bör innehålla följande rader:

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

Du kan komma åt de enskilda klasserna genom att ange namnen efter den sista sned­strec­ken.

Steg 2: Fånga upp fel

PHPMailer är ett mycket till­för­lit­ligt sätt att skicka e-post, men ibland kan fel uppstå. Genom att inkludera ett try catch-uttryck i e-postut­skic­ket för­hind­rar du att känslig in­for­ma­tion på din e-post­ser­ver skickas till an­vän­dar­na som ett fel­med­de­lan­de:

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

Steg 3: Au­ten­ti­se­ra med SMTP

Du måste au­ten­ti­se­ra dig med SMTP för att kunna använda PHPMailer. Ange adressen till din e-post­ser­ver bredvid lämpligt protokoll (antingen TLS/SSL eller SMTP) och ange porten till­sam­mans med ditt an­vän­dar­namn och lösenord. Vilket protokoll och vilken port du använder beror på din e-post­le­ve­ran­tör. Re­spek­ti­ve ser­ver­da­ta kan hämtas från e-post­le­ve­ran­tö­rens webbplats.

$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 stället för ENCRYPTION_STARTTLS kan du också använda ENCRYPTION_SMTPS som kryp­te­rings­me­tod. Med ENCRYPTION_SMTPS upprättas en an­slut­ning endast om TLS TLS är aktivt. Detta innebär att kom­mu­ni­ka­tion med en server endast är möjlig om servern stöder de kryp­te­rings­åt­gär­der som krävs för säker över­fö­ring. Med StartTLS upprättas an­slut­ning­en till e-post­ser­vern utan kryp­te­ring. Först därefter tillämpas kryp­te­ring. Om det inte är möjligt att tillämpa TLS-kryp­te­ring kommer den åter­stå­en­de da­ta­ut­by­tet att ske okryp­te­rat.

SMTPS erbjuder en högre sä­ker­hets­ni­vå, medan StartTLShar bättre kom­pa­ti­bi­li­tet. På grund av sin kom­pa­ti­bi­li­tet är StartTLS i allmänhet det fö­re­drag­na valet.

Steg 4: Ange mot­ta­ga­ren av e-post­med­de­lan­det

Nu kan du ange mot­ta­gar­na av ditt e-post­med­de­lan­de i skriptet.

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

Steg 5: Lägg till in­ne­hål­let i e-post­med­de­lan­det

Glöm inte in­ne­hål­let i ditt e-post­med­de­lan­de. Det består van­ligt­vis av ett ämne och en text, som kan anges som både HTML- och icke-HTML-versioner. Det är viktigt att notera att äldre pro­gram­va­ra kanske inte kan hantera den aktuella HTML5-stan­dar­den, så det kan vara en bra idé att skapa ditt e-post­med­de­lan­de med HTML.

Du kan också enkelt skicka bilagor med PHPMailer med hjälp av funk­tio­nen ad­d­At­ta­ch­ment. Bilder, musik, dokument, videor och GIF-filer kan också skickas med PHPMailer. Du kan också byta namn på dina bilagor med en valfri andra parameter som överförs till 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

Steg 6: Använd rätt tec­ken­kod­ning

Det är en bra idé att aktivera UTF-8 i PHPMailer för att förhindra att vis­nings­fel uppstår vid be­ar­bet­ning av bokstäver med accent från andra språk, särskilt när du använder olika bilagor. Du kan göra detta genom att lägga till följande kodrader i ditt PHP-skript:

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

Steg 7: Skicka e-post

Nu är det dags att skicka din e-post. Använd följande kommando för att göra detta:

$mail->send();
php

Det är bäst att placera all kod som visas i sänd­nings­be­gä­ran i try-sats­bloc­ket i ditt skript så att du kan fånga upp even­tu­el­la fel.

Ko­dex­em­pel för att skicka ett e-post­med­de­lan­de med PHPMailer

Nedan finns all kod du behöver för att skicka ett e-post­med­de­lan­de med en bild­bi­la­ga till en mottagare som du väljer med hjälp av 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å till huvudmeny