HTML e-mails maken en verzenden met python

Emails maken en verzenden met python
Als u een nette en aantrekkelijke e-mail wil verzenden voor marketingdoeleinden of andere doeleinden, komt u al snel de algemene oplossing tegen om HTML- en CSS- code in e-mails te gebruiken. In dit bericht laten we u een codefragment zien waarmee u HTML- en e-mails kunt verzenden met behulp van python- bibliotheken. Voordat we beginnen, moet u echter weten dat er nogal weten dat er nogal wat artikelen en berichten zijn waarin wordt vermeld dat het maken van HTML e-mails een zeer slecht idee is. Dat bericht is geschreven in 2002 toen web inhoud en e-mail een stuk eenvoudiger waren, dus het is prima om tegenwoordig HTML e-mails te verzenden. Ik zou durven zeggen dat er zelfs verwacht wordt dat e-mails er mooi uitzien en dus gebruik maken van HTML en CSS. Er is veel ondersteuning binnen e-mailclients toegevoegd en u kunt zien dat het aantal HTML e-mails elke dag groeit. Mailchimp of een andere email marketing service biedt de mogelijkheid om HTML- gebaseerde emails te maken, dus als zij dat doen, dan is het ook veilig voor u om dat te doen. Het kan zo zijn dat u deze e-mails in een automated process vanuit de eCommerce shop verstuurd. Als dat het geval is dan zou ik u aanraden om het artikel van ons 5 best practices for eCommerce testing te lezen. Bent u geïnteresseerd in Test Automation? Lees dan onze gids, ‘Test Automation: nearly everything you need to know’. Er zijn een paar kanttekening waar u op moet letten. We gaan er een paar benoemen….

CSS-ondersteuning

Natuurlijk wilt u enkele CSS-stijlen in uw HTML e-mail gebruiken. Er zijn enkele verschillen met de ondersteuning van CSS in een e-mail. Ondersteuning per CSS-eigenschap kan echt verschillen per e-mailclient. Het is erg lastig en niet erg leuk om verschillende e-mailclients / portals uit te proberen. Het is het beter om eerst te zien welke HTML tags en CSS eigenschappen daadwerkelijk worden ondersteund. Dit is waarschijnlijk de beste gids voor de CSS- ondersteuning doolhof.  

Als u CSS in uw HTML e-mail wil gebruiken dan kunt u CSS in een “style” -tag in de “head” plaatsen. Een andere mogelijkheid is om een link naar het CSS- bestand te plaatsen, maar aangezien dat moet worden opgehaald en mogelijk wordt geblokkeerd bij de eerste weergave, is dat niet de beste oplossing. Hoewel niet alle stijlen correct worden weergegeven wanneer ze worden verzonden vanuit niet-Google- account, hebben sommige ontwikkelaars op de forums problemen met CSS-stijlen in de head-tag genoemd. Als u wil dat uw stijl wordt verwerkt en zichtbaar is in Gmail, is de veiligste manier om deze in de HTML tags zelf op te nemen als inline styling. Dit is niet de meest ideale situatie. Wat u het best kunt doen, is een minimal style in de HTML tags te plaatsen en de rest van CSS style tag. Deze benadering is in de onderstaande tabel gebruikt. Op deze wijze krijgt u zelfs als de style tags niet worden ondersteund toch de minimale ‘netheid op het display’.  

HTML5 DOCTYPE

De e-mails die u verzendt, worden weergegeven in de HTML5 DOCTYPE in Gmail, ongeacht welke DOCTYPE u in uw e-mail definieert. Het is belangrijk om hiervan op de hoogte te zijn, aangezien het u misschien zal verbazen dat een deel van uw code of ontwerp eruitziet zoals u had verwacht.
 

Vang e-mailclients op waar HTML e-mail niet wordt ondersteund

Bij een HTML e-mail moet u het “MIME type” van de email wijzigingen. Tegenwoordig ondersteunen bijna alle e-mailclients dit, maar het kan toch gebeuren dat u een client tegenkomt die dat niet doet. In het voorbeeld ziet u dat met een simpele instelling kunt voorkomen dat de gebruiker geen feedback krijgt. Dit is een goed voorbeeld van hoe u een alternatieve versie met alternatieve versie met platte tekst in een HTML e-mail kunt opnemen. Sommige gebruikers geven de voorkeur aan e-mails met platte tekst om veiligheidsredenen en zoals we eerder hebben opgemerkt, neemt het hacken toe.

Geef altijd een verwijzing naar de bron/online voorbeeld.

Het wordt aangeraden om altijd een voorbeeld of verwijzing naar de inhoud van de e-mail online te hebben en daarnaar te verwijzen. Voor veel aanbieders van e-mailmarketing diensten is dit doorgaans de link “bekijk deze e-mail in uw browser”. Op deze wijze kan de ontvanger niet alleen in elke situatie de inhoud zien, maar heeft u ook nog de mogelijkheid om gebruikers naar uw website of dienst te leiden. Dit is best belangrijk aangezien veel gebruikers hun e-mails op hun mobiele telefoons bekijken.

Reden en uitschrijven

U moet altijd aangeven waarom iemand een e-mail ontvangt (bijvoorbeeld geabonneerd op een nieuwsbrief), zodat de ontvanger niet het gevoel heeft dat hij zojuist spam/ongewenste marketing heeft ontvangen. Er moet ook een optie worden opgenomen om u uit te schrijven/ de e-mails niet meer te ontvangen. Dit heeft niets te maken met een vereiste om de python-code te laten werken, maar alles met bruikbaar usability en compliance. In Europa vereist GDPR dat gebruikers de mogelijkheid hebben om zich uit te schrijven en in de VS vereist CAN-SPAM deze mogelijkheid ook.

Het voorbeeld

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

def py_mail(SUBJECT, BODY, TO, FROM):
    """With this function we send out our HTML email"""

    # Create message container - the correct MIME type is multipart/alternative here!
    MESSAGE = MIMEMultipart('alternative')
    MESSAGE['subject'] = SUBJECT
    MESSAGE['To'] = TO
    MESSAGE['From'] = FROM
    MESSAGE.preamble = """
Your mail reader does not support the report format.
Please visit us online!"""

    # Record the MIME type text/html.
    HTML_BODY = MIMEText(BODY, 'html')

    # Attach parts into message container.
    # According to RFC 2046, the last part of a multipart message, in this case
    # the HTML message, is best and preferred.
    MESSAGE.attach(HTML_BODY)

    # The actual sending of the e-mail
    server = smtplib.SMTP('smtp.gmail.com:587')

    # Print debugging output when testing
    if __name__ == "__main__":
        server.set_debuglevel(1)

    # Credentials (if needed) for sending the mail
    password = "mypassword"

    server.starttls()
    server.login(FROM,password)
    server.sendmail(FROM, [TO], MESSAGE.as_string())
    server.quit()

if __name__ == "__main__":
    """Executes if the script is run as main script (for testing purposes)"""

    email_content = """
  
  


""" TO = 'receiver@email.com' FROM ='sender@mysite.com' py_mail("Test email subject", email_content, TO, FROM)

Uitleg van het voorbeeld

In het voorbeeld moet u de FROM en TO e-mailadressen en wachtwoorden wijzigen om de e-mail te verzenden. Als u Gmail niet gebruikt om de e-mail te verzenden, kunt u hier waarschijnlijk uw SMTP server settings vinden. De debugging option geeft u een idee als er iets misgaat met het verzendproces. Er zijn ook veel online berichten over het oplossen van troubleshooting met SMTP-bibliotheek van Phyton.

Het kan mogelijk zijn dat u ziet dat de in-tag-HTML-styles worden verwerkt wanneer u het voorbeeld uitvoert en uw e-mail bekijkt in uw Gmail-browser client, maar niet in de stijl die is gedefinieerd in de style tag. Bij andere klanten worden echter alle stijlen in het voorbeeld verwerkt.

Als u dit artikel nuttig vond en geïnteresseerd bent in andere testtools en talen dan hebben we een pagina met berichten over dit onderwerp.

Als al deze technische zaken u wat te veel lijken, neem dan contact met ons op. Wij zijn experts in eCommerce testing en integration testing. Wij kunnen u helpen ervoor te zorgen dat uw webshop correct functioneert tijdens de belangrijke periodes.

Wij zorgen voor:

  • Functional testing: om ervoor te zorgen dat uw website naar behoren werkt en uw reputatie bij de potentiële klant niet wordt geschaad.  
  • Penetratietesten: Om ervoor te zorgen dat hackers niet op uw website inbreken of de creditcardgegevens van klanten stelen.  
  • Performance en load testing: om ervoor te zorgen dat uw website blijft werken, zelfs als uw succesvolle marketingcampagne meer klanten trekt dan je had verwacht.
  • Test automation: helpt om uw ontwikkelingsteam gemakkelijker en sneller te laten testen.

Author: Mark Barzilay

Graduated with honors from TU Delft in 2007 studying Electrical Engineering and Media & Knowledge Engineering. Founded spriteCloud in 2009 and worked on test automation ever since, helping out small and large companies with their test automation strategy and infrastructure. Mark is also leading the development on Calliope.pro, an online platform for all your automated test results.

We’re spriteCloud, a leader in software and cybersecurity testing.

Aside from interesting articles, we also have a team of software testers that can help your organisation.

Have a look at our testing solutions.

Stay up-to-date on all things quality assurance, test automation, and cybersecurity.

Subscribe to our mailing list!