V této lekci budu sdílet skript, který používám k odesílání e-mailů uživatelům aplikací, které vytvářím, a dalších.
Co budeme dělat?
Vytvoříme jednoduchý program v Pythonu, který provede následující:
- Pro návrh e-mailu použijte soubor šablony, který vytvoříme. Bude to pouze textový soubor s hodnotami zástupných znaků.
- Získejte jméno a e-mail osoby z jiného textového souboru, který vytvoříme.
Díky těmto bodům je tento program mnohem blíže skutečnému používání odesílání e-mailů ve vašich aplikacích. Začněme.
Soubor pro e-maily
Soubor, který obsahuje e-maily pro uživatele, bude vypadat takto:
Shubham shubham.code @ gmail.comJedná se pouze o jednoduchý textový soubor, který obsahuje jméno uživatele a e-mail oddělené mezerou. Do nového řádku bylo vloženo několik e-mailů s daty každého uživatele. Pojmenovali jsme tento soubor uživatelů.txt.
Použití šablony
Pojďme rychle definovat šablonu, kterou budeme v našem skriptu používat k nahrazování hodnot:
Dobrý den, $ PERSON_NAME,Tento e-mail jsme odeslali pomocí modulu Python smtplib. Super, správně?
Přeji jasný den!
Na zdraví
Použili jsme řetězec šablony $ PERSON_NAME který bude nahrazen jménem osoby, kterou získáme od uživatelů.soubor txt při odesílání e-mailu.
Získávání uživatelských dat ze souboru
Prvním krokem k odeslání e-mailu uživateli je určit, kam chceme e-maily poslat. Pojďme napsat funkci Pythonu, která přijme název souboru a vrátí nám uživatelské jméno a ID e-mailu, kam je třeba odesílat e-maily:
def get_users_data (název_souboru):jméno_uživatele = []
user_email = []
s otevřeným (file_name, mode = 'r', encoding = 'utf-8') jako user_file:
pro user_info v user_file:
uživatelské_jméno.připojit (user_info.split () [0])
user_email.připojit (user_info.split () [1])
vrátit uživatelské jméno, uživatelský e-mail
S touto funkcí pouze vrátíme uživatelská jména a e-maily, které dostaneme ze souboru.
Získání objektu šablony
Nyní můžeme analyzovat naši šablonu a získat objekt šablony z textového souboru, který jsme vytvořili:
def read_template (název_souboru):s otevřeným (file_name, 'r', encoding = 'utf-8') jako msg_template:
msg_template_content = msg_template.číst()
vrátit šablonu (msg_template_content)
Tímto způsobem získáme zpět objekt Template, který můžeme použít k analýze obsahu souboru a provedení nezbytných náhrad za řetězce šablony, jako je jméno uživatele.
Jak probíhá odesílání e-mailů?
Teď, když jsme připraveni na návrh šablony a data uživatele, musíme pochopit, jak se e-mail uživateli skutečně odesílá:
- Vytvořte připojení SMTP s přihlašovacími údaji pro účet odesílatele
- Vytvořte vícedílnou hlavičku s informacemi pomocí polí Od, Do a Předmět
- Vytvořte tělo zprávy, které je třeba odeslat
- Odešlete e-mail s objektem připojení SMTP
Nastavení připojení SMTP
Pojďme konečně definovat funkci, která pošle e-mail určeným uživatelům. Zde je funkce:
def main ():user_name, user_email = get_users_data ('uživatelé.txt ') # přečíst podrobnosti o uživateli
message_template = read_template ('zpráva.txt ')
# nastavit server SMTP
smtplib_server = smtplib.SMTP (hostitel = 'smtp.gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.přihlášení (SEND_FROM, EMAIL_PWD)
# Získejte podrobnosti o každém uživateli a pošlete e-mail:
pro jméno, e-mail ve formátu zip (uživatelské_jméno, uživatelský_e-mail):
multipart_message = MIMEMultipart () # vytvořit zprávu
# přidejte do šablony zprávy skutečné jméno osoby
msg = message_template.náhradník (PERSON_NAME = jméno.titul())
# Vytiskne tělo zprávy kvůli nám
tisk (zpráva)
# nastavení parametrů zprávy
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-mail
multipart_message ['Subject'] = "LinuxHint Email"
# přidat do těla zprávy
multipart_message.attach (MIMEText (msg, 'plain'))
# odeslat zprávu přes dříve nastavený server.
smtplib_server.send_message (multipart_message)
del multipart_message
# Ukončete relaci SMTP a ukončete připojení
smtplib_server.přestat()
Ve výše uvedené funkci jsme sledovali každý krok, který jsme uvedli v předchozí části. Vytvořili jsme připojení SMTP a použili jej k odeslání e-mailu.
Kompletní program
V závěrečné části se podívejme na kompletní program, který lze použít k odeslání e-mailu určenému uživateli:
importovat smtplibz šablony importu řetězce
z e-mailu.mim.vícedílný import MIMEMultipart
z e-mailu.mim.textový import MIMEText
SEND_FROM = 'my-email-here'
EMAIL_PWD = 'moje-heslo-zde'
def get_users_data (název_souboru):
jméno_uživatele = []
user_email = []
s otevřeným (file_name, mode = 'r', encoding = 'utf-8') jako user_file:
pro user_info v user_file:
uživatelské_jméno.připojit (user_info.split () [0])
user_email.připojit (user_info.split () [1])
vrátit uživatelské jméno, uživatelský e-mail
def read_template (název_souboru):
s otevřeným (file_name, 'r', encoding = 'utf-8') jako msg_template:
msg_template_content = msg_template.číst()
vrátit šablonu (msg_template_content)
def main ():
user_name, user_email = get_users_data ('uživatelé.txt ') # přečíst podrobnosti o uživateli
message_template = read_template ('zpráva.txt ')
# nastavit server SMTP
smtplib_server = smtplib.SMTP (hostitel = 'smtp.gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.přihlášení (SEND_FROM, EMAIL_PWD)
# Získejte podrobnosti o každém uživateli a pošlete e-mail:
pro jméno, e-mail ve formátu zip (jméno_uživatele, e-mail uživatele):
multipart_message = MIMEMultipart () # vytvořit zprávu
# přidejte do šablony zprávy skutečné jméno osoby
msg = message_template.náhradník (PERSON_NAME = jméno.titul())
# Vytiskne tělo zprávy kvůli nám
tisk (zpráva)
# nastavení parametrů zprávy
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-mail
multipart_message ['Subject'] = "LinuxHint Email"
# přidat do těla zprávy
multipart_message.attach (MIMEText (msg, 'plain'))
# odeslat zprávu přes dříve nastavený server.
smtplib_server.send_message (multipart_message)
del multipart_message
# Ukončete relaci SMTP a ukončete připojení
smtplib_server.přestat()
pokud __name__ == '__main__':
hlavní()
Když spustíme tento program s ID služby Gmail, můžete narazit na takový problém:
Chyba SMTP Gmailu
Důvodem je, že Gmail neumožňuje prostým skriptům používat Gmail API. Možná budete muset ve svém účtu Gmail deaktivovat bezpečnostní přihlášení. Přečtěte si o tom, jak to udělat pro Gmail, zde.
Závěr
V této lekci jsme se podívali na to, jak můžeme posílat e-maily pomocí Pythonu smtplib modul.