8.1 Poçtu oxuyuruq
Düşünürəm ki, artıq şəbəkədə işləməyin əsaslarını kifayət qədər öyrənmişik. Gəlin daha maraqlı bir işlə məşğul olaq — axı şəbəkədə çox maraqlı şeylər var. Bəs poçtu oxumaq və göndərmək necə?
Elektron poçt 50 il əvvəl, ilk brauzerin yaranmasından 20 il əvvəl ortaya çıxdı. O zaman poçt göndərmək üçün xüsusi proqramlardan istifadə edirdilər. Bəs bu bizim üçün nə deməkdir? Bu o deməkdir ki, poçtla işləmək standartı (protokolu) üç qəpik qədər sadədir.
Protokol POP3
(Post Office Protocol version 3) elektron poçtu poçt serverindən almaq üçün istifadə olunur. IMAP
ilə müqayisədə POP3
adətən məktubları lokal kompüterə yükləyir və serverdən silir. Python-da POP3
ilə işləmək üçün poplib
kitabxanasından istifadə etmək olar.
Qeyd: POP3-dən fərqli olaraq, IMAP protokolu (Internet Message Access Protocol) məktubları serverdə saxlamağa və onların vəziyyətini cihazlar arasında sinxronizasiya etməyə imkan verir. Əgər siz məktubu fərqli cihazlardan oxuyursunuzsa, IMAP daha rahatdır, amma POP3 məktubları bir cihazda yerli olaraq saxlamaq üçün daha uyğundur.
Məktublar siyahısını almaq üçün əsas addımlar:
- Poçt serverinə qoşulma.
- Autentifikasiya.
- Məktublar siyahısını alma.
- Məktubları yükləmə və oxuma.
- Serverdən ayrılma.
İlk tətbiqi yazmaq üçün bizə iki kitabxana lazımdır: poplib
və email
. Əgər sizdə onlar yoxdursa — quraşdırın. pip
menecerindən necə istifadə edəcəyinizi artıq bilirsiniz.
Vacibdir: Elektron poçtla işləyərkən həmişə təhlükəsizlik tədbirlərinə riayət edin. Heç vaxt parolları kodda açıq şəkildə saxlamayın. Məlumatları saxlamaq üçün mühit dəyişənlərindən və ya qorunan anbarlardan istifadə edin. Həmçinin kodunuzun ictimaiyyətə açıq olmamasını təmin edin ki, məxfi məlumatların sızmasının qarşısı alınsın.
1. Qoşulma və autentifikasiya:
Poçt serverinə SSL
vasitəsilə qoşuluruq və göstərilən məlumatlarla poçt qutusuna daxil oluruq.
mailbox = poplib.POP3_SSL(pop3_server)
mailbox.user(username)
mailbox.pass_(password) # Python-da pass açar sözü ilə toqquşmanın qarşısını almaq üçün pass_ istifadə olunur
2. Poçt qutusu haqqında məlumat əldə etmək:
Poçt qutusundakı məktubların sayını əldə edirik.
num_messages = len(mailbox.list()[1])
print(f"Məktubların sayı: {num_messages}")
3. Məktubları yükləmə və oxuma:
Son məktubu yükləyirik və oxuyuruq.
# Nümunə: Son məktubu oxumaq
if num_messages > 0:
response, lines, octets = mailbox.retr(num_messages)
message = '\n'.join(line.decode('utf-8') for line in lines)
print("Son məktubun məzmunu:")
print(message)
Məktubların məzmununu pars etmək və göstərmək üçün xüsusi bir kitabxana var — email
. O məktubların məzmununu, onlara əlavə edilən faylları, başlıqları və məktub bədənini dekodlaya bilər.
Poçt müştərisinin son variantı bu şəkildə görünəcək.
import poplib
# Giriş üçün istifadə məlumatları
username = 'your_email@example.com'
password = 'your_password'
# Gmail poçt serverinə qoşulma
pop3_server = 'pop.gmail.com'
mailbox = poplib.POP3_SSL(pop3_server, 995)
# Poçt qutusuna giriş
mailbox.user(username)
mailbox.pass_(password) # Python-da pass açar sözü ilə toqquşmanın qarşısını almaq üçün pass_ istifadə olunur
# Poçt qutusu haqqında məlumat əldə etmək
num_messages = len(mailbox.list()[1])
print(f"Məktubların sayı: {num_messages}")
# Nümunə: Son məktubu oxumaq
if num_messages > 0:
response, lines, octets = mailbox.retr(num_messages)
message = '\n'.join(line.decode('utf-8') for line in lines)
print("Son məktubun məzmunu:")
print(message)
# Bağlantını bağlamaq
mailbox.quit()
Öz məktublarınızı oxumağa cəhd edə bilərsiniz, sadəcə düzgün POP3-server
göstərin. Məsələn, yuxarıdakı nümunədə Gmail server məlumatlarını göstərmişəm. Əgər başqa bir poçt serveriniz varsa, onun məlumatlarını internetdə asanlıqla tapa bilərsiniz.
8.2 Poçt göndərmək
SMTP
(Simple Mail Transfer Protocol) protokolundan istifadə etməklə elektron poçt göndərmək üçün Python-da daxili kitabxana olan smtplib
istifadə etmək olar. Bu modul SMTP-server
ilə əlaqənin qurulması, autentifikasiya və məktubların göndərilməsi üçün funksiyalar təqdim edir.
Poçtun göndərilməsinin əsas addımları:
SMTP-server
ə qoşulmaq.- Autentifikasiya.
- Mesajın formalaşdırılması.
- Mesajın göndərilməsi.
- Əlaqənin bağlanması.
1. SMTP-server
ə qoşulmaq:
SMTP-server
ə qoşuluruq və TLS
vasitəsilə qorunan bağlantıya keçirik.
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Qorunan bağlantı
2. Autentifikasiya:
SMTP-server
də istifadəçi məlumatlarından istifadə edərək giriş edirik.
server.login(username, password)
3. Mesajı sadə sətir formatında formalaşdırmaq:
message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"
4. Mesajın göndərilməsi:
server.sendmail(from_addr, to_addr, message)
5. Əlaqənin bağlanması:
server.quit()
Keçən dəfəki ilə müqayisədə daha asan görünür, bu sevindirir.
Bütün kod səhvlərin emalı ilə birlikdə belə görünəcək:
import smtplib
# Giriş məlumatları
smtp_server = 'smtp.gmail.com'
smtp_port = 587
username = 'your_email@gmail.com'
password = 'your_app_password' # Tətbiq parolundan istifadə edin
# Göndərici və alıcı ünvanları
from_addr = 'your_email@gmail.com'
to_addr = 'recipient@example.com'
# Məktubun mövzusu və mətni
subject = 'Məktubun mövzusu'
body = 'Bu məktubun mətnidir.'
# Mesajı sətir formatında formalaşdırmaq
message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"
try:
# SMTP-serverə qoşulmaq
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Qorunan bağlantı
# Autentifikasiya
server.login(username, password)
# Mesajın göndərilməsi
server.sendmail(from_addr, to_addr, message)
print("Məktub uğurla göndərildi!")
except Exception as e:
print(f"Məktub göndərilməsində səhv: {e}")
finally:
# Əlaqənin bağlanması
server.quit()
Kodun böyük qismi şərhlər və server parametrləridir, əslində məktubu 5 sətirdə göndərmək olar. Cəhd edin — çox maraqlıdır.
GO TO FULL VERSION