Sådan sender du e-mails med PHPMailer
PHPMailer er et programbibliotek, der styrer e-mail-overførsel via PHP. PHPMailer bruges hovedsageligt til kontaktformularer på hjemmesider, men kan også bruges til at sende private e-mails.
Hvad er PHPMailer?
PHPMailer er en e-mail-udvidelse til PHP, der udvikles og vedligeholdes af PHP-fællesskabet. E-mails sendt med PHPMailer ender sjældnere i spam-mappen end dem, der sendes med den indbyggede 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 internettet. Derudover understøtter PHPMailer også HTML-e-mails og vedhæftede filer, i modsætning til den indbyggede mail-funktion.
Hvad bruges PHPMailer til?
PHPMailer er lidt mere besværligt at bruge sammenlignet med andre e-mail-udbydere eller integrerede e-mail-programmer på din computer, hvilket måske får dig til at undre dig over, hvorfor folk vælger at bruge det. PHP-rammeværket gør det nemmere at oprette automatiske svar, som f.eks. dem, der er nødvendige i en webshop. Derudover er PHPMailer også velegnet til kontaktformularer på hjemmesider.
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 mailserver fra en udbyder eller selv opsætte en server. Det er bedst at bruge Composer (en pakkehåndtering til PHP) til at installere PHP-udvidelsen.
At mestre grundlæggende PHP er en anden vigtig forudsætning for at kunne bruge PHPMailer. Vores PHP-vejledning for begyndere kan hjælpe dig, hvis du har problemer med de grundlæggende elementer i PHP.
Sådan installeres 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 installeret pakkehåndteringen Composer, kan du blot bruge denne kommando:
composer require phpmailer/phpmailerbashVigtigt: Hvis du har installeret 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";bashNøgleordet**»require_once«**sikrer, at Composer kun indlæses én gang. Ellers kan der opstå programfejl. Installationen via Composer er nu afsluttet.
Mulighed 2: Download direkte fra GitHub
PHPMailer-kildefilerne kan også downloades manuelt ved at klikke på knappen »Code« i det pågældende GitHub-repository og downloade ZIP-filen. Hvis Git er installeret på din computer, kan du i stedet klone repositoryet ved hjælp af en kommandolinjekommando.
Trin 2: Pak filerne ud
Hvis du har downloadet PHPMailers kildekode manuelt, skal du pakke ZIP-filerne ud. Vælg den mappe, hvor du vil installere 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 kodelinjer:
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);phpSådan sender du e-mails med PHPMailer trin for trin
Trin 1: Indsæt navneområder
Sørg for, at navneområderne 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;phpDu 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-udsendelse undgår du, at følsomme data fra din mailserver sendes til brugerne som en fejlmeddelelse:
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();
}phpTrin 3: Log ind via SMTP
Du skal godkende dig selv via SMTP for at kunne bruge PHPMailer. Indtast adressen på din mailserver ved siden af det relevante protokol (enten TLS/SSL eller SMTP) og angiv portnummeret sammen med dit brugernavn og din adgangskode. Hvilken protokol og hvilket portnummer du skal bruge, afhænger af din mailudbyder. De relevante serveroplysninger kan findes på mailudbyderens hjemmeside.
$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;phpI stedet for ENCRYPTION_STARTTLS kan du også vælge ENCRYPTION_SMTPS som krypteringsmetode. Med ENCRYPTION_SMTPS oprettes der kun en forbindelse, hvis TLS er aktiveret. Det betyder, at kommunikation med en server kun er mulig, hvis serveren understøtter de krypteringsforanstaltninger, der kræves for sikker overførsel. Med StartTLS oprettes forbindelsen til mailserveren uden kryptering. Først derefter anvendes kryptering. Hvis det ikke er muligt at anvende TLS-kryptering, vil den resterende dataudveksling foregå ukrypteret.
SMTPS tilbyder et højere sikkerhedsniveau, mens StartTLShar bedre kompatibilitet. På grund af sin kompatibilitet er StartTLS generelt det foretrukne valg.
Trin 4: Angiv modtageren af e-mailen
Nu kan du angive modtagerne 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');phpTrin 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 vedhæftede filer med PHPMailer ved hjælp af funktionen addAttachment. Billeder, musik, dokumenter, videoer og GIF-filer kan også sendes med PHPMailer. Du kan desuden omdøbe dine vedhæftede filer ved hjælp af en valgfri anden parameter, der overføres til funktionen.
$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");phpTrin 6: Brug den korrekte tegnkodning
Det er en god idé at aktivere UTF-8 i PHPMailer for at undgå visningsfejl ved behandling af bogstaver med accenter fra andre sprog, især når der bruges vedhæftede filer. Du kan gøre dette ved at tilføje følgende kodelinjer til dit PHP-script:
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';phpTrin 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();phpDet er bedst at placere al den kode, der vises i send-anmodningen, i try-blokken i dit script, så du kan opfange eventuelle fejl.
Kodeeksempel til afsendelse af en e-mail med PHPMailer
Nedenfor finder du al den kode, du skal bruge for at sende en e-mail med en billedvedhæftet 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