Flask İle Mail Gönderme (Flask-mail)

Flask kullanarak maillerinizi kolayca gönderebilir, hatta toplu mailler atabilirsiniz. Üstelik gerekli yapılandırma ayarlarını yapmak düşündüğünüzden daha kolay olacak. Şimdi hemen yeni dersimize başlayalım ve Flask ile mail gönderelim.

Bir önceki yazımız olan “404 Hata Sayfası Yönlendirmesi” konusundan hemen sonra arayı soğutmadan “Flask Mail Gönderimi” ile derslerimizin sonuna yaklaşmış bulunuyoruz. Bu dersimizde Flask-mail kütüphanesini kullanarak basitçe ve hızlıca mailler gönderebileceğiz. Öyleyse hemen kütüphanemizi projemize dahil ederek dersimize başlayalım.

1. Flask-mail Kütüphanesinin Dahil Edilmesi

Kütüphanemizi pip kullanarak indirelim öncelikle:

pip install Flask-Mail

veya direkt repodan çekerek son sürümü kullanarabilirsiniz:

git clone https://github.com/mattupstate/flask-mail.git
cd flask-mail
python setup.py install

Gerekli yüklemeleri yaptıktan sonra artık projemize kütüphaneyi dahil edebiliriz.

from flask_mail import Mail, Message

2. Konfigürasyon Tanımlarını Ayarlama

Kütüphanemizi projemize dahil etmemizin ardından mail sunucu ayarlarını tanımlayabilmek için gerekli konfigürasyon bilgilerini yazmaya sıra geldi. Kullandığınız mail sunucuya ait bağlantı bilgilerini kullanarak aşağıdaki kodları kendi projenizde düzenleyebilirsiniz. Bu bilgileri nereden bulacağını bilmeyenler için aşağıdaki örneği Gmail üzerinden yapacağım. Böylece sizde sadece Gmail bilgilerinizi girerek hemen kullanmaya başlayabilirsiniz. Fakat Gmail yerine özel mail kutusu kullananlar, mail sunucularının STMP ayarlarını girerek kullanabilirler.

from flask import Flask
from flask_mail import Mail, Message

app = Flask(__name__)

app.config['MAIL_SERVER']='smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = 'xxxx@gmail.com'
app.config['MAIL_PASSWORD'] = '******'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True

mail = Mail(app)

NOT: Gmail ile mail gönderimi yapmak istiyorsanız yukarıdaki ayarlara ek olarak Gmail hesabınızdan şu linke giderek “Daha az güvenli uygulamalar için erişim” ayarında “” seçeneğini işaretlemelisiniz.

3. Mail Gönderme Fonksiyonunun Yazılması

Gerekli ayarlamaları yaptıktan sonra artık ilk testimizi gerçekleştirebiliriz. Bunun için hemen bir route yazıp küçük bir mail gönderimi yapalım.

@app.route('/mail-gonder/')
def mailgonder():
    try:
        msg = Message("Merhaba Kerteriz Blog Takipçisi!",
          sender="gonderici@gmail.com",
          recipients=["alici@email.com"])
        msg.body = "Merhaba!\nPython ve Flask ile programlama nasıl gidiyor?"           
        mail.send(msg)
        return 'Mail başarıyla gönderildi!'
    except Exception, e:
        return(str(e))

HTML Mail İçeriği: Eğer mesajınızda HTML ögeleri yer alacaksa msg.body yerine msg.html kullanabilirsiniz. Örneğin:

msg.html = "<strong>Merhaba!</strong><br><em>Python ve Flask ile programlama nasıl gidiyor?<em>"

Toplu Mail Gönderimi: Yukarıdaki örnekte sadece bir alıcı belirttik. Siz daha fazla mail adresine aynı anda toplu mail göndermek istiyorsanız aşağıdaki gibi kod yapısı kullanabilirsiniz:

liste = ["xx@mail.com","yy@mail.com","zz@mail.com"]

with mail.connect() as conn:
    for mail in liste:
        mesaj = '...'
        baslik = "Merhaba!" 
        msg = Message(recipients=[mail],
                      body=mesaj,
                      subject=baslik)

        conn.send(msg)

Mail Eki Yükleme: Göndereceğiniz maillere isterseniz dosya da ekleyebilirsiniz. Böylece eklerle beraber daha zengin bir mail gönderimi yapabilirsiniz. Bunun için öncelikle Konfigürasyon kısmında MAIL_ASCII_ATTACHMENTS ayarını True ayarlamalısınız.

with app.open_resource("resim.png") as fp:
    msg.attach("resim.png", "image/png", fp.read())

4. Kod Önizlemesi

Son durumda index.py dosyamız şu şekilde olacaktır:

from flask import Flask
from flask_mail import Mail, Message

app = Flask(__name__)

app.config['MAIL_SERVER']='smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = 'xxxx@gmail.com'
app.config['MAIL_PASSWORD'] = '******'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True

mail = Mail(app)

@app.route('/mail-gonder/')
def mailgonder():
    try:
        msg = Message("Merhaba Kerteriz Blog Takipçisi!",
          sender="gonderici@gmail.com",
          recipients=["alici@email.com"])
        msg.body = "Merhaba!\nPython ve Flask ile programlama nasıl gidiyor?"           
        mail.send(msg)
        return 'Mail başarıyla gönderildi!'
    except Exception as e:
        return(str(e)) 

if __name__ == '__main__':
   app.run(debug = True)

Artık /mail-gonder/ sayfasına girip mailimizi gönderebiliriz.

Tebrikler! Maili başarıyla gönderdik. Takıldığınız veya sormak istediğiniz bir konu olursa aşağıya yorum bırakabilirsiniz.