Bu yazıda Python ortamını kullanarak nasıl otomatik mailler atabileceğimizi göreceğiz. Python’un smtplib modülü SMTP protokolünü kullanarak e-posta göndermemize imkan sağlıyor.

Aşağıdan Python’un standart dokümantasyonunu inceleyelim.

smtplib — SMTP Protocol Client

Örneklerde genelde Gmail kullanıldığını gördüm. Fakat bu örnekte ben karşı tarafta Exchange Server kullandım. Biraz uğraştıktan sonra aşağıdaki script’i çalıştırarak mail atmam mümkün oldu.

smtpserver.set_debuglevel(1) komutu ile logların görünmesini sağlıyoruz. Böylece loglara bakarak iletişimin nasıl sağlandığını görebileceğiz.

MIME (Multipurpose Internet Mail Extensions) daha karmaşık mailler oluşturmamıza olanak sağlayan bir internet standardı. ASCII’den başka karakter setleri eklememize, ses, video, resim gibi text olmayan eklentiler yapmamıza olanak sağlıyor. *

smtplib.SMTP() SMTP bağlantısını kapsülleyen bir bir smtp instance’ı oluşturuyor. Burada verdiğimiz host ve port parametreleri daha sonra EHLO esnasında bağlantının başlatılmasında kullanılıyor. HELO SMTP için kullanılırken, EHLO ESMTP (Enhanced SMTP) için kullanılıyor.

Port olarak 465 kullandık. 465 ve 587 portlarının ikisi de mail gönderimi için kullanılır. 465 güvenli mesaj gönderimidir. SSL encryption SMTP iletişiminden önce başlatılır. 587’yi ise standart SMTP portu olarak düşünülebilir.

EHLO komutu ile kendimizi ESMTP sunucusuna tanıtıyoruz. Daha önceden verdiğimiz hostname değişkeni burada FQDN (Fully Qualified Domain Name) olarak kullanılıyor.

Loglara bakacak olursak karşımızdaki sunucunun hello şeklinde cevap verdiğini görüyoruz.

starttls() ile SMTP bağlantısını TLS(Transport Layer Security) moduna alınıyor. Ardından gelen bütün SMTP komutları şifreleniyor.

Login ile kullanıcı adı ve parolamızla SMTP sunucusunda oturum açıyoruz. Oturumumuz açıldıktan sonra e-posta’yı yolluyoruz ve iletilmek üzere sıraya alındığını görüyoruz.

Dikkat edilmesi gereken bir nokta e-maili bir Python Script kullanarak gönderdiğimizde alışılmış client yapısını kullanmıyor oluşumuz. Bu nedenle engellerle veya gönderiminin güvensiz olarak etiketlenmesi gibi durumlarla karşılaşmamız mümkün.

Yazıyı oluştururken aşağıdaki dökümanı kullandım oldukça faydalı buldum:

Real Python – Sending Emails With Python

Ek olarak Microsoft Exchange’de kullanılan Autodiscover servisi hakkında:

Microsoft Exchange Autodiscover Servisi ve Multi-tenancy

Umarım faydalı olmuştur. Bir sonraki yazıda görüşmek dileğiyle.