E-mails versturen met curl en SMTP

E-mails versturen met curl en SMTP

Inleiding

Met een simpele commandoregeltool kun je rechtstreeks e‑mail versturen via een SMTP‑server. Curl, bekend van HTTP‑requests, ondersteunt ook het SMTP‑protocol. Dit maakt snelle tests en geautomatiseerde meldingen mogelijk zonder extra libraries.

Waarom curl voor SMTP?

  • Geen extra installatie: curl zit vaak al op Linux‑ en macOS‑systemen.
  • Uniforme syntax: dezelfde tool voor web‑ en mail‑verkeer.
  • Scripting: makkelijk te integreren in Bash‑scripts of CI‑pipelines.

Basisopdracht

Een minimale curl‑call ziet er zo uit:

curl smtp://mail.example.com -u gebruiker:wachtwoord -T mail.txt
  • smtp://mail.example.com – adres van de SMTP‑server.
  • -u gebruiker:wachtwoord – basis‑authenticatie.
  • -T mail.txt – bestand met volledige e‑mail (headers + body).

Opbouw van het e‑mailbestand

Het bestand moet een geldige RFC‑822‑structuur hebben:

From: afzender@example.com
To: ontvanger@example.com
Subject: Testmail via curl

Dit is de tekst van de e‑mail.

Zorg voor een lege regel tussen de header‑sectie en de bericht‑body.

Veilige verbinding (TLS/STARTTLS)

Voor versleutelde verzending gebruik je smtps:// of smtp:// met --mail-rcpt en --starttls:

curl smtps://mail.example.com:465 -u gebruiker:wachtwoord -T mail.txt

of

curl smtp://mail.example.com:587 --mail-rcpt ontvanger@example.com \
     --mail-from afzender@example.com \
     --starttls smtp -u gebruiker:wachtwoord -T mail.txt
  • Port 465 = directe TLS.
  • Port 587 = STARTTLS (upgrade na clear‑text connectie).

Meerdere ontvangers

Gebruik meerdere --mail-rcpt opties:

curl smtp://mail.example.com -u gebruiker:wachtwoord \
     --mail-rcpt eerste@voorbeeld.com \
     --mail-rcpt tweede@voorbeeld.com \
     -T mail.txt

Curl voegt de juiste RCPT TO‑regels toe.

Bijlagen toevoegen

Curl kan multipart‑berichten genereren met --upload-file en --form:

curl -v --url smtps://mail.example.com:465 \
     --mail-from afzender@example.com \
     --mail-rcpt ontvanger@example.com \
     -u gebruiker:wachtwoord \
     -F "=mail.txt;type=text/plain" \
     -F "attachment=@/pad/naar/bestand.pdf;type=application/pdf"

Hiermee wordt een MIME‑multipart bericht met een PDF‑bijlage verstuurd.

Veelvoorkomende valkuilen

  • Ontbrekende lege regel tussen headers en body leidt tot foutieve parsing.
  • Authenticatie‑methode: sommige servers eisen LOGIN of PLAIN; curl kiest automatisch, maar kan met --auth aangepast worden.
  • TLS‑certificaat: bij zelf‑ondertekende certificaten moet -k (insecure) of --cacert gebruikt worden.

Praktisch scriptvoorbeeld

#!/bin/bash
SMTP="smtp://mail.example.com:587"
USER="gebruiker"
PASS="wachtwoord"
FROM="afzender@example.com"
TO="ontvanger@example.com"
SUBJECT="Automatische melding"
BODY="Dit is een automatisch gegenereerde e‑mail."

# Maak tijdelijk mailbestand
TMP=$(mktemp)
echo "From: $FROM" > $TMP
echo "To: $TO" >> $TMP
echo "Subject: $SUBJECT" >> $TMP
echo >> $TMP
echo "$BODY" >> $TMP

curl "$SMTP" --starttls smtp \
     -u "$USER:$PASS" \
     --mail-from "$FROM" \
     --mail-rcpt "$TO" \
     -T "$TMP"

rm "$TMP"

Dit script kan in cron worden gezet voor periodieke meldingen.

Conclusie

Curl biedt een lichte, krachtige manier om e‑mails via SMTP te versturen. Met TLS, meerdere ontvangers en bijlagen kun je vrijwel elke eenvoudige mail‑use‑case afhandelen zonder extra software. Perfect voor hack‑tastics, monitoring en snelle tests.