Jak wysłać email z Python do Mailtrap.

Posted in 5 kwietnia, 2020 by

Categories: Oprogramowanie Programowanie Python

Tags: , , ,

Reading Time: 4 minutes

Postanowiłem w tym blog poście poruszyć temat wysyłania e-maili z poziomu skryptu języka Python do skrzynki Mailtrap.io. Z tym darmowym serwisem do developmentu z zakresu e-maili miałem już styczność przy okazji uczenia się PHP. W języku Python wygląda to tylko trochę inaczej.

Zakładanie konta na Mailtrap.

Na początku zakładamy sobie konto na Mailtrap.io. Jest to bardzo proste, wystarczy że zdefiniujemy hasło oraz nazwę użytkownika. Mailtrap nie wymaga od nas wpisywania żadnych danych karty kredytowej, jest to darmowy serwis do testowania developmentu z zakresu e-mail.

Niestety darmowe konto ma ograniczenia, ale do naszych celów jest to konto wystarczające.

Darmowe konto można także założyć poprzez swoje konto Google bądź konto Github jednak nie testowałem tych opcji.

Wysyłanie wiadomości e-mail tekstem w Python.

Aby wysłać e-mail z poziomu skryptu Python importujemy moduł smtplib na samej górze skryptu.

import smtplib

Następnie określamy podstawowe zmienne do wysłania e-maila. Potrzebujemy określić skąd wysyłamy, gdzie wysyłamy, co wysyłamy a więc definiujemy te zmienne.

mailFrom = "Mateusz - Python Student"
mailTo = ["contact@mstem.net", "python_test@mstem.net"]
mailSubject = "Sending an email test in Python"
messageBody = '''
Hello,

This is test message send from Python script. If you read it it tells that the Python script works well.

Cheers,
Mateusz
'''

message = '''From: {}
Subject: {}

{}
'''.format(mailFrom, mailSubject, messageBody)

Potrzebujemy jeszcze danych autoryzacyjnych do serwera Mailtrap. Kiedy zalogujemy się do tego serwisu, będąc w skrzynce pocztowej klikamy na Home, później na ikonkę gear po prawej stronie i wtedy zostaniemy przeniesieni do wiadomości z Credentials, czyli naszymi danymi uwierzytelniającymi.

Poniżej zamieszczam screenshot-y:

Kiedy znamy już nasze dane, takie jak user oraz password do serwera SMTP, definiujemy zmienne w naszym skrypcie.

user = "user_z_credentials"
password = "password_z_credentials"

Na końcu wysyłamy email na skrzynkę Mailtrap za pomocą bloku try – except jak na listingu poniżej:

try:
    server = smtplib.SMTP("smtp.mailtrap.io", 2525)
    server.ehlo()  # Przywitanie z serwerem
    server.login(user, password)
    server.sendmail(user, mailTo, message)
    server.close()
    print("Mail sent.")
except ConnectionRefusedError:
    print('Failed to connect to the server. Bad connection settings?')
except smtplib.SMTPServerDisconnected:
    print('Failed to connect to the server. Wrong user/password?')
except smtplib.SMTPException as e:
    print('SMTP error occurred: ' + str(e))

W danych Credentials na Mailtrap znajdziemy jeszcze hosta oraz port który musimy wpisać do metody SMTP. Warunki except wywołają się gdy nasza wiadomość nie zostanie dostarczona, lub gdy wpisaliśmy niepoprawne dane uwierzytelniające.

Jeśli wszystko zadziałało poprawnie powinniśmy otrzymać komunikat w konsoli “Mail sent.”.

Wysyłanie wiadomości e-mail w formacie html w Python.

Aby wysłać e-mail poprzez skrypt Python w formacie HTML należy tylko nieznacznie zmodyfikować powyższy skrypt.

Importujemy dodatkowe moduły potrzebne nam do wysłania wiadomości dwuczęściowej, czyli zwykłym tekstem oraz w formacie html.

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

Zmienna “message” będzie tym razem słownikiem zawierającym parę podstawowych elementów:

message = MIMEMultipart("alternative")
message["Subject"] = "Sending an email test in Python"
message["From"] = "mateusz.hyla.test@gmail.com"
message["To"] = "mstem.net.test@gmail.com"

Nie ma znaczenia zbytnio jaki email wpiszemy w pole “From” oraz w pole “To”. I tak nasza wiadomość e-mail ląduje w skrzynce Mailtrap, bez względu na to jaki email wpiszemy.

Następnie definiujemy zmienne “text” oraz “html” czyli body naszego e-maila.

text = """
Hello,
This is test message in plain text send by Python Script. If you are reading this script works well.
Cheers,
Mateusz
"""

html = """
<html>
  <body>
    <h1>Hello,</h1>
    <p>This is test message in HTML format send by Python Script. If you are reading this script works well.</p>
    <p><a href="https://www.mstem.net">Return to my blog clicking here.</a></p>
    <p>Cheers,<br>
       Mateusz Hyla</p>
  </body>
</html>
"""

Na końcu dołączamy do naszej wiadomości e-mail zdefiniowane zmienne “text” oraz “html”.

part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")
message.attach(part1)
message.attach(part2)

Reszta różni się tylko jedną linijką kodu wysłania wiadomości na serwer, od kodu wysyłania wiadomości normalnym tekstem, czyli:

server.sendmail(message["From"], message["To"], message.as_string())

Po wysłaniu wiadomości, także powinniśmy w konsoli otrzymać powiadomienie “Mail sent.” co oznacza że wszystko przebiegło poprawnie.

Podsumowanie.

Zachęcam do zapoznania się z tym artykułem na stronie Mailtrap, o tym jak wysłać email z poziomu skryptu Python. Jest tam o wiele więcej informacji na ten temat.

Jeśli spodobał ci się ten artykuł to zachęcam do przeczytania artykułu o implementacjach z dziedziny matematyki w Python na moim blogu.

Jeśli znalazłeś jakiś błąd w tym artykule, to możesz się nim podzielić w komentarzu, bądź wysłać do mnie prywatną wiadomość poprzez formularz na stronie.

Powodzenia w nauce kodowania w języku Python. Cześć :-).


Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

3 × four =