Python kan e-mail versturen zonder iets te installeren. De standaardbibliotheek bevat smtplib voor de SMTP-verbinding en email.message.EmailMessage voor het opbouwen van het bericht, dus een werkend script is zo'n vijftien regels. Hieronder staat dat script met TLS correct ingesteld, gevolgd door de argumenten om over te stappen naar een HTTP API zodra er echt verkeer komt.
Hoe verstuur je e-mail met de standaardbibliotheek?
EmailMessage bouwt het bericht op en stelt de headers voor je in. smtplib.SMTP_SSL opent een versleutelde verbinding op poort 465:
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg["From"] = "you@yourdomain.com"
msg["To"] = "recipient@example.org"
msg["Subject"] = "Your receipt"
msg.set_content("Thanks for your order. This is the plain-text version.")
msg.add_alternative("<p>Thanks for your order.</p>", subtype="html")
with smtplib.SMTP_SSL("smtp.example.com", 465) as server:
server.login("smtp-user", "smtp-password")
server.send_message(msg)
set_content schrijft de platte-tekstversie en add_alternative voegt de HTML-versie toe, zodat clients weergeven wat ze aankunnen. Beide delen meesturen is een goede gewoonte en helpt bij afleverbaarheid.
SSL of STARTTLS?
Er bestaan twee versleutelingspaden en ze gebruiken verschillende poorten. SMTP_SSL op 465 onderhandelt TLS vanaf de eerste byte. Het alternatief is gewone SMTP op 587 gevolgd door starttls(), die een onversleutelde verbinding upgradet:
with smtplib.SMTP("smtp.example.com", 587) as server:
server.starttls()
server.login("smtp-user", "smtp-password")
server.send_message(msg)
Kies op basis van wat je mailserver ondersteunt. Verstuur geen inloggegevens over een onversleutelde verbinding. Bewaar de gebruikersnaam en het wachtwoord in omgevingsvariabelen, uitgelezen met os.environ, niet hard-coded.
Hoe voeg je een bijlage toe?
add_attachment neemt de bytes plus een MIME-type. Lees het bestand in binaire modus:
with open("invoice.pdf", "rb") as f:
msg.add_attachment(
f.read(),
maintype="application",
subtype="pdf",
filename="invoice-1042.pdf",
)
Waarom overstappen van raw SMTP voor productie?
Het script werkt, maar productie brengt problemen met zich mee die de standaardbibliotheek niet oplost. Je hebt een mailserver nodig met een schone IP-reputatie, correcte SPF-, DKIM- en DMARC-records, logica om bij tijdelijke fouten opnieuw te proberen, en een manier om bounces en klachten te bekijken. Een HTTP API dekt dat allemaal af. Je authenticeert met een key, verstuurt JSON en leest gestructureerde responses in plaats van SMTP-statuscodes te parsen.
Versturen met Bird
De Bird Python SDK verstuurt hetzelfde bericht zonder de SMTP-plumbing:
import bird
client = bird.Bird(api_key=os.environ["BIRD_API_KEY"])
data, error = client.emails.send(
from_="you@yourdomain.com",
to="delivered@bird.dev",
subject="Hello from Python",
html="<p>It works.</p>",
)
Het delivered@bird.dev-sandboxadres accepteert altijd mail, dus de eerste run bevestigt je key en payload voordat je naar echte ontvangers stuurt. De SDK geeft een (data, error)-paar terug, wat foutafhandeling expliciet houdt in plaats van SMTP-exceptions te vangen. Als PHP meer je taal is, behandelt de PHPMailer-walkthrough het equivalent in dat ecosysteem.
FAQ
Moet ik iets installeren om e-mail te versturen in Python?
Nee. smtplib en email.message zitten in de standaardbibliotheek, dus een eenvoudige SMTP-verzending heeft geen packages nodig. Je voegt pas een dependency toe als je een client op hoger niveau wilt of een HTTP API.
Wat is het verschil tussen poort 465 en 587?
Poort 465 verwacht TLS vanaf het begin, wat smtplib.SMTP_SSL afhandelt. Poort 587 begint onversleuteld en upgradet met starttls(). Beide zijn uiteindelijk versleuteld; ze onderhandelen het alleen op een ander moment.
Wanneer stap je over van smtplib naar een API?
Wanneer afleverbaarheid, opnieuw proberen en event-tracking belangrijk voor je zijn. De standaardbibliotheek verstuurt een bericht; ze beheert geen reputatie en rapporteert niet wat er na de overdracht gebeurt. Een API zoals Bird email dekt die laag af.
Voor de volledige request- en response-structuur loopt de gids voor het versturen van e-mail de API van begin tot eind door.