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