dersblog

Python ile Mail Göndermek, SMTP, GMail

Dışarıdan Python ile GMail'e bağlanıp email göndermek istersek, önce email göndereceğimiz hesaba girip, Account ayarlarına gideriz, Security altında "Less secure apps"'lere erişim için izin veririz. Burada Google bir sürü uyarı verecek, bunları geçip kullanıma geçebiliriz.

Şifreyi kod içine koymak iyi değil tabii, onu $HOME altında .şifre adlı bir dosya içine koyabiliriz. Basit bir şifrelemeden sonra koymak ta iyi olabilir.

Artık kullanıcı / şifre ile GMail'e email attırabiliriz.

import smtplib, os

gmail_user = 'kaynakkullanici@gmail.com'  
gmail_password = open(os.environ['HOME'] + "/.sifre").read()

sent_from = gmail_user 
to = ['hedefkullanici@gmail.com']  
subject = 'OMG Super Important Message'  
body = 'Hey, whats up?\n\n- You'

email_text = """
From: %s  
To: %s  
Subject: %s

%s
""" % (sent_from, ", ".join(to), subject, body)

try:  
    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    server.ehlo()
    server.login(gmail_user, gmail_password)
    server.sendmail(sent_from, to, email_text)
    server.close()

    print ('Email sent!')
except Exception as e:
    print (repr(e))
    print ('Something went wrong...')

Bazen yerelden gönderilen email'ler sonuç (production) ortamında, ya da farklı bir makinada işlemeyebiliyor. Bu durumlarda [2]

https://accounts.google.com/DisplayUnlockCaptcha

adresine gidip Continue'ya tıklıyoruz, ve yeni makinadan gönderimi yapıyoruz. Artık takip eden gönderimler işleyecektir.

Fakat ya idare edilen (managed) bulut ortamında isek, ya da çok makinalı küme ortamında iş yapıyorsak, o zaman GMail'e bağlanılan IP adresi her seferinde farklı olabilir, ve üstteki numarayı tüm bu makinalar için ayrı ayrı uygulamak gerekmez mi? Bu doğru. Ve bu tür şartlarda GMail SMTP servisi kullanmak uygun olmayabilir, daha servis tarafına yönelik bir servise bakmak faydalı olacaktır.

[1] https://stackabuse.com/how-to-send-emails-with-gmail-using-python/

[2] https://stackoverflow.com/questions/27140402/why-does-smtp-via-gmail-work-locally-but-not-on-my-production-server


Yukarı