# Hoe e-mails verzenden met PHPMailer

PHPMailer is een **programmatuurbibliotheek** die [de overdracht van e-mails](https://www.ionos.com/nl-be/digitalguide/e-mail/technische-zaken/een-e-mail-versturen-hoe-werkt-dat/) via PHP regelt. PHPMailer wordt voornamelijk gebruikt voor **contactformulieren** op websites, maar kan ook worden gebruikt om privé-e-mails te versturen.

## Wat is PHPMailer?

PHPMailer is een **e-mail extensie** voor PHP, die is ontwikkeld en wordt onderhouden door de PHP-gemeenschap. E-mails die met PHPMailer worden verzonden, komen minder snel in de spamfolder terecht dan e-mails die met de ingebouwde mailfunctie van PHP worden verzonden. Dit komt omdat e-mails die met PHPMailer worden geschreven, worden verzonden via SMTP. SMTP staat voor Simple Mail Transfer Protocol en wordt gebruikt om e-mails via internet te verzenden. Bovendien ondersteunt PHPMailer, in tegenstelling tot de ingebouwde mailfunctie, ook HTML-mails en bijlagen.

## Waarvoor wordt PHPMailer gebruikt?

PHPMailer is iets omslachtiger in het gebruik dan andere e-mailproviders of geïntegreerde e-mailprogramma’s op uw computer, waardoor u zich misschien afvraagt waarom mensen ervoor kiezen om het te gebruiken. Het PHP-framework vereenvoudigt het maken van geautomatiseerde reacties, zoals die nodig zijn voor een **webwinkel**. Daarnaast is PHPMailer ook geschikt voor **contactformulieren** op websites.

## Wat zijn de vereisten voor PHPMailer?

Je hebt een SMTP-server nodig om PHPMailer te kunnen gebruiken. Je kunt kiezen of je een [mailserver](https://www.ionos.com/office-solutions/email-server "Email server from IONOS") van een provider gebruikt of je **eigen server** installeert. Je kunt het beste Composer (een pakketbeheerder voor PHP) gebruiken om de PHP-extensie te installeren.

Tip Het beheersen van de basisprincipes van PHP is een andere belangrijke vereiste voor het gebruik van PHPMailer. Onze [PHP-tutorial voor beginners](https://www.ionos.com/nl-be/digitalguide/websites/website-ontwikkeling/leer-php-onze-allesomvattende-php-tutorial-voor-beginners/) kan u helpen als u moeite heeft met de basisprincipes van PHP.

## Hoe PHPMailer stap voor stap te installeren

### Stap 1: Download de huidige versie van PHPMailer

Download de **nieuwste versie van PHPMailer**. U kunt dit doen met Composer of handmatig via GitHub.

#### Optie 1: Downloaden met Composer

Als u het pakketbeheerprogramma [Composer](https://getcomposer.org/ "Composer website") hebt geïnstalleerd, kunt u eenvoudigweg deze opdracht gebruiken:

```bash
composer require phpmailer/phpmailer
```

**Belangrijk**: als u PHPMailer met Composer hebt geïnstalleerd, moet u Composer in uw PHP-code opnemen om e-mails te kunnen verzenden.

De volgende coderegel kan worden gebruikt:

```bash
require_once "vendor/autoload.php";
```

Het trefwoord\*\*‘require\_once’\*\*zorgt ervoor dat Composer slechts één keer wordt opgenomen. Anders kunnen er programmafouten optreden. De installatie met Composer is nu voltooid.

#### Optie 2: Direct downloaden van GitHub

De PHPMailer-bronbestanden kunnen ook **handmatig** worden gedownload door op de knop **Code** in de bijbehorende [GitHub-repository](https://github.com/PHPMailer/PHPMailer "PHPMailer from GitHub") te klikken en het ZIP-bestand te downloaden. Als Git op uw systeem is geïnstalleerd, kunt u de repository ook klonen met behulp van een opdrachtregelopdracht.

### Stap 2: Bestanden uitpakken

Als u de broncode van PHPMailer handmatig hebt gedownload, moet u de ZIP-bestanden openen. Selecteer de locatie waar u PHPMailer wilt installeren en neem PHPMailer op **in uw script**. Ervan uitgaande dat u de PHPMailer-bestanden hebt uitgepakt in een map met de naam *PHPMailer*, kunt u de volgende regels code gebruiken:

```php
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);
```

## Hoe u stap voor stap e-mails verstuurt met PHPMailer

### Stap 1: Voeg naamruimten toe

Zorg ervoor dat de **naamruimten** correct zijn om toegang te krijgen tot PHPMailer. Hiervoor zijn `Use` instructies nodig, dus uw code moet de volgende regels bevatten:

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

Je kunt de afzonderlijke lessen openen door de namen achter de laatste schuine streep toe te voegen.

### Stap 2: Fouten opsporen

Hoewel PHPMailer een zeer betrouwbare manier is om e-mails te versturen, kunnen er af en toe fouten optreden. Door een **try catch-statement** op te nemen in een e-mailverzending voorkom je dat gevoelige gegevens op je mailserver als foutmelding naar gebruikers worden verzonden:

```php
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();
}
```

### Stap 3: Authenticatie met SMTP

U moet **zich authenticeren met SMTP** om PHPMailer te kunnen gebruiken. Voer het adres van uw mailserver in naast het juiste protocol ( TLS/SSL of SMTP) en voeg de poort toe met uw gebruikersnaam en wachtwoord. Het protocol en de poort die u gebruikt, zijn afhankelijk van uw **e-mailprovider**. De betreffende servergegevens kunt u vinden op de **website van de e-mailprovider**.

```php
$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;
```

In plaats van `ENCRYPTION_STARTTLS` kunt u ook `ENCRYPTION_SMTPS` als versleutelingsmethode gebruiken. Bij `ENCRYPTION_SMTPS` wordt **alleen** een verbinding **tot stand gebracht als TLS [TLS](https://www.ionos.com/nl-be/digitalguide/server/beveiliging/tls-transport-layer-security/) actief is**. Dit betekent dat communicatie met een server alleen mogelijk is als de server de versleutelingsmaatregelen ondersteunt die nodig zijn voor een veilige overdracht. Bij StartTLS wordt de verbinding met de mailserver zonder versleuteling tot stand gebracht. Pas daarna wordt versleuteling toegepast. Als het niet mogelijk is om TLS-versleuteling toe te passen, vindt de resterende gegevensuitwisseling onversleuteld plaats.

SMTPS biedt een **hoger beveiligingsniveau**, terwijl StartTLS**een betere compatibiliteit heeft**. Vanwege zijn compatibiliteit heeft StartTLS over het algemeen de voorkeur.

### Stap 4: Vermeld de ontvanger van de e-mail

Nu kunt u de **ontvangers** van uw e-mail in het script aanwijzen.

```php
// 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');
```

### Stap 5: Voeg de inhoud van de e-mail toe

Vergeet de inhoud van uw e-mail niet. Deze bestaat meestal uit een onderwerp en een tekst, die **zowel in HTML- als niet-HTML-versie** kan worden opgegeven. Het is belangrijk om te weten dat oudere software mogelijk niet geschikt is voor de huidige HTML5-standaard, dus het kan een goed idee zijn om uw e-mail in HTML op te stellen.

U kunt ook eenvoudig **bijlagen** verzenden met PHPMailer met behulp van de functie **addAttachment**. **Afbeeldingen, muziek, documenten, video’s en GIF’s** kunnen ook worden verzonden met PHPMailer. U kunt uw bijlagen ook hernoemen met een optionele tweede parameter die naar de functie wordt overgedragen.

```php
$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");
```

### Stap 6: Gebruik de juiste tekencodering

Het is een goed idee om UTF-8 in PHPMailer in te schakelen om weergavefouten te voorkomen bij het verwerken van **letters met accenten** uit andere talen, vooral wanneer u verschillende bijlagen gebruikt. U kunt dit doen door de volgende regels code aan uw PHP-script toe te voegen:

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

### Stap 7: E-mail verzenden

Nu is het tijd om je e-mail te versturen. Gebruik hiervoor het volgende commando:

```php
$mail->send();
```

Het is het beste om alle code die in het verzendverzoek wordt weergegeven, in het **try-statementblok** van uw script te plaatsen, zodat u eventuele fouten kunt opvangen.

## Codevoorbeeld voor het verzenden van een e-mail met PHPMailer

Hieronder vindt u alle code die u nodig hebt om met PHPMailer een e-mail met een afbeelding als bijlage naar een ontvanger naar keuze te sturen:

```php
<?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();
}
```


This is a markdown version of: [https://www.ionos.com/nl-be/digitalguide/e-mail/technische-zaken/phpmailer/](https://www.ionos.com/nl-be/digitalguide/e-mail/technische-zaken/phpmailer/) for AI/LLM consumption.