Zorgeloos Laravel Mails Versturen via SendMail

Iedere ontwikkelaar kent de grote problematiek wel met het instellen van e-mails voor hun web applicaties. Het kost al gauw bakken bakken met tijd om het te configureren of het gaat je geheid wat knaken kosten om het bij een externe partij neer te leggen, terwijl je het alleen maar als MVP wilt neerzetten om te kijken wat het in de markt doet...

Gelukkig zijn Ubuntu Linux web servers eenvoudig in te stellen met SendMail om gratis via je eigen server e-mails te versturen.

Wij gaan met deze instructie er vanuit dat je basiskennis hebt van de onderstaande dingen:

  • Hoe je verbinding maakt met je server via SSH

  • Hoe je als root gebruiker inlogt op je server

  • Hoe je navigeert binnen een Ubuntu Linux omgeving

  • Hoe je vim of een andere editor in Linux kan gebruiken

Verder raden wij aan om altijd een backup te maken voor je een handleiding zoals deze volgt, om bij onverhoopte fouten snel terug te kunnen gaan naar een staat waarin je server nog wel werkte.

Installeer Sendmail

In veel gevallen wordt Sendmail al standaard geïnstalleerd op Ubuntu omgevingen, maar mocht dat niet het geval zijn kun je onderstaande commando uitvoeren:

sudo apt install sendmail

Sendmail configureren

Wanneer SendMail is geïnstalleerd moeten wij het nog configureren om verbinding te maken met onze SMTP-replay waarop wij ons e-mailverkeer willen toepassen. In dit voorbeeld maken wij gebruik van Zorgeloos Mailen van TransIP.

TransIP biedt een mooie optie aan om gebruik te mogen maken van hun SMTP-relay server voor het versturen van e-mailverkeer. Hiervoor krijg je van TransIP een aantal DNS records die je gemakkelijk kan instellen op de domeinnaam van het project.

Mocht het zijn dat je dit niet wilt gebruiken, maar een andere provider zoals Google Gmail dan is dat ook goed mogelijk en dien je het aan te passen naar de gegevens van de provider van jou keuze.

Een aantal regels toepassen

We moeten een aantal regels toevoegen aan een bestaand bestand van SendMail. Open het bestand door onderstaande commando uit te voeren:

sudo vim /etc/mail/sendmail.mc

Voeg vervolgens de volgende regels toe aan het bestand:

define(`SMART_HOST', `vps.transip.email')dnl
define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
FEATURE(`authinfo`)dnl

We kiezen hierbij er bewust voor om de SMTP-relay server enkel over poort 578 te laten communiceren, aangezien dit noodzakelijk is om de juiste verbinding tot stand te brengen. Verder kan je ervoor kiezen om de SMART_HOST aan te passen naar een adres zoals smtp.google.com.

Omdat we vaak te maken hebben met een authenticatie protocol, moeten we er voor zorgen dat er ook een authenticatiebestand komt, waarin we onze login gegevens verwerken. Zodoende kan Sendmail verbinding maken met onze SMTP-relayserver.

Laten we beginnen door eerst een nieuw bestand te maken door onderstaande commando uit te voeren:

sudo vim /etc/mail/authinfo

We voegen hier een simpele tekstregel toe, zoals hieronder:

AuthInfo:vps.transip.email "U:USERNAME" "P:PASSWORD" "M:PLAIN"

Als we dit in het bestand hebben geplaatst kunnen we een reeks aan commando's uitvoeren om ervoor zorgen dat alles geregistreerd wordt op de juiste manier en dat sendmail voortaan gebruik maakt van de zojuist ingestelde SMTP-relay server!

sudo makemap hash authinfo < authinfo
sudo /etc/mail/Makefile
service sendmail restart

Laravel

Nu is onze enige vraag dat overblijft hoe we verbinding kunnen maken met Sendmail binnen onze Laravel applicatie(s). Dat doen we door de volgende .env instellingen toe te passen:

MAIL_DRIVER="sendmail"
MAIL_HOST=localhost
MAIL_PORT=587
MAIL_ENCRYPTION="tls"
MAIL_FROM_ADDRESS="[email protected]"
MAIL_FROM_NAME="CodeBros Web Development"

We hoeven op deze manier geen gebruikersnamen en wachtwoorden in te stellen, doordat we met onze interne mailserver verbinding maken. De interne mailserver maakt op diens beurt weer gebruik van de door ons ingestelde SMTP-server en neemt het versturen van e-mails verder op zich.

Zo installeer jij dus SendMail om te gebruiken in jouw Laravel projecten!