2mail — SMTP relay vanuit Belgische infrastructuur

SMTP voor Laravel — mail uit uw applicatie die aankomt

Laravel heeft een volwaardige mail-laag ingebouwd, met wachtrijen, sjablonen en meldingen. Wat het niet levert is afleverbaarheid: dat hangt af van de server waarlangs u verstuurt, en de standaardconfiguratie op een verse server is zelden een goede afzender.

Laravel leest zijn mailinstellingen uit de omgevingsconfiguratie. U wijzigt daar de SMTP-gegevens en de rest van uw applicatie blijft ongewijzigd — geen aanpassing aan mailables, notificaties of wachtrijen nodig.

Waarom het misgaat zonder relay

Een applicatie in ontwikkeling verstuurt naar een testadres en alles lijkt goed. Bij livegang verandert het publiek: echte adressen bij echte providers, die wél op authenticatie en reputatie controleren. Dat is het moment waarop wachtwoordherstelmails plots niet meer aankomen — bij een deel van de gebruikers, wat het lastig te herkennen maakt.

SMTP instellen in Laravel

1

Gegevens ophalen

Log in op uw 2mail-account en haal daar uw SMTP-server, gebruikersnaam en wachtwoord op.

2

Invullen in Laravel

De mailinstellingen staan in het omgevingsbestand van uw applicatie, niet in de code. U zet de mailer op SMTP en vult de vijf gegevens hieronder in. Vergeet het afzenderadres en de afzendernaam niet: die staan als aparte instellingen naast de verbindingsgegevens.

3

Domein authenticeren

Zorg dat SPF, DKIM en DMARC voor uw domein correct staan, zodat ontvangers kunnen verifiëren dat de mail van u komt.

4

Testen

Verstuur vanuit uw platform een testbericht naar een adres bij een grote provider en controleer of het in de inbox aankomt en niet in de spammap.

De velden die Laravel vraagt

Elk platform noemt ze net iets anders, maar het gaat altijd om dezelfde vijf. De concrete waarden zijn accountgebonden en vindt u in uw 2mail-account — vul ze daar op, zodat u zeker de juiste gebruikt.

Veld Wat u invult
SMTP-server (host)De servernaam uit uw 2mail-account.
PoortDe poort die bij uw gekozen versleuteling hoort; uw account toont welke.
VersleutelingTLS. Verstuur nooit onversleuteld — uw inloggegevens gaan anders leesbaar over de lijn.
GebruikersnaamDe SMTP-login van uw 2mail-account.
WachtwoordHet bijbehorende wachtwoord. Gebruik nooit het wachtwoord van een mailbox van een medewerker.

SMTP-configuratie voor Laravel in code

Werkende voorbeelden voor poort 587 met STARTTLS, klaar om over te nemen. Vervang het afzenderadres door een adres op uw eigen domein en controleer servernaam en login in uw 2mail-account. Het wachtwoord hoort in een omgevingsvariabele — nooit in de code en nooit in versiebeheer.

Het .env-bestand: de MAIL_*-variabelen

Laravel leest alle verbindingsgegevens uit .env. Poort 587 werkt met STARTTLS: de verbinding start gewoon en wordt naar TLS opgewaardeerd nog vóór uw login over de lijn gaat. Het wachtwoord staat enkel in het .env-bestand op de server — dat bestand hoort niet in versiebeheer. Vervang example.com door een domein dat u in 2mail hebt geauthenticeerd.

MAIL_MAILER=smtp
MAIL_HOST=relay.2mail.eu
MAIL_PORT=587
MAIL_USERNAME="<2mail-smtp-login>"
MAIL_PASSWORD="<2mail-smtp-password>"
MAIL_FROM_ADDRESS="noreply@example.com"
MAIL_FROM_NAME="${APP_NAME}"

# Only when config/mail.php still has an 'encryption' key (older projects):
MAIL_ENCRYPTION=tls

# When config/mail.php has a 'scheme' key instead: leave MAIL_SCHEME unset.
# "smtp" on port 587 upgrades to STARTTLS by itself; "tls" is not a valid scheme.

config/mail.php: de smtp-mailer

In een standaardproject hoeft u hier niets te wijzigen: het bestand leest gewoon de variabelen uit .env. Kijk het wel na wanneer een instelling geen effect heeft — een hardgecodeerde host in dit bestand wint altijd van uw .env. Recente projecten hebben een scheme-sleutel, oudere een encryption-sleutel; de rest is identiek.

// config/mail.php
'default' => env('MAIL_MAILER', 'smtp'),

'mailers' => [
    'smtp' => [
        'transport' => 'smtp',
        'scheme' => env('MAIL_SCHEME'),                    // newer projects
        // 'encryption' => env('MAIL_ENCRYPTION', 'tls'),  // older projects use this key instead
        'host' => env('MAIL_HOST', 'relay.2mail.eu'),
        'port' => env('MAIL_PORT', 587),
        'username' => env('MAIL_USERNAME'),
        'password' => env('MAIL_PASSWORD'),
        'timeout' => null,
    ],
],

'from' => [
    'address' => env('MAIL_FROM_ADDRESS', 'noreply@example.com'),
    'name' => env('MAIL_FROM_NAME', 'Example'),
],

Testmail versturen met Tinker

Ververs eerst de configuratiecache, anders test u nog de oude instellingen. Mail::raw verstuurt synchroon: een fout in host, poort of login ziet u meteen in de terminal, en niet pas in het log van de wachtrij. Verstuur naar een extern adres bij een grote provider.

php artisan config:clear
php artisan tinker

# At the tinker prompt:
Mail::raw('Sent through the 2mail SMTP relay.', fn ($m) => $m->to('you@example.org')->subject('SMTP test'));

Welke mails Laravel verstuurt

Zodra de relay ingesteld is, lopen deze allemaal via 2mail — u hoeft ze niet stuk voor stuk te configureren.

Wachtwoordherstel en e-mailverificatie
Meldingen en gebeurtenismails uit de applicatie
Facturen en abonnementsberichten
Rapporten uit geplande taken
Foutmeldingen naar beheerders

Valkuilen bij Laravel

De wachtrij moet draaien

Zet u mail op de wachtrij zonder actieve verwerker, dan vertrekt er niets en ziet u geen enkele fout. Bij een afleverprobleem hoort dit de eerste controle te zijn, niet de laatste.

Configuratiecache na een wijziging

Draait uw applicatie met een gecachte configuratie, dan blijven gewijzigde mailinstellingen zonder effect tot die cache ververst is. Een instelling die "niet werkt" is vaak gewoon nog niet ingelezen.

Testomgevingen die echt versturen

Een staging-omgeving met een kopie van de productiedatabank kan ongemerkt naar echte klanten versturen. Beperk de ontvangers daar expliciet, of gebruik een aparte login.

Veelvoorkomende foutmeldingen bij Laravel

De meldingen die u te zien krijgt wanneer host, poort, versleuteling of login niet kloppen — letterlijk, zodat u ze herkent in uw log, met de oorzaak en de oplossing ernaast.

Melding Oorzaak Oplossing
Connection could not be established with host "relay.2mail.eu:587": stream_socket_client(): Unable to connect to relay.2mail.eu:587 (Connection timed out) Uw server bereikt de relay niet. Meestal blokkeert de firewall van uw hoster uitgaand verkeer op poort 587, of staat er een tikfout in MAIL_HOST of MAIL_PORT. Test vanaf dezelfde server met openssl s_client -starttls smtp -connect relay.2mail.eu:587. Komt er geen antwoord, laat uw hoster dan uitgaand verkeer op poort 587 openzetten.
Connection could not be established with host "ssl://relay.2mail.eu:587": stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:…:SSL routines::wrong version number De scheme staat op smtps (of in een ouder project MAIL_ENCRYPTION=ssl). Laravel verwacht dan TLS vanaf de eerste byte, terwijl poort 587 gewoon start en pas daarna via STARTTLS opwaardeert. Laat MAIL_SCHEME leeg of zet het op smtp; in een ouder project zet u MAIL_ENCRYPTION=tls. De poort blijft 587.
Failed to authenticate on SMTP server with username "…" using the following authenticators: "LOGIN", "PLAIN". … Expected response code "235" but got code "535" De relay weigert de login: een verkeerde gebruikersnaam of een verkeerd wachtwoord, een wachtwoord met een spatie of # dat in .env niet tussen aanhalingstekens staat, of een gecachte oude configuratie. Zet de waarde tussen dubbele aanhalingstekens, voer php artisan config:clear uit en gebruik de SMTP-login uit uw 2mail-account — niet het wachtwoord van een mailbox.
The "tls" scheme is not supported; supported schemes for mailer "smtp" are: "smtp", "smtps". In MAIL_SCHEME staat tls. Die variabele is geen opvolger van MAIL_ENCRYPTION: ze kent enkel smtp en smtps. Verwijder MAIL_SCHEME of zet het op smtp. Op poort 587 schakelt de mailer zelf over op STARTTLS.
Expected response code "250/251/252" but got code "554", with message "554 5.7.1 <noreply@example.com>: Sender address rejected" De login klopt, maar het afzenderadres staat op een domein dat niet aan uw 2mail-account gekoppeld is. Vaak is MAIL_FROM_ADDRESS nog de standaardwaarde uit het voorbeeldbestand. Zet MAIL_FROM_ADDRESS op een adres van een domein dat u in 2mail hebt toegevoegd, en controleer of geen enkele Mailable een eigen from() op een ander domein zet.
SPF, DKIM & DMARC uitgelegd Over deliverability

Ander platform?

SMTP is een standaardprotocol: elk systeem dat SMTP spreekt — een CRM, een ERP, een eigen applicatie of een server — kan via 2mail versturen met dezelfde vijf velden.

Veelgestelde vragen over SMTP voor Laravel

Laravel levert de mail-laag, niet de afleverbaarheid: die hangt af van de server waarlangs u verstuurt. De standaardconfiguratie op een verse server is zelden een goede afzender, omdat er geen authenticatie en geen opgebouwde reputatie is.
In het omgevingsbestand van uw applicatie, niet in de code. U zet de mailer op SMTP en vult host, poort, gebruikersnaam, wachtwoord en versleuteling in. Vergeet het afzenderadres en de afzendernaam niet — die staan als aparte instellingen daarnaast.
Draait uw applicatie met een gecachte configuratie, dan blijven gewijzigde mailinstellingen zonder effect tot die cache ververst is. Een instelling die "niet werkt" is vaak gewoon nog niet ingelezen.
Controleer of de wachtrij verwerkt wordt. Zet u mail op de wachtrij zonder actieve verwerker, dan vertrekt er niets en verschijnt er ook geen foutmelding. Dit hoort de eerste controle te zijn, niet de laatste.
Een staging-omgeving met een kopie van de productiedatabank kan ongemerkt naar echte adressen versturen. Beperk de ontvangers daar expliciet, of gebruik een aparte login zodat u het verkeer los kunt volgen.
Bel nu
Verstuur e-mail