SMTP instellen met Python

Wesender ondersteunt SMTP via STARTTLS op poort 587. Hieronder vind je voorbeelden voor puur Python (smtplib), Django en Flask.

Vereisten

  • Een Wesender-account met een geverifieerd domein
  • Python 3.8 of hoger
  • Je API-key uit het dashboard (Instellingen → API-sleutels)

SMTP-verbindingsgegevens

Instelling Waarde
Host smtp.wesender.nl
Poort 587
Beveiliging STARTTLS
Gebruikersnaam je API-key
Wachtwoord je API-key

Puur Python (smtplib)

Geen extra installatie nodig — smtplib is onderdeel van de standaardbibliotheek:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import os

WESENDER_API_KEY = os.environ["WESENDER_API_KEY"]

def stuur_email(naar: str, onderwerp: str, html: str, tekst: str = ""):
    bericht = MIMEMultipart("alternative")
    bericht["Subject"] = onderwerp
    bericht["From"]    = "noreply@mijndomein.nl"
    bericht["To"]      = naar

    if tekst:
        bericht.attach(MIMEText(tekst, "plain"))
    bericht.attach(MIMEText(html, "html"))

    with smtplib.SMTP("smtp.wesender.nl", 587) as server:
        server.ehlo()
        server.starttls()
        server.login(WESENDER_API_KEY, WESENDER_API_KEY)
        server.sendmail("noreply@mijndomein.nl", naar, bericht.as_string())

# Gebruik
stuur_email(
    naar="klant@voorbeeld.nl",
    onderwerp="Welkom!",
    html="<h1>Welkom!</h1><p>Bedankt voor je aanmelding.</p>",
    tekst="Welkom! Bedankt voor je aanmelding.",
)

Django

Stap 1: settings.py aanpassen

import os

EMAIL_BACKEND        = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST           = "smtp.wesender.nl"
EMAIL_PORT           = 587
EMAIL_USE_TLS        = True   # STARTTLS
EMAIL_HOST_USER      = os.environ.get("WESENDER_API_KEY")
EMAIL_HOST_PASSWORD  = os.environ.get("WESENDER_API_KEY")
DEFAULT_FROM_EMAIL   = "noreply@mijndomein.nl"

Stap 2: E-mail versturen

from django.core.mail import send_mail, EmailMultiAlternatives

# Eenvoudige tekst-e-mail
send_mail(
    subject="Welkom bij ons platform",
    message="Bedankt voor je aanmelding.",
    from_email="noreply@mijndomein.nl",
    recipient_list=["klant@voorbeeld.nl"],
)

# HTML-e-mail
email = EmailMultiAlternatives(
    subject="Je bestelling is bevestigd",
    body="Je bestelling #1234 is bevestigd.",
    from_email="noreply@mijndomein.nl",
    to=["klant@voorbeeld.nl"],
)
email.attach_alternative(
    "<h1>Bestelling bevestigd</h1><p>Ordernummer: #1234</p>",
    "text/html"
)
email.send()

Lokaal testen: Gebruik EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" om e-mails naar de terminal te sturen zonder echte verzending.

Flask (flask-mail)

Stap 1: Installeren

pip install flask-mail

Stap 2: Configureren

from flask import Flask
from flask_mail import Mail, Message
import os

app = Flask(__name__)
app.config.update(
    MAIL_SERVER   = "smtp.wesender.nl",
    MAIL_PORT     = 587,
    MAIL_USE_TLS  = True,
    MAIL_USERNAME = os.environ["WESENDER_API_KEY"],
    MAIL_PASSWORD = os.environ["WESENDER_API_KEY"],
)
mall = Mail(app)

Stap 3: E-mail versturen

msg = Message(
    subject="Welkom!",
    sender="noreply@mijndomein.nl",
    recipients=["klant@voorbeeld.nl"],
    html="<h1>Welkom!</h1>"
)
mall.send(msg)

Foutoplossing

  • SMTPAuthenticationError — gebruik je API-key als gebruikersnaam én wachtwoord, niet je e-mailadres of dashboard-wachtwoord
  • SSLError — gebruik EMAIL_USE_TLS = True (STARTTLS op poort 587), niet EMAIL_USE_SSL = True (SSL op poort 465)
  • TimeoutError — poort 587 is geblokkeerd; controleer je firewall of server-instellingen
  • SMTPRecipientsRefused — het verzenddomein is niet geverifieerd in je Wesender-dashboard