Email mesaj okuma yazma

Arkdaslar email gelen mesajlari okuma ve mesaj gonderme diye bir program yazmak istiyorum acaba hangi modulleri
oyrenmeliyim?Veya bir ornek vere bilirmisiniz?Onun uzerinden devam edeyim…Mesaj gonderme islemini cozdumde okumayi cozemedim

1 Beğeni

Bu link üzerinde gereken açıklama yapılmış. Okuma işlemi net bir şekilde anlatılmış.

Mail gönderme için: http://emregeldegul.net/2017/04/python-smtplib-ile-e-posta-gonderme/

1 Beğeni

Standart kütüphanede email paketi var ona bakabilirsiniz.

Gmail için şöyle bir örnek yaptım, bunu inceleyebilirsiniz:

#!/usr/bin/python3.6
# -*- coding: utf-8 -*-

from email import message_from_string, message_from_bytes
from email.header import decode_header, make_header
from email.message import EmailMessage
from email.utils import make_msgid
from mimetypes import guess_type
from smtplib import SMTP_SSL
from imaplib import IMAP4_SSL


def attachment(msg, filelist):
    """Ek göndermek için bu fonksiyonu kullanınız."""
    for i in filelist:
        maintype, subtype = guess_type(i)[0].split("/")
        with open(i, "rb") as f:
            msg.add_attachment(
                obj=f.read(),
                maintype=maintype,
                subtype=subtype,
                filename=i
            )


def alternative(msg, filelist):
    """Mesajınızı bir html formatında göndermek ve
    bu html dökümanına dosyalar eklemek için
    bu fonksiyonu kullanınız."""
    files, maintypes, subtypes, msgids = [], [], [], []
    for i, j in filelist.items():
        msgid = make_msgid()
        maintype, subtype = guess_type(i)[0].split("/")
        maintypes.append(maintype)
        subtypes.append(subtype)
        msgids.append(msgid)
        if i == 0:
            files.append(f"""<p> {j} </p>
        <img src="cid:{msgid[1:-1]}" />""")
        else:
            files.append(f"""
        <p> {j} </p>
        <img src="cid:{msgid[1:-1]}" />""")
    html = f"""<html>
    <head></head>
    <body>{"".join(files)}
    </body>
</html>"""
    msg.add_alternative(html, subtype='html')
    for i, j in enumerate(filelist):
        with open(j, 'rb') as img:
            msg.get_payload()[i].add_related(
                obj=img.read(),
                maintype=maintypes[i],
                subtype=subtypes[i],
                cid=msgids[i],
                filename=j
            )


def send_email(username: str = "", password: str = "",
               subject: str = "", to_addr: str = "",
               content: str = "", filelist = None):
    """Email gönderme fonksiyonu."""
    msg = EmailMessage()
    msg.set_content(content)
    msg["Subject"] = subject
    msg["From"] = username
    msg["To"] = to_addr
    # Alternatif bir email gönderelim.
    alternative(msg, filelist)
    # attachment(msg, filelist)
    # Not: aynı anda hem alternatif emaili hem de eki gönderebiliriz.
    # Yalnız bunun için alternative'i attachment'tan önce kullanmak 
    # gerekir.
    with SMTP_SSL("smtp.gmail.com:465") as smtp:
        smtp.login(username, password)
        smtp.send_message(msg)
        
      
def read_email(username: str = "", password: str = ""):
    """Email okuma ve emaildeki dosyaları indirme fonksiyonu."""
    with IMAP4_SSL('imap.gmail.com') as imap:
        imap.login(username, password)
        # print(imap.list())
        imap.select("INBOX")
        typ, data = imap.search(None, 'ALL')
        for num in data[0].split():
            typ, data = imap.fetch(num, "(RFC822)")
            for i in data:
                if isinstance(i, tuple):
                    msg = message_from_bytes(i[1])
                    msg_subject = make_header(
                        decode_header(msg['subject'])
                    )
                    msg_from =  make_header(
                        decode_header(msg['from'])
                    )
                    for j in msg.walk():
                        if j.get_filename() is not None:
                            with open(j.get_filename(), "wb") as f:
                                f.write(j.get_payload(decode=True))
                        else:
                            if j.get_payload(decode=True) is not None:
                                print(
                                    j.get_payload(decode=True).decode(
                                        j.get_content_charset()
                                    )
                                )
                        
                    
send_email(
    username="username@gmail.com",
    password="******",
    subject="konu buraya yazılacak",
    to_addr="to@gmail.com",
    content="mesaj buraya yazılacak.",
    filelist={
        "0.jpg": "0.jpg hakkında açıklama ekleyebilirsiniz.",
        "1.jpg": "1.jpg hakında açıklama ekleyebilirsiniz."
    }
)


read_email(
    username="username@gmail.com",
    password="******"
)

Bir standart kütüphane modülü olan imaplib modülünü, email okumak için kullanabilirsiniz.

Diğer bir standart kütüphane modülü olan smtplib modülünü, email göndermek için kullanabilirsiniz.

Gönderilecek veya okunacak emailleri yeniden biçimlendirmek ve/veya onlar üzerinde başka işlemler yapmak için yine bir standart kütüphane modülü olan email modülünü kullanabilirsiniz.

Ayrıca, şu adresteki örnekleri de inceleyebilirsiniz.

1 Beğeni