Poçtla iş

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

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: poplibemail. Ə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-serverdə 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.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION