Python SMTP ile Mail Gönderme

Python SMTP Mail

Python SMTP ile Mail Gönderme

 Hepinize merhaba arkadaşlar bu yazımda sizlere çok basit bir şekilde nasıl Python3 ile smtp kullanarak mail gönderebileceğinizi anlatacağım, tabi sadece mail ile mesaj göndermeyi değil buna ek olarak bir de HTML formatında mail göndermekten de bahsedeceğim.

SMTP ile Normal Mail Gönderme

Evet, ilk olarak normal mail nasıl gönderilir buna bir bakalım. Tabi arkadaşlar bu yöntem bazen mail gönderilmemesi veya spama düşmesi ile sonuçlanabiliyor. 

Bu yüzden asıl projelerinizde kullanmak üzere bir sonraki adımı kullanmanızı öneririm.

import smtplib

class MailManager:
    def __init__(self) -> None:
            self.fromMail = "deneme@yandex.com" # Mail göndereceğimiz hesabın e posta adresi
            self.fromPassword = "" # Mail göndereceğimiz hesabın şifresi
            self.smtpHost = "smtp.yandex.com" # Mail göndereceğimiz sunucu
            self.smtpPort = 465 # Mail göndereceğimiz sunucunun smtp portu
       

    def SendMail(self, subject, content, toMail):
        try:
            email_text = """
From: %s  
To: %s  
Subject: %s

%s
            """ % (self.fromMail, toMail, subject, content)

            mail = smtplib.SMTP(self.smtpHost,self.smtpPort) # smtp sunucusunu belirliyoruz.
            mail.ehlo() # sunucuyu başlatıyoruz
            mail.starttls() # ttls yi başlatıyoruz
            mail.login(self.fromMail, self.fromPassword) # smtp sunucusuna giriş yapıyoruz
            mail.sendmail(self.fromMail,toMail,email_text) # mesajımızı gönderiyoruz.
        except Exception as e:
            print(f"Bir hata meydana geldi\n {e}") # Hata meydana geldiğini söylüyoruz.
        finally:
            mail.quit() # sunucu bağlantısını kapatıyoruz quit yerine ".close()" da kullanabilirsiniz.

# Nasıl kullanılır
mailMan = MailManager()
mailMan.SendMail("mail başlığı","mail içeriği", "gidecek mail adresi")

Python da smtp ile mail göndermek bu kadar basit.

SMTP ile HTML Formatında Mail Gönderme

Şimdi de HTML olarak mail nasıl göndeririz buna bakalım. HTML olarak mail atabilmemiz için MIME tipini HTML olarak belirlememiz gerekiyor. 

Bunun için de ekstra bir kaç kütüphaneyi daha projemize dahil etmemiz gerekiyor hadi gelin bu kodları inceleyelim.

import smtplib # SMTP kütüphanemiz
from email.mime.text import MIMEText # MIME tipi belirlemek için olan kütüphane
from email.mime.multipart import MIMEMultipart # Birden fazla tip belirlemek için olan kütüphane

class MailManager:
    def __init__(self) -> None:
        self.fromMail = "" # Gönderen mail adresi
        self.fromPassword ="" # Gönderen mail şifresi
        self.smtpHost = "" # SMTP sunucu adresi
        self.smtpPort =  # SMTP sunucu portu
       

    def SendMail(self, subject, content, toMail):
        try:
            message = MIMEMultipart("alternative") 
            message["Subject"] = subject # Konu başlığı
            message["From"] = self.fromMail # Gönderen mail adiresi
            message["To"] = toMail # Mailin gideceği adres

            _content = MIMEText(content.encode('utf-8'), _charset='utf-8') # Burada mime tipini belirliyoruz. "MIMEText(html, "html")" şekinde kullanarak html gönderebilirsiniz.
            message.attach(_content) # Mesajımızı yerleştiriyoruz

            with smtplib.SMTP_SSL(self.smtpHost, self.smtpPort) as server: # Sunucuya bağlanıyoruz
                server.login(self.fromMail, self.fromPassword) # Sunucuya giriş yapıyoruz
                server.sendmail(self.fromMail, toMail, message.as_string()) # Mailimizi gönderiyoruz
        except Exception as e:
            print(f"Mail gönderilemedi!\nHata Kodu: {e}\nMail başlığı : {subject} \nMail içeriği : {content} \nAlıcı : {toMail}") # Hata var ise yazdırıyoruz


# Nasıl kullanılır
mailManager = MailManager()
mailManager.SendMail("Mail başlığı", "Mail içeriği", 'gidecek mail adresi')


Evet arkadaşlar kodların yanında her şeyi açıklamaya çalıştım ancak hala merak ettiğiniz bir şey bulunuyor ise bana buradan yorum olarak sorabilirsiniz.