Wat heb je nodig om een e-mail met Python te verzenden? Wat basis programmeren en web kennis samen met de elementaire Python vaardigheden. We gaan ervan uit dat je al een web app gebouwd met deze taal en nu moet je de functionaliteit uit te breiden met meldingen of andere e-mails verzenden. Deze tutorial zal u begeleiden door de meest essentiële stappen van het verzenden van e-mails via een SMTP-server:

  1. een server configureren voor testen (weet u waarom het belangrijk is?,)
    • lokale SMTP-server
    • mailtrap fake SMTP-server
  2. verschillende soorten e-mails: HTML, met afbeeldingen en bijlagen
  3. het verzenden van meerdere gepersonaliseerde e-mails (Python is van onschatbare waarde voor e-mailautomatisering)
  4. enkele populaire e-mailverzenopties zoals Gmail en transactionele e-mailservices

met tal van code-voorbeelden!

opmerking: geschreven en getest op Python 3.7.2.

een e-mail versturen met SMTP

Het eerste goede nieuws over Python is dat het een ingebouwde module heeft voor het verzenden van e-mails via SMTP in de standaardbibliotheek., Er zijn geen extra installaties of trucs nodig. U kunt de module importeren met de volgende instructie:

import smtplib

om er zeker van te zijn dat de module correct is geïmporteerd en de volledige beschrijving van de klassen en argumenten te krijgen, typt u een interactieve Python-sessie:

help(smtplib)

bij de volgende stap zullen we het hebben over servers: de juiste optie kiezen en deze configureren.,

SMTP-server voor het testen van e-mails in Python

bij het maken van een nieuwe app of het toevoegen van een functionaliteit, vooral wanneer u dit voor de eerste keer doet, is het essentieel om te experimenteren op een testserver. Hier is een korte lijst met redenen:

  1. u zult de inboxen van uw vrienden en klanten niet raken. Dit is van vitaal belang wanneer u bulk e-mail verzenden testen of werken met een e-mail database.
  2. u zult uw eigen postvak IN niet overspoelen met het testen van e-mails.
  3. uw domein zal niet op de zwarte lijst staan voor spam.,

lokale SMTP-server

Als u liever in de lokale omgeving werkt, kan de lokale SMTP-debugserver een optie zijn. Hiervoor biedt Python een smtpd module aan. Het heeft een Debuggerserver functie, die de berichten die u verzendt zal verwerpen en ze zal afdrukken naar stdout. Het is compatibel met alle besturingssystemen.,

Stel uw SMTP-server in op localhost:1025

python -m smtpd -n -c DebuggingServer localhost:1025

om SMTP-server op poort 25 te kunnen draaien, hebt u root-rechten nodig:

sudo python -m smtpd -n -c DebuggingServer localhost:25

Het zal u helpen te controleren of uw code werkt en de mogelijke problemen aan te geven als die er zijn. Het geeft u echter niet de mogelijkheid om te controleren hoe uw HTML-e-mailsjabloon wordt weergegeven.,

Fake SMTP server

Fake SMTP-server imiteert het werk van een echte webserver van derden. In verdere voorbeelden in deze post, zullen we Mailtrap gebruiken. Naast het testen van e-mail verzenden, zal het ons laten controleren hoe de e-mail zal worden gerenderd en weergegeven, bekijken de bericht ruwe gegevens evenals zal ons voorzien van een spam-rapport., Mailtrap is heel eenvoudig in te stellen: je hoeft alleen maar de referenties die door de app en plak ze in uw code te kopiëren.

zo ziet het er in de praktijk uit:

Mailtrap maakt het nog eenvoudiger. Ga naar de integraties sectie op het tabblad SMTP instellingen en krijg de kant-en-klare sjabloon van het eenvoudige bericht, met uw mailtrap referenties erin., Het is de meest basale optie om je Python script te instrueren over wie wat stuurt naar wie de sendmail() instance methode is:

probeer Mailtrap gratis

de code ziet er vrij eenvoudig uit, toch? Laten we het eens van dichterbij bekijken en wat foutafhandeling toevoegen (zie de #uitleg daartussen). Om fouten op te vangen, gebruiken we de “proberen” en “behalve” blokken. Raadpleeg de documentatie voor de lijst met uitzonderingen hier.,

zodra u het verzonden resultaat in de Shell krijgt, ziet u uw bericht in uw Mailtrap-inbox:

het versturen van HTML-e-mail

in de meeste gevallen kunt u u moet wat opmaak, links of afbeeldingen toevoegen aan uw e-mailmeldingen. We kunnen deze allemaal gewoon zetten met de HTML-inhoud. Voor dit doel heeft Python een e-mailpakket.

We behandelen het MIME-berichttype, dat HTML en platte tekst kan combineren. In Python wordt het afgehandeld door de e-mail.mime module.,

Het is beter om een tekstversie en een HTML-versie afzonderlijk te schrijven en ze vervolgens samen te voegen met de instantie MIMEMultipart(“alternative”). Het betekent dat een dergelijk bericht twee rendering opties dienovereenkomstig heeft. In het geval dat een HTML om een of andere reden niet met succes wordt gerenderd, zal een tekstversie nog steeds beschikbaar zijn.

Input:

Output:

e-mails versturen met bijlagen in Python

de volgende stap in het masteren van e-mails versturen met Python is het toevoegen van bestanden., Bijlagen zijn nog steeds de MIME objecten maar we moeten ze coderen met de base64 module. Een paar belangrijke punten over de bijlagen:

  1. Python laat je tekstbestanden, afbeeldingen, audiobestanden en zelfs toepassingen toevoegen. Je hoeft alleen maar de juiste e-mail klasse te gebruiken, zoals e-mail.MIME.audio.MIMEAudio of e-mail.MIME.afbeelding.MIMEImage. Voor de volledige informatie, refereer je naar deze sectie van de Python documentatie. Je kunt ook de voorbeelden van Python controleren voor een beter begrip.
  2. onthoud over de bestandsgrootte: het verzenden van bestanden boven 20MB is een slechte gewoonte.,

in transactionele e-mails worden de PDF-bestanden het meest gebruikt: we krijgen meestal ontvangstbewijzen, tickets, instapkaarten, orderbevestigingen, enz. Laten we dus eens kijken hoe je een instapkaart als PDF-bestand verzendt.

Input:

om meerdere bestanden bij te voegen, kunt u het bericht aanroepen.attach () methode meerdere malen.

een e-mail versturen met afbeeldingen

afbeeldingen, zelfs als ze deel uitmaken van de berichttekst, zijn ook bijlagen., Er zijn drie soorten van hen: Cid bijlagen (ingebed als een MIME-object), base64 afbeeldingen (inline embedding), en gekoppelde afbeeldingen. We hebben hun eigenaardigheden beschreven, voors en tegens, en compatibiliteit met de meeste e-mailclients in dit bericht.

laten we naar voorbeelden gaan.

Voor het toevoegen van een CID-bijlage, zullen we een MIME multipart-bericht aanmaken met MIMEImage-component:

Output:

de CID-afbeelding wordt zowel als onderdeel van het HTML-bericht en als bijlage., Berichten met dit afbeeldingstype worden vaak als spam beschouwd: controleer het tabblad Analytics in Mailtrap om de spamsnelheid en aanbevelingen over de verbetering ervan te zien. Veel e – mailclients – Gmail in het bijzonder-niet CID beelden in de meeste gevallen weer te geven. Dus laten we eens kijken hoe je een base64 gecodeerde afbeelding insluit.

Hier zullen we base64 module gebruiken en experimenteren met hetzelfde afbeeldingsbestand:

Output:

nu is de afbeelding ingebed in het HTML-bericht en is niet beschikbaar als bijlage dossier., Python heeft onze JPG-afbeelding gecodeerd, en als we naar het tabblad HTML-bron gaan, zien we de lange afbeeldingsdatastring in de img src.

hoe stuur je meerdere e-mails in Python

meerdere e-mails verzenden naar verschillende ontvangers en ze persoonlijk maken is het bijzondere van e-mails in Python.

om meerdere ontvangers toe te voegen, kunt u gewoon hun adressen typen, gescheiden door een komma, CC en BCC toevoegen. Maar als je werkt met een bulk e-mail verzenden, Python bespaart u met loops.

een van de opties is om een database aan te maken in a .,csv formaat (we gaan ervan uit dat het is opgeslagen in dezelfde map als uw Python script).

we zien onze namen vaak in transactionele of zelfs promotionele voorbeelden. Hier is hoe we het kunnen maken met Python.

laten we de lijst organiseren in een eenvoudige tabel met slechts twee kolommen: naam en e-mailadres. Het zou eruit moeten zien als het volgende voorbeeld:

#name,emailJohn Johnson,[email protected] Peterson,[email protected]

de onderstaande code zal het bestand openen en de rijen regel voor regel doorlopen, waarbij {naam} wordt vervangen door de waarde uit de kolom” Naam”.,

Input:

Na het uitvoeren van het script, krijgen we het volgende antwoord:

Sent to John JohnsonSent to Peter Peterson>>> 

Output:

In onze Mailtrap inbox, zien we twee berichten: een voor John Johnson en andere voor Peter Peterson, geleverd tegelijkertijd:

het Verzenden van e-mails met Python via Gmail

Wanneer u klaar bent voor het verzenden van e-mails naar echte ontvangers, kunt u uw productie server. Het hangt ook af van uw behoeften, doelen en voorkeuren: Uw localhost of een externe SMTP.,

een van de meest populaire opties is Gmail dus laten we eens een kijkje nemen op het.

we zien vaak titels als”een Gmail-account instellen voor ontwikkeling”. In feite, het betekent dat u een nieuwe Gmail-account aan te maken en zal het gebruiken voor een bepaald doel.

om e-mails te kunnen verzenden via uw Gmail-account, moet u er toegang toe bieden voor uw toepassing. U kunt minder veilige apps toestaan of gebruikmaken van het OAuth2-autorisatieprotocol. Het is een veel moeilijker, maar aanbevolen vanwege de veiligheidsredenen.,

verder, om een Gmail-server te gebruiken, moet u weten:

  • de servernaam = smtp.gmail.com
  • port = 465 voor SSL / TLS-verbinding (voorkeur)
  • of port = 587 voor STARTTLS-verbinding.
  • gebruikersnaam = uw Gmail e-mailadres
  • wachtwoord = Uw wachtwoord.

als je naar eenvoud neigt, dan kun je Yagmail gebruiken, de dedicated Gmail/SMTP. Het maakt e-mail verzenden echt gemakkelijk., Vergelijk de bovenstaande voorbeelden met deze verschillende regels code:

transactionele e-maildiensten

Gmail is gratis en wordt veel gebruikt, maar het heeft nog steeds beperkingen voor het verzenden van e-mail. Als uw behoeften veel verder gaan dan de Gmail-regels, kunt u kiezen uit een van de opties voor transactionele services of, zoals ze ook worden genoemd, e-mail API-services.

Python wordt ondersteund door de overgrote meerderheid van de vertrouwde e-mail API ‘ s, zodat u kunt kiezen op basis van uw voorkeuren en budget.,

Hier zijn enige aanwijzingen over het verzenden van e-mails met Python door de lijst van de meest populaire diensten:

  • Amazon SES
  • Mailgun
  • Mandrill
  • Poststempel
  • Sendgrid
  • SocketLabs

Volgende stappen met e-mails in Python

We hebben aangetoond fundamentele opties van het versturen van e-mails met Python, te beschrijven van de logica en een bereik van zijn mogelijkheden. Om geweldige resultaten te krijgen, raden we aan om de Python documentatie te bekijken en gewoon te experimenteren met je eigen code!,

Er zijn een aantal verschillende Python frameworks en bibliotheken, die het maken van apps eleganter en toegewijder maken. In het bijzonder, sommige van hen kunnen helpen bij het verbeteren van uw ervaring met het bouwen van e— mails verzenden functionaliteit:

de meest populaire frameworks zijn:

  1. kolf, die een eenvoudige interface biedt voor e-mail verzenden-kolf Mail.
  2. Django, wat een geweldige optie kan zijn voor het bouwen van HTML-sjablonen. (En hier is onze tutorial over het verzenden van e-mails met Django).
  3. Zope is handig voor website ontwikkeling.,
  4. Marrow Mailer is een dedicated Mail delivery framework dat verschillende handige configuraties toevoegt.
  5. Plotly en zijn Dash kunnen helpen met het mailen van grafieken en rapporten.