SMTP voor Python — mail uit uw script of Django-app die aankomt
Python heeft SMTP ingebouwd: met smtplib verstuurt u een bericht in een handvol regels, en Django bundelt dat in een eigen mail-laag met EMAIL-instellingen. Wat geen van beide levert, is afleverbaarheid — die hangt af van de server waarlangs u verstuurt.
Of u nu een los script, een Flask-app of een Django-project hebt: de instellingen zijn dezelfde vijf gegevens. U wijst ze naar uw relay en de code die de berichten opbouwt, blijft ongewijzigd.
Waarom het misgaat zonder relay
Python-mail komt vaak uit de achtergrond: een nachtelijk rapport, een cron-taak die facturen verstuurt, een script dat waarschuwt wanneer een meting buiten de marge valt. Niemand zit erop te kijken — en dus merkt niemand dat de ontvangende server ze stilletjes weigert. Bij Django komt daar de klassieke livegang-verrassing bij: in ontwikkeling gaat alles naar de console, in productie naar echte providers die wél op reputatie controleren.
SMTP instellen in Python
Gegevens ophalen
Log in op uw 2mail-account en haal daar uw SMTP-server, gebruikersnaam en wachtwoord op.
Invullen in Python
In een Django-project zet u de EMAIL-instellingen in de settings: de SMTP-backend als e-mailbackend, de host van de relay, poort 587, de STARTTLS-optie aan, de gebruikersnaam en het wachtwoord, en een standaard afzenderadres op uw eigen domein. Werkt u rechtstreeks met smtplib, dan maakt u verbinding met de host op poort 587, roept u starttls aan, logt u in met gebruikersnaam en wachtwoord en verstuurt u daarna het bericht. Lees de gegevens in beide gevallen uit omgevingsvariabelen, niet uit de code.
Domein authenticeren
Zorg dat SPF, DKIM en DMARC voor uw domein correct staan, zodat ontvangers kunnen verifiëren dat de mail van u komt.
Testen
Verstuur 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 Python 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. |
| Poort | De poort die bij uw gekozen versleuteling hoort; uw account toont welke. |
| Versleuteling | TLS. Verstuur nooit onversleuteld — uw inloggegevens gaan anders leesbaar over de lijn. |
| Gebruikersnaam | De SMTP-login van uw 2mail-account. |
| Wachtwoord | Het bijbehorende wachtwoord. Gebruik nooit het wachtwoord van een mailbox van een medewerker. |
Welke mails Python verstuurt
Zodra de relay ingesteld is, lopen deze allemaal via 2mail — u hoeft ze niet stuk voor stuk te configureren.
Valkuilen bij Python
TLS-optie en poort moeten kloppen
Django kent twee aparte TLS-instellingen: één voor STARTTLS en één voor TLS vanaf het begin. Zet enkel de STARTTLS-instelling aan; die hoort bij poort 587. Beide tegelijk geeft een configuratiefout; geen van beide stuurt uw login onversleuteld, en dat weigert een relay terecht.
Eén verbinding per reeks, niet per bericht
Een script dat voor elk van duizend berichten een nieuwe SMTP-verbinding opent, gedraagt zich als een aanvaller. Open één verbinding, verstuur de reeks, sluit af. Django heeft daarvoor een functie om meerdere berichten over één verbinding te sturen.
Stille fouten in achtergrondtaken
Een uitzondering in een cron-taak verdwijnt in een logbestand dat niemand leest. Vang fouten bij het versturen op en meld ze ergens waar ze opvallen — en koppel de webhooks van 2mail voor aflevering en bounce, zodat u ook ziet wat ná de overdracht misloopt.
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.