🧑💻 Python'da ekli dosyaları olan e-postaların gönderilmesini profesyonelce ve günlüklerle otomatikleştiriyoruz!
E-posta gönderme sürecini nasıl otomatikleştirirsiniz? Çok sayıda alıcıya bilgi veya reklam mesajı gönderme ihtiyacıyla karşılaşan herkes için kesinlikle faydalı olacaktır.
📩 Hazır bir senaryo:
✔️ HTML gövdesi ve eki olan bir mesaj oluşturur.
✔️ SMTP ile gönderir.
✔️ Gönderilenler klasörüne kaydeder.
✔️ Konsolda günlükleri gösterir ve bunları bir dosyaya kaydeder.
✔️ Hata işleme özelliğine sahip fonksiyonlarla her şeyi sarar.
Kod:
işletim sistemini içe aktar
ithalat zamanı
imaplib'i içe aktar
smtplib'i içe aktar
ithalat günlüğü
Yazmaktan içe aktarma İsteğe bağlı
email.mime.text'ten MIMEText'i içe aktar
email.header'dan Header'ı içe aktar
email.mime.multipart'tan MIMEMultipart'ı içe aktar
email.mime.base'den MIMEBase'i içe aktar
e-postadan içe aktarma kodlayıcıları
email.utils'den formatdate'i içe aktar
# Günlük Kaydı
günlük kaydı.basicConfig(
seviye=günlük.BİLGİ,
biçim="%(asctime)s - %(levelname)s - %(mesaj)s",
işleyiciler=[
günlük kaydı.FileHandler("e-posta_göndericisi.log"),
günlük kaydı.StreamHandler()
]
)
def e-posta_oluştur(
from_addr: str,
adrese: str,
konu: str,
gövde: str,
ek_yolu: İsteğe_bağlı[str] = Hiçbiri
) -> MIMÇok Parçalı:
logging.info("Mektup oluşturuluyor...")
mesaj = MIMEMultipart()
msg["Kimden"] = from_addr
msg["Kime"] = kime_adresi
msg["Konu"] = Başlık(konu, 'utf-8')
msg["Tarih"] = formatdate(localtime=True)
msg.attach(MIMEText(gövde, 'html', 'utf-8'))
eğer attachment_path ve os.path.exists(attachment_path):
denemek:
part = MIMEBase('uygulama', "sekizli-akış")
open(attachment_path, "rb") dosyası ile:
parça.set_payload(dosya.oku())
kodlayıcılar.encode_base64(parça)
bölüm.başlık_ekle(
'İçerik-Düzen'
ek; dosyaadı="{os.path.basename(ek_yolu)}"'
)
msg.attach(parça)
logging.info(f"Ekli dosya: {attachment_path}")
İstisna hariç:
logging.error(f"Dosya eklenirken hata oluştu: {e}")
başka:
logging.warning("Dosya bulunamadı veya belirtilmedi - mektup eksiz olacak.")
dönüş mesajı
def e-posta_gönder(
smtp_sunucusu: str,
smtp_portu: tamsayı,
from_addr: str,
from_pass: str,
adrese_: str,
mesaj: MIMEMultipart
) -> Hiçbiri:
denemek:
smtplib.SMTP(smtp_server, smtp_port) ile smtp olarak:
smtp.başlangıçlar()
smtp.login(from_addr, from_pass)
smtp.sendmail(gönderen_adresi, alıcı_adresi, mesaj.as_string())
logging.info(f"Posta {to_addr} adresine gönderildi")
İstisna hariç:
logging.error(f"E-posta gönderilirken hata oluştu: {e}")
def gönderilecek_kaydet(
imap_sunucusu: str,
imap_portu: int,
from_addr: str,
from_pass: str,
mesaj: MIMEMultipart
) -> Hiçbiri:
denemek:
imaplib.IMAP4(imap_server, imap_port) ile imap olarak:
imap.login(from_addr, from_pass)
imap.select('Gönderildi')
imap.append('Gönderildi', Hiçbiri, imaplib.Time2Internaldate(time.time()), message.as_bytes())
logging.info("Mektup 'Gönderildi' klasörüne kaydedildi")
İstisna hariç:
logging.error(f"E-posta kaydedilirken hata oluştu: {e}")
eğer
name == "
main":
E-POSTADAN = "
kurum-postası@mail.ru"
FROM_ŞİFRE = "*"
SMTP_SUNUCU = "*.
mail.ru"
SMTP_PORTU = 25
IMAP_BAĞLANTI NOKTASI = 143
TO_E-POST = "
öğrenci-postası@mail.ru"
SUBJECT = "Mesajın konusu"
BODY = "Mesaj metni"
EK_YOLU = "sertifika.pdf"
denemek:
e-posta_mesajı = create_email(KİMDEN_E-POSTASI, KİME_E-POSTASI, KONU, GÖVDE, EK_YOLU)
send_email(SMTP_SUNUCU, SMTP_PORTU, KİMDEN_E-POSTASI, KİMDEN_ŞİFRE, KİME_E-POSTASI, e-posta_mesajı)
save_to_sent(SMTP_SERVER, IMAP_PORT, FROM_E-POSTASI, FROM_PAROLASI, e-posta_mesajı)
İstisna hariç:
logging.critical(f"Kritik hata: {e}")
📩 Mektuplarınızı yükleyin ve manuel işlemleri unutun!
📂 Bunu kendinize saklayın veya postalama ve belge yönetimiyle ilgilenen biriyle paylaşın.
#python #soft #code