-
Notifications
You must be signed in to change notification settings - Fork 84
Prieš atliekant įvairius bandymus su laiškų siuntimu python'e, rekomenduotina susikurti tam skirtą pašto dėžutę (gmail veikia visai neblogai). Susikūrus dėžutę, leisti prie jos jungtis 'nelabai saugioms programoms'. https://myaccount.google.com/lesssecureapps čia įjunkite ON.
import smtplib # biblioteka susikalbėjimui su pašto serveriu
from email.message import EmailMessage
from slaptazodis import password # importuoju slaptažodį,
# (galima nurodyti ir tiesiai į parametrus)
# elementarios email žinutės sukūrimas:
email = EmailMessage()
email['from'] = 'Vardas Pavardė'
email['to'] = '[email protected]'
email['subject'] = 'email from python'
email.set_content('Sveiki adresate,\n\nČia yra laiško turinys\n\npagarbiai, siuntėjas')
with smtplib.SMTP(host='smtp.gmail.com', port=587) as smtp:
smtp.ehlo() # žiūrėkite, kaip į pasisveikinimą su serveriu
smtp.starttls() # inicijuojame šifruotą kanalą
smtp.login('[email protected]', password) # nurodome prisijungimo duomenis
smtp.send_message(email) # išsiunčiame žinutę
Čia yra paprasta programėlė, kurioje matosi visas laiškų siuntimo mechanizmas. Komentaruose matome šiek tiek detalių.
Susikurkime HTML laišką:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<style>
body {background-color: black;}
h1 {color: blue;}
p {color: goldenrod;}
</style>
<title>Laiškas</title>
</head>
<body>
<h1>Sveiki,</h1>
<p>Bacon ipsum dolor amet beef jerky corned beef,
buffalo pork loin tail flank. Burgdoggen t-bone
pastrami capicola frankfurter hamburger. Buffalo leberkas
jowl ground round, hamburger meatball porchetta short loin
bresaola drumstick t-bone chislic boudin corned beef swine.
Hamburger jerky biltong prosciutto.</p>
</body>
</html>
Dabar python'o dalis:
import smtplib
from email.message import EmailMessage
from slaptazodis import password
with open('index.html', 'r') as f:
html = f.read()
email = EmailMessage()
email['from'] = 'Antanas Šampanas'
email['to'] = '[email protected]'
email['subject'] = 'email from python'
email.set_content(html, 'html')
with smtplib.SMTP(host='smtp.gmail.com', port=587) as smtp:
smtp.ehlo()
smtp.starttls()
smtp.login('[email protected]', password)
smtp.send_message(email)
Sukurdami žinutės objektą, .set_content parametruose nurodome, kintamąjį su turiniu, ir kad norėsime 'html' formato. Visa kita vyksta analogiškai, kaip ir siunčiant paprastą žinutę.
Deja, CSS palaikymas yra sunkiai prognozuojamas, todėl fono spalva nepasikeitė. Taip yra todėl, kad bandome sumaišyti savo CSS su gmail'o CSS.
Sakykime, mums prireikė išsiųsti daug laiškų, kurių kiekviename kažkiek skiriasi turinys pagal situaciją. Reikės naudoti Template klasę iš string paketo.
Pataisykime savo .html faile <h1> bloką:
<h1>Sveiki, $vardas</h1>
Python failą perdarykime taip:
import smtplib
from email.message import EmailMessage
from slaptazodis import password
from string import Template
with open('index.html', 'r') as f:
html = f.read()
sablonas = Template(html)
email = EmailMessage()
email['from'] = 'Antanas Šampanas'
email['to'] = '[email protected]'
email['subject'] = 'email from python'
email.set_content(sablonas.substitute({'vardas': 'Donatas'}), 'html')
with smtplib.SMTP(host='smtp.gmail.com', port=587) as smtp:
smtp.ehlo()
smtp.starttls()
smtp.login('[email protected]', password)
smtp.send_message(email)
Template modulis leidžia mums pakeisti žodžius su '$' ženklu priekyje kintamųjų reikšmėmis. Tokiu būdu, iteruodami kokį nors žodyną, kiekvienam adresatui galime parinkti kreipnį. Panaudojimo galimybės, žinoma, tuo neapsiriboja :)
Template galima naudoti ne tik su html, bet ir su bet kokiais tekstais, pvz kad ir su paprasta str eilute. Ir ne tik su email operacijomis.
pakoreguokime kodą:
import smtplib
from email.message import EmailMessage
from slaptazodis import password
from string import Template
with open('index.html', 'r') as f:
html = f.read()
sablonas = Template(html)
email = EmailMessage()
email['from'] = 'Antanas Šampanas'
email['to'] = '[email protected]'
email['subject'] = 'email from python'
email.set_content(sablonas.substitute({'vardas': 'Donatas'}), 'html')
with open('elephant.png', 'rb') as file:
content = file.read()
email.add_attachment(
content,
maintype='image/png',
subtype='png',
filename='elephant.png')
with smtplib.SMTP(host='smtp.gmail.com', port=587) as smtp:
smtp.ehlo()
smtp.starttls()
smtp.login('[email protected]', password)
smtp.send_message(email)
- Atidarėme elephant.png, nuskaitėme 'rb' būdu į kintamąjį content
- nurodėme content turinį, maintype, subtype ir failo pavadinimą į add_attachment metodo parametrus.
Kad būtų lengviau susiorientuoti, ką nurodyti parametruose - nuoroda. Kas yra MIMEType, labai gražiai išverčia google translate:
Laikmenos tipas (dar žinomas kaip daugiafunkcinis interneto pašto plėtinys arba MIME tipas) yra standartas, nurodantis dokumento, failo ar baitų išrūšiavimo pobūdį ir formatą.
jeigu norime prisegti keletą prisegtukų, importuojame mimetypes ir dalį,atsakingą už prisegtukus pertvarkome taip:
files = ['elephant.png', 'hippo.jpg']
for file in files:
mimetype = mimetypes.guess_type(file)[0]
subtype = mimetype.split('/')[1]
with open(file, 'rb') as img:
content = img.read()
email.add_attachment(
content,
maintype=mimetype,
subtype=subtype,
filename=file)
kadangi add_attachment reikalauja maintype ir subtype, o failų tipai skirtingi, pasitelkėme biblioteką, atsakingą už failo mimetype atspėjimą. Veikia maždaug tokiu principu:
mimetype = mimetypes.guess_type('elephant.png')[0]
print(mimetype)
subtype = mimetype.split('/')[1]
print(subtype)
# image/png
# png
rezultatas:
© Donatas Noreika ir Jotautas Treigys
Dekoratoriai
Iteratoriai ir generatoriai
RegEx
Pillow
NumPy
Pandas
- Pandas I
- Užduotys I
- Atsakymai I
- Pandas II
- Užduotys II
- Atsakymai II
- Pandas III
- Užduotys III
- Atsakymai III
Seaborn
Mašininis mokymasis
- 1 Tiesinės regresijos modelis
- 1 Užduotis
- 1 Atsakymas
- 2 Modeliai - klasifikatoriai
- 2 Užduotis
- 2 Atsakymas
- 3 Modeliai praktikoje
- 3 Užduotis (atnaujinta), atsakymas
- 3 Užduotis
- 3 Atsakymas (kodas su komentarais)
Requests, JSON, API
Web Scraping (Beautiful Soup)
Duomenų bazės
- SQL 1
- Užduotys
- Atsakymai
- SQL 2
- Užduotys
- Atsakymai
- SQL 3
- Užduotys
- Atsakymai
- SQL 4
- Užduotis
- SQL per Python
- Užduotis
- ORM 1
- Užduotys
- ORM 2
- Užduotis
- Atsakymas
Flask
- Įžanga
- Užduotys
- I dalis
- Užduotis
- I dalies kodas (atsakymas)
- II dalis
- Užduotis
- Atsakymas (kodas)
- III dalis
- Užduotis
- Atsakymas
- IV dalis
- Užduotis
- Atsakymas
- Flask Many2one, CRUD
- Flask One2many, many2many CRUD
- Flask: REST API kūrimas
- Flask: API su One2many (kodas)
- Flask: vartotojai
- Flask: nuotraukos pridėjimas, admin puslapis, puslapiavimas
- Flask: password reset, error pages
- Flask: projekto sutvarkymas
- Flask diegimas į serverį
Django
- 1. Įžanga, Modeliai
- 2. Administratoriaus svetainė
- 3. Šablonai
- 4. Views
- 5. Puslapiavimas, Paieška, Nuotraukos
- 6. Autorizacija
- 7. Vartotojai II, HTML laukai
- 8. Registracija, Formos
- 9. Vartotojo profilis
- 10. Create, Update, Delete rodinių klasės
- 11. Vertimai
- Užduotis: Autoservisas
- Biblioteka: kodas iki 6-tos dalies
- Biblioteka: kodas nuo 6-tos dalies
- Django diegimas į serverį
- Django diegimas į serverį 2
Django REST
Odoo
- Kurso programa: projektų valdymas
- 1 pamoka
- 2 pamoka
- 3 pamoka
- 4 pamoka
- 5 pamoka
- 6 pamoka
- 7 pamoka
- 8 pamoka
- 9 pamoka
Linux