Introductie
In dit artikel vertellen we waarom en hoe je e-mail moet verzenden met PHPMailer in plaats van met de functie mail()
van PHP. Een groot voordeel van het gebruiken van externe SMTP boven het gebruik van lokale e-mail, is dat als je de functie mail() van PHP gebruikt om e-mail te verzenden met het van-adresdomein ingesteld op iets anders dan de lokale domeinnaam, (naam van de server), de e-mailserver van de ontvanger filters het markeren als spam. Om te voorkomen dat je bericht door spamfilters wordt gemarkeerd (hoewel dit niet altijd voorkomen kan worden) hebben we hiervoor relevante informatie opgenomen in het volgende artikel
We dwingen afzender verificatie af op onze relay server. Kort gezegd betekent dit dat de afzender een bestaand e-mailadres moet zijn. De lange versie is dat onder bepaalde omstandigheden zelfs bij een bestaand e-mailadres de verificatie kan mislukken. Het is gemakkelijk om te controleren of je e-mailadres echt bestaat en dit kan worden gedaan door een telnet-opdracht te gebruiken. Maak gebruik van onze stapsgewijze handleiding in dit artikel.
PHPMailer voordelen:
- Hij kan verschillende soorten foutmeldingen in meer dan 40 talen afdrukken wanneer deze geen e-mail kan verzenden.
- Het heeft geïntegreerde SMTP-protocol ondersteuning en authenticatie via SSL en TLS.
- Het kan een alternatieve platte-tekstversie van e-mail verzenden voor niet-HTML-e-mailclients.
- Het heeft een zeer actieve ontwikkelaars gemeenschap die deze veilig en up-to-date houdt.
PHPMailer wordt ook gebruikt door populaire PHP content management systemen zoals WordPress, Drupal en Joomla.
Vereisten
- Webserver met PHP geïnstalleerd
- bestaand e-mailadres
- SMTP relay
- PHPMailer de laatste versie kun je downloaden via deze link
PHPMailer met Snel SMTP
- Log in op je server met FTP-gebruikersnaam en wachtwoord.
- Zorg ervoor dat je je in de openbare directory bevindt
- Download de nieuwste PHPMailer-map en upload de uitgepakte inhoud van de map
- Maak een nieuw PHP-bestand en noem het zoiets als phpmail.php
- Voeg de volgende code toe aan het bestand, sla het op en upload het naar de openbare map op je server:
<?php // Import PHPMailer classes into the global namespace // These must be at the top of your script, not inside a function use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require './PHPMailer/src/Exception.php'; require './PHPMailer/src/PHPMailer.php'; require './PHPMailer/src/SMTP.php'; $mail = new PHPMailer(true); // Passing `true` enables exceptions try { //Server settings $mail->SMTPDebug = 2; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtprelay.snel.com'; // Specify main and backup SMTP servers $mail->SMTPAuth = false; // Enable SMTP authentication $mail->SMTPSecure = 'tls'; // Enable SSL encryption, TLS also accepted with port 465 $mail->Port = 587; // TCP port to connect to //Recipients $mail->setFrom('[email protected]', 'Mailer'); //This is the email your form sends From $mail->addAddress('[email protected]', 'Joe User'); // Add a recipient address //Content $mail->isHTML(true); // Set email format to HTML $mail->Subject = 'Subject line goes here'; $mail->Body = 'Body text goes here'; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } ?>
- Verstuur de e-mail door in je webbrowser naar http://”vul-hier-je-domein-in”/phpmail.php te gaan. Het zal de status “Bericht is verzonden” weergeven en je kunt nu naar e-mail verzenden met PHPMailer of fouten weergeven als die er zijn.
PHPMailer met lokale SMTP
Upload de PHPMailer naar de openbare map
Download de nieuwste PHPMailer map, pak deze uit en upload de inhoud van de map naar de openbare map van je server.
Maak phpmail.php en voeg de code uit het onderstaande voorbeeld toe
Nadat je de inhoud van de map PHPMailer hebt geüpload, maak je het bestand phpmail.php en voeg je de volgende code toe aan dat bestand, sla deze op en uploadt deze naar de openbare map.
<?php // Import PHPMailer classes into the global namespace // These must be at the top of your script, not inside a function use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require './PHPMailer/src/Exception.php'; require './PHPMailer/src/PHPMailer.php'; require './PHPMailer/src/SMTP.php'; $mail = new PHPMailer(true); // Passing `true` enables exceptions try { //Server settings $mail->SMTPDebug = 2; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'localhost'; // Specify main and backup SMTP servers $mail->SMTPAuth = false; // Enable SMTP authentication $mail->SMTPSecure = ''; // Enable SSL encryption, TLS also accepted with port 465 $mail->Port = 25; // TCP port to connect to //Recipients $mail->setFrom('[email protected]', 'Mailer');//This is the email your form sends From $mail->addAddress('[email protected]', 'Joe User'); // Add a recipient address //Content $mail->isHTML(true); // Set email format to HTML $mail->Subject = 'Subject line goes here'; $mail->Body = 'Body text goes here'; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } ?>
Test de e-mail
Het verzenden van de testmail is een eenvoudige stap: bezoek in je webbrowser http://”vul-hier-je-domein-in”/phpmail.php en controleer of het bericht op de pagina “Bericht is verzonden” wordt weergegeven, wat wil zeggen dat onze PHPMailer met succes heeft gecommuniceerd met een lokale Postfix-configuratie.
PHPMailer met Gmail
Voordat we beginnen met de stappen voor het verzenden van e-mail met behulp van SMTP in het PHP-voorbeeld, laten we eerst eens kijken wat enkele limieten zijn met Gmail SMTP-servers en hoe je enkele hiervan kunt overwinnen:
- Gmail beperkt het aantal ontvangers in een enkele e-mail en het aantal e-mails dat per dag kan worden verzonden. De huidige limiet is 500 e-mails per dag of 500 ontvangers in één e-mail. Je kunt deze limiet niet echt verhogen. Als je een aantal boven deze limiet wilt verzenden, moet je dit integreren bij een e-mail bezorgings platform van derden zoals Sendgrid enz.
- Als je de drempelwaarden bereikt, kun je de komende 24 uur geen berichten verzenden. Zodra deze tijdelijke opschortingsperiode voorbij is, wordt de teller automatisch gereset en kan de gebruiker het verzenden van e-mails hervatten.
- Standaard mogen apps/codes van derden geen e-mails verzenden met jouw Gmail-account. En daarom zijn er weinig instellingen die aan jouw kant moeten worden gedaan:
Hoe je e-mail verzenden in Gmail kunt inschakelen?
- Voordat je e-mails verzendt met behulp van de SMTP-server van Gmail, moet je een aantal beveiligings- en machtigingsniveau-instellingen aanpassen onder de beveiligingsinstellingen van jouw Google-account.
- Zorg ervoor dat authenticatie in twee stappen is uitgeschakeld.
- Schakel de “Minder beveiligde app”-toegang in of klik hier.
- Als authenticatie in twee stappen is ingeschakeld, moet je een app-wachtwoord maken voor jouw applicatie of apparaat.
- Voor beveiligingsmaatregelen kan Google van je vragen dat je deze extra stap voltooit tijdens het aanmelden. Geef toegang tot je Google-account met het nieuwe apparaat/de nieuwe app.
Opmerking: het kan een uur of langer duren voordat eventuele beveiligingswijzigingen zijn doorgevoerd
Nu kunnen we beginnen met de installatie van PHPMailer:
Log in op je server
Download PHPMailer via deze link naar jouw machine en upload de inhoud van de map naar de openbare map van je server met behulp van FTP(S).
Maak en bewerk het phpmail.php-bestand
Gebruik de teksteditor om een nieuw bestand te maken en geef het de naam phpmail.php. Gebruik de voorbeeldcode uit het voorbeeld en voeg deze toe aan het PHP-bestand dat we zojuist hebben gemaakt. Let op: We moeten de waarden wijzigen volgens ons domein en onze gebruikersnamen.
Belangrijk: Gmail vereist TLS-codering via SMTP, dus we stellen deze hiermee in. Voordat je via SMTP verzendt, moet je de hostnaam, het poortnummer en het coderingstype achterhalen, indien nodig en als authenticatie vereist is, heb je ook de gebruikersnaam en het wachtwoord nodig. Houd er rekening mee dat als je twee-factor-authenticatie hebt ingeschakeld in Gmail, je hun SMTP niet kunt gebruiken met gebruikersnaam/wachtwoord.
<?php // Import PHPMailer classes into the global namespace // These must be at the top of your script, not inside a function use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require './PHPMailer/src/Exception.php'; require './PHPMailer/src/PHPMailer.php'; require './PHPMailer/src/SMTP.php'; $mail = new PHPMailer(true); // Passing `true` enables exceptions try { //Server settings $mail->SMTPDebug = 2; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = "[email protected]"; $mail->Password = "your-gmail-password"; $mail->SMTPSecure = 'tls'; // Enable SSL encryption, TLS also accepted with port 465 $mail->Port = 587; // TCP port to connect to //Recipients $mail->setFrom('[email protected]', 'Mailer'); //This is the email your form sends From $mail->addAddress('[email protected]', 'Joe User'); // Add a recipient address //Content $mail->isHTML(true); // Set email format to HTML $mail->Subject = 'Subject line goes here'; $mail->Body = 'Body text goes here'; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } ?>
Sla phpmail.php op en upload
Nadat je de code hebt gemaakt en toegevoegd, kun je dit bestand uploaden naar de openbare map van je server (niet naar de reeds aanwezige PHPMailer-map maar in de openbare map).
Stuur de test-e-mail
Bezoek in je webbrowser http://”vul-hier-je-domein-in”/phpmail.php en het zal de code uitvoeren en de test-e-mail verzenden volgens de configuratie in je phpmail.php-bestand. In het geval van een fout ontvang je een bericht op de pagina in de webbrowser. Je zou nu e-mail moeten kunnen verzenden met PHPMailer
PHPMailer met Microsoft 365
In dit voorbeeld laten we zien hoe je PHPMailer gebruikt om e-mails te versturen met Microsoft 365.
Om je e-mails via jouw Microsoft 365-e-mailadres te kunnen verzenden, moet je eerst SMTP-verificatie voor dat e-mailadres inschakelen in jouw Microsoft 365-beheercentrum. Anders blokkeert Microsoft 365 verzoeken naar de SMTP-server.
Open om te beginnen het tabblad Actieve gebruikers in je Microsoft 365-beheer centrum. Je kunt hier klikken om de rechterpagina te openen of het hamburger pictogram in de linkerbovenhoek van het beheer centrum uit te vouwen en naar Gebruikers >gebruikers te gaan.
Klik vervolgens op het e-mailaccount dat je wilt gebruiken om de e-mails van jouw WordPress-site te verzenden. Dit zal een menu uitklappen met meer opties.
Ga in de uitklapmenu naar het tabblad Mail. Klik vervolgens op de optie E-mail apps beheren. Vink vervolgens de optie Authenticated SMTP aan en klik op de Save changes knop.
Download de PhpMailer map en upload de inhoud naar de server
Zorg er opnieuw voor dat je het PHPMailer pakket downloadt en uploadt naar de openbare map op de server.
Maak het phpmail.php bestand en voeg de code toe
Maak een phpmail.php bestand, voeg de volgende coderegels toe, sla het op en upload deze naar de openbare map met behulp van de FTP-client.
<?php // Import PHPMailer classes into the global namespace // These must be at the top of your script, not inside a function use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require './PHPMailer/src/Exception.php'; require './PHPMailer/src/PHPMailer.php'; require './PHPMailer/src/SMTP.php'; $mail = new PHPMailer(true); // Passing `true` enables exceptions try { //Server settings $mail->SMTPDebug = 2; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtp.office365.com'; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = "[email protected]"; $mail->Password = "your-mail-password"; $mail->SMTPSecure = 'tls'; // Enable SSL encryption, TLS also accepted with port 465 $mail->Port = 587; // TCP port to connect to //Recipients $mail->setFrom('[email protected]', 'Mailer'); //This is the email your form sends From $mail->addAddress('[email protected]', 'Joe User'); // Add a recipient address //Content $mail->isHTML(true); // Set email format to HTML $mail->Subject = 'Subject line goes here'; $mail->Body = 'Body text goes here'; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } ?>
Stuur de test-e-mail
In deze stap zal het bezoeken van http://”vul-hier-je-domein-in”/phpmail.php in je webbrowser de code uitvoeren en de test-e-mail verzenden volgens de configuratie in je phpmail.php-bestand. Ervan uitgaande dat er hier geen problemen zijn, zou het moeten worden weergegeven in de status van het fout opsporingsbericht “Bericht is verzonden”. Je kunt nu e-mail verzenden met PHPMailer.
Conclusie
In deze tutorial hebben we de meest voorkomende gebruiksscenario’s van PHPMailer besproken en hoe de code correct kan worden geconfigureerd om met verschillende SMTP-relays te werken. Nu kunt je e-mail verzenden met PHPMailer. Als je meer specifieke voorbeelden nodig hebt, raadpleeg dan de map “voorbeelden” in de PHPMailer-repository.
Geef een reactie