Python SMTP Kullanarak E-posta Gönderme

Python’da  “smtplib” modülü aracılığıyla nasıl e-posta göndereceğimizi öğreneceğiz. Web tabanlı bir uygulamadan veya bilgisayarınızda çalışan bir yazılımdan bir e-posta gönderdiğinizde, istemci uygulamanız, mesajı paketler ve SMTP sunucusunu kullanarak gönderir.

smtp

Python’da smtplib Modülü ile E-posta Gönderme

İlk adım, Python’un smtplib kütüphanesini içe aktarmaktır. Bu kütüphane sayesinde e-posta göndermek için fazla koda ihtiyacımız olmayacak.

Dosyanızın ilk satırına aşağıdaki kodu yazın:

import smtplib

İçe aktarılan modülde, e-posta parametrelerini ayarlayalım.

import smtplib 

sender = "gonderen@gmail.com" 
recipient = "alici@mail.com" 
subject = "Test Mail" 
text = "Bu bir test mesajıdır."

Şimdi e-postayı bir SMTP sunucusu kullanarak göndermemiz gerekiyor. Bu örnekte, Gmail’i kullanacağız. (Herhangi bir web sunucusuna sahipseniz, sunucunuzla ilişkilendirilmiş SMTP sunucu adresini ve kimlik bilgileri ile kurulum yapabilirsiniz.)

Gmail’de SMTP erişiminin etkinleştirilmesi

Python uygulamanızın, hesabınızı kullanarak e-posta gönderebilmesi için Gmail sunucularında oturum açmasına izin vermelisiniz. İzin vermek için; google hesabınızda oturum açın ve bu bağlantıya gidin

gmail izin2

Gmail’in SMTP sunucusu “smtp.gmail.com” dur ve 587 numaralı bağlantı noktasını kullanır. Kullanıcı adı e-posta adresiniz ve şifre ise e-posta şifrenizdir.

import smtplib 

sender = "gonderen@gmail.com" 
recipient = "alici@mail.com" 
password = "sifre123" # SMTP için Gmail şifreniz
subject = "Test Mail" 
text = "Bu bir test mesajıdır."

text değişkenin yalnızca bir cümle içerdiğine dikkat edin.  Daha fazla satır kullanmak için \n karakterini kullanabilirsiniz.

text = "Bu bir test mesajıdır \ n Bu 2. satır \ n Ve 3. satır"

SMTP sunucusuyla düz metin olarak veya SSL kullanarak şifrelenmiş olarak iletişim kurabilirsiniz. Gizlilik önemli bir konu olduğundan, Python programımız ile SMTP sunucusu arasındaki iletişimin şifrelenmesini sağlamak için SMTP_SSL sınıfı kullanacağız.

Burada SMTP_SSL kullanmak her zaman iyi bir fikirdir çünkü e-posta sunucusuna bağlanırken SMTP kimlik bilgilerinizi sızdırmamamızı sağlayacaktır.

import smtplib 

sender = "gonderen@gmail.com" 
recipient = "alici@gmail.com" 
password = "sifre123" 
subject = "Test Mail" 
text = "Bu bir test mesajıdır." 

smtp_server = smtplib.SMTP_SSL("smtp.gmail.com", 465) 
smtp_server.login(gonderen@gmail.com, sifre123) 
message = "Subject: {}\n\n{}".format(subject, text) 
smtp_server.sendmail(sender, recipient, message) 
smtp_server.close()

Yukarıdaki kodda neler olduğunu gözden geçirelim.

İlk olarak SMTP_SSL metodunu kullanarak SSL sunucu ayarlarını kurar. Ardından, login() fonksiyonu ile kullanıcı adınızı ve şifrenizi doğrular. Yanlışsa, kimlik doğrulama hatası alırsınız:

smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials o22 sm62348871wrb.40 - gsmtp')

Ayrıca, Gmail’de yanlış kullanıcı adı ve şifre kullanılırsa hesabınızda başarısız bir giriş denemesinin yapıldığına dair bir uyarı alırsınız. Python ile e-posta gönderimi için Gmail kullanıyorsanız, çok fazla yanlış giriş denemesinden kaçınmaya çalışın, aksi takdirde Google, güvenlik nedeniyle hesabınızı askıya alır. Pratik yaparken yeni bir hesap açıp kullanmak her zaman daha iyidir.

sendmail() fonksiyonu ile göndereni, alıcıyı ve gönderilen metni belirliyoruz. SMTP kullanıcı adınız ve şifrenizle ilgili bir sorun varsa veya login () işlemi başarısız olursa SMTPSenderRefused hatası ile karşılaşırsınız.

smtplib.SMTPSenderRefused: (530, b'5.5.1 Authentication Required. Learn more at\n5.5.1 https://support.google.com/mail/?p=WantAuthError o22sm62348871wrb.40 - gsmtp', 'sss@yourdomain.com')

Her şey yolunda giderse ve yukarıdaki kodu kendi e-posta hesaplarınızla çalıştırırsanız, e-posta mesajı alıcı adresine teslim edilecektir. (Aşağıdaki görsellerde olduğu gibi)

sendmail() fonksiyonunu tekrar tekrar çalıştırarak birden fazla e-posta gönderebilirsiniz. Gönderimi bitirdikten sonra close() fonksiyonunu çağırarak SMTP bağlantısını kapatmalısınız.

Python’da bir e-posta göndermek için gereken tek şey bu.

Tek seferde gönderdiğiniz e-postaların sayısını sınırlamayı unutmayın, aksi takdirde spam filtreleriyle karşılaşabilirsiniz. Bu nedenle mesaj gönderme arasına bir zamanlama koyabilirsiniz.

time.sleep #programımızı istediğimiz süre kadar durdurmamızı sağlar.

Kod çalıştırıldığında;

 

Yorum Yap