Python için Flask Çerçevesi ile E-postalar Nasıl Alınır
Yayınlanan: 2020-04-30İnternette e-posta göndermeyle ilgili çok sayıda öğretici olmasına rağmen, bir uygulamanın bunları alacak ve işleyecek şekilde nasıl yapılandırılacağı konusunda çok az şey vardır. Bu, her şeyi kendiniz ayarlamaya çalışıyorsanız inanılmaz derecede zor olabilecek bir görevdir, ancak Twilio SendGrid'in Gelen Ayrıştırma özelliğini kullanırken bir web isteği almak kadar kolaydır.
Bu kısa eğitimde, Python ve Flask web çerçevesini kullanarak Twilio SendGrid'in e-postalarınızı doğrudan web uygulamanıza nasıl ileteceğini öğreneceksiniz.
Gereksinimler
Bu öğreticiyi tamamlamak için gereksinimler şunlardır:
- Python 3: İşletim sisteminiz bir Python 3 yorumlayıcı sağlamıyorsa , bir yükleyici indirmek için python.org'a gidebilirsiniz.
- Twilio SendGrid hesabı: Twilio SendGrid'de yeniyseniz , sonsuza kadar günde 100 e-posta göndermenize izin veren ücretsiz bir hesap oluşturabilirsiniz .
- E-posta alacağınız alan adı: Bu makale boyunca alaninizhere.com'u kullanacağım . Bunu kendi alan adınızla değiştirmeniz gerekecektir.
- ngrok : Bilgisayarınızda yerel olarak çalışan Flask uygulamasını SendGrid'in istek gönderebileceği genel bir URL'ye bağlamak için bu kullanışlı yardımcı programı kullanacağız. Bu, uygulamanın geliştirme sürümü için gereklidir, çünkü bilgisayarınız muhtemelen bir yönlendiricinin veya güvenlik duvarının arkasındadır ve bu nedenle İnternet'ten doğrudan erişilebilir değildir. ngrok kurulu değilse, Windows, MacOS veya Linux için bir kopya indirebilirsiniz .
Etki alanı kimlik doğrulaması
Twilio SendGrid'in etki alanınızdaki e-postaları kabul edebilmesi için önce kimlik doğrulaması yapmanız gerekir , böylece Twilio SendGrid, etki alanının sizin kontrolünüzde olduğunu bilir.
Etki alanı kimlik doğrulamasını başlat
Alan adınızın kimliğini doğrulamak için SendGrid hesabınıza giriş yapın ve sol taraftaki gezinme çubuğunda “Ayarlar”ı açın ve ardından Gönderici Kimlik Doğrulaması öğesini seçin .
Gönderici Kimlik Doğrulaması sayfasında , "Alan Adı Doğrulaması" bölümündeki "Başlayın" düğmesini tıklayın.
Çoğu durumda alanınızı satın aldığınız şirket olan DNS sağlayıcınızı seçmeniz istenecektir. DNS sağlayıcınız listede görünmüyorsa veya kim olduğunu bilmiyorsanız, “Emin Değilim”i seçin.
Ardından, giden e-postalarda görünen bağlantılara marka ekleme hakkında soru sorulacak. Bu şu anda ilgilendiğimiz bir konu değil, bu nedenle “Hayır”ı seçin. Kullanmak isterseniz bu seçeneği daha sonra etkinleştirebilirsiniz.
Sonraki sayfaya devam etmek için “İleri” düğmesine tıklayın.
Sonraki sayfada alan adınızı girmeniz istenecektir. yourdomainhere.com adresini girdim ve kullanmayı düşündüğünüz alan adını girmeniz gerekecek. “Gelişmiş Ayarlar” bölümünde hiçbir şeyi değiştirmenize gerek yoktur.
Devam etmek için “İleri” düğmesine tıklayın.
Sayfa şimdi, her biri bir tür, bir ana bilgisayar adı ve bir değere sahip alan yapılandırmanıza eklemeniz gereken 3 yeni DNS kaydını görüntüleyecektir. Size kolaylık sağlamak için, ana bilgisayar ve değerlerin tümü panoya kopyalanabilir. Aşağıda bana verilen ayarları görebilirsiniz. Sizinki benzer olacak, ancak içinde kendi alan adınız var:
Etki alanınıza DNS girişleri ekleme
Bir sonraki adım, DNS sağlayıcınıza bağlı olarak farklı olacaktır. Etki alanınızın yapılandırma sayfasını ziyaret edin ve DNS ayarlarının nerede düzenlendiğini bulun.
Aşağıdaki ekran görüntüleri Google Domains içindir . Aşağıdaki görselde üç DNS kaydından ilkini nasıl eklediğimi görebilirsiniz. @, ftp ve www adındaki 3 kaydın bu eğitimle alakasız olduğunu ve zaten etki alanımda ayarlanmış olduğunu unutmayın.
DNS kaydı adını nasıl girdiğinize dikkat edin. Bazı sağlayıcılar SendGrid tarafından gösterildiği gibi DNS kayıtlarınız için tam bir ad beklerken, diğerleri alan adından hemen önceki kısmı bekler. Örneğin, SendGrid'in em3329.alanadinizhere.com olarak gösterdiği kaydın Google Domains'de em3329 olarak girilmesi gerekiyordu . Diğer DNS kayıtlarınızı kontrol edin ve bu yeni kayıtları nasıl girdiğiniz konusunda tutarlı olun.
Ben onları girdikten sonra 3 yeni DNS kaydı şöyle görünüyordu:
Alan doğrulama
Şimdi alan adınızın beklemede olarak görüneceği SendGrid Gönderici Kimlik Doğrulaması sayfasına geri dönün . Kimlik doğrulama işlemine devam etmek için üzerine tıklayın.
Bir sonraki ekranda 3 DNS kaydını göreceksiniz. SendGrid'in DNS kayıtlarınızı çekmesi ve istenen girişleri eklediğinizi onaylaması için sayfanın sağ üst köşesindeki "Doğrula" düğmesine tıklayın.
SendGrid alan adınızı doğrulayabiliyorsa, "İşe yaradı!" mesajını alırsınız. sayfa:
Öte yandan SendGrid, DNS girişlerinizi doğrulayamazsa, daha sonra tekrar denemeniz gerekecektir. DNS değişiklikleri her yapıldığında, değişikliklerin DNS sunucularına yayılması biraz zaman alır. DNS girişlerinizi düzenledikten hemen sonra bir hata, "Doğrula" düğmesine tekrar basmadan önce ona biraz daha zaman vermeniz gerektiği anlamına gelir. DNS'nin tamamen yayılmasının 48 saat kadar sürebileceğini, ancak genellikle çok daha kısa sürebileceğini unutmayın.
Bir kez "İşe yaradı!" Sayfanızda, Flask web uygulamanıza gönderilen e-postaları alma yolundasınız.
Bir Flask e-posta uygulaması
Artık SendGrid'in e-postalarımızı iletebileceği basit bir Flask web uygulaması yazmaya hazırız.
Python Sanal Ortamı Oluşturun
Python en iyi uygulamalarını takip ederek projemiz için ayrı bir dizin oluşturacağız ve bunun içinde sanal bir ortam oluşturacağız . Daha sonra üzerine Flask çerçevesini kuracağız.
Bir Unix veya Mac OS sistemi kullanıyorsanız, bir terminal açın ve yukarıda açıklanan görevleri yapmak için aşağıdaki komutları girin:
Windows'ta öğreticiyi izliyorsanız, komut istemi penceresine aşağıdaki komutları girin:
Gelen bir e-posta yolu
Şimdi gelen mailleri alacak bir Flask uygulaması yazalım. Uygulamanın tamamı için kod aşağıda gösterilmiştir. Bu kodu app.py adlı bir dosyaya koyun .
Uygulamanın /email URL'sine bağlı yalnızca bir web yolu vardır . Gelen e-postaları bize iletmek için SendGrid'in bu rotayı çağırmasını sağlayacağız. Gönderdikleri istek, standart bir HTTP formu gönderisi olarak gönderilen e-postayla ilgili tüm ayrıntılara sahip olacaktır. Bu, Flask'tan tüm bu ayrıntılara `request.form` sözlüğünden kolayca erişebileceğimiz anlamına gelir.
Aşağıdaki form değişkenleri özellikle ilgi çekicidir:
- `request.form['from']`: e-postayı gönderen kişi
- `request.form['to']`: e-postanın alıcıları
- `request.form['konu']`: e-postanın konusu
- `request.form['text']` e-posta gövdesi düz metin biçiminde
- `request.form['html']` e-posta gövdesi HTML biçiminde
SendGrid tarafından gönderilen alanların yalnızca bunlar olmadığını unutmayın. SendGrid belgelerindeki e-posta parametrelerinin tam listesini inceleyin .
E-postaların işlenmesi büyük ölçüde her uygulamaya bağlı olduğundan, örneğin Flask uygulaması gibi, tek yaptığımız e-posta alanlarını konsola yazdırmak.
app.py dosyasını kaydettikten sonra Flask uygulamasını şu şekilde başlatabilirsiniz:
Uygulama şu anda çalışıyor ve gelen istekleri dinliyor, ancak yalnızca kendi bilgisayarınızdan erişilebilir. Uygulamayı şimdilik terminal pencerenizde çalışır durumda bırakın. Bir sonraki bölümde onu İnternet'e maruz bırakacağız.
SendGrid Gelen Ayrıştırma web kancası
Bu öğreticinin sonuncusu, SendGrid'i etki alanınızdaki gelen e-postaları Flask uygulamasına iletecek şekilde yapılandırmaktır.
ngrok'u başlatmak
ngrok aracı, herkese açık bir URL oluşturur ve bunu yerel olarak çalışan bir uygulamaya eşler. Bu, geliştirme ve test için İnternet'teki hizmetleri ortaya çıkarmak için kullanılan yaygın bir tekniktir. Flask uygulamanız tamamlandığında, üretim için uygun bir sunucuya dağıtacaksınız ve bu artık gerekli olmayacak.
Henüz yapmadıysanız, sisteminize ngrok yükleyin . Flask uygulamasını çalışır durumda bırakın ve ngrok'u aşağıdaki gibi başlatmak için ikinci bir terminal penceresi açın:
Bu, ngrok'a, Flask uygulamasının web isteklerini beklediği yerel makinemizde halka açık İnternet'ten 5000 numaralı bağlantı noktasına bir "tünel" oluşturmasını söylüyor. ngrok'un çıktısı aşağıdaki gibi görünecektir:
Ngrok ekranında “Forwarding” ile başlayan satırlara dikkat edin. Bunlar, ngrok'un istekleri hizmetimize yönlendirmek için kullandığı rastgele oluşturulmuş bir genel URL'yi gösterir. Şifreleme kullandığı için https:// URL'sini kullanacağız.
Web kancası URL'sini SendGrid ile kaydetme
SendGrid panosuna geri dönün ve Ayarlar altında Gelen Ayrıştırma'yı seçin , ardından "Ana Bilgisayar ve URL Ekle"yi tıklayın.
Sonraki sayfada, e-posta alacağınız alt etki alanını girin. Bu, alan adınızda henüz kullanılmayan herhangi bir alt alan adı olabilir veya doğrudan üst düzey alan adınızdan e-posta almayı tercih ederseniz, bu alan boş bırakılabilir. Aşağıdaki resimde alt etki alanı parse kullandım , bu, SendGrid tarafından kabul edilen e-postaların < thing>@parse.yourdomainhere.com biçiminde olacağı anlamına gelir . Alt etki alanı alanını boş bırakmak, SendGrid'in bazı durumlarda tercih edilebilecek olan <anything>@alanadinizhere.com için e-postaları kabul etmesine olanak tanır.
Ardından, alan adınızı seçmelisiniz . Bu, SendGrid ile doğruladığınız tüm etki alanlarını gösteren bir açılır listedir. Bunu ilk kez yapıyorsanız, yalnızca daha önce doğruladığınız alanı göreceksiniz.
Aşağıdaki alan, web kancanızın hedef URL'si içindir. Bu, Flask URL /email ile eklenen ngrok tarafından oluşturulan URL'dir . Benim durumumda bu https://bbf1b72b.ngrok.io/email idi . Benzer bir URL'ye sahip olacaksınız, ancak ngrok ana bilgisayar adının ilk kısmı farklı olacak.
Web kancanızı yapılandırmak için “Ekle”ye tıklayın.
Şimdi ana Gelen Ayrıştırma sayfasında web kancanız için bir giriş göreceksiniz:
Not: ngrok URL'leri, ngrok her durdurulduğunda ve yeniden başlatıldığında değişir, bu nedenle geliştirme sırasında ngrok'u her yeniden başlattığınızda URL'yi güncellemek için web kancanızı düzenlemeniz gerekir. Web kancanızı üretim kullanımı için dağıttığınızda, onu doğrudan genel bir URL'de barındırırsınız, böylece ngrok kullanılmaz.
Ayrıştırma alt etki alanını kaydetme
Bir önceki bölümde e-posta almak için seçtiğiniz alt alan adının, alanınızın DNS yapılandırmasında bir 'MX' kaydı ile tanımlanması gerekir. Bu kaydın değeri tüm SendGrid müşterileri için aynıdır: `mx.sendgrid.net.` ("net"ten sonra gelen noktaya dikkat edin).
Google Domains DNS yapılandırmamda, ayrıştırma alt alanımı şu şekilde tanımladım :
Hangi etki alanı sağlayıcısını kullandığınıza bağlı olarak, bu DNS kaydı için tam ana bilgisayar adını girmeniz gerekebileceğini hatırlayın, bu durumda bu, parse.yourdomainhere.com olacaktır .
Bir önceki bölümde bir alt etki alanı tanımlamamaya karar verdiyseniz, ana bilgisayar adınız etkialaninizhere.com olacaktır ve bu, bazı DNS sağlayıcıları için “ @” olarak verilmelidir .
Bu DNS değişikliğinin de yayılması gerekeceğini unutmayın, bu nedenle hemen e-posta alamayabilirsiniz.
Test e-postası gönderme
Flask uygulamanız ve ngrok çalışırken, e-posta istemcinizi açın ve bir test e-postası gönderin. SendGrid tüm kullanıcı adlarını yakaladığı için “Kime:” alanına istediğiniz herhangi bir kullanıcı adını girebilirsiniz. @'den sonra gelen, tam e-posta alma alan adınız olmalıdır.
Aşağıdaki örnekte [email protected] adresine bir e-posta gönderdim :
SendGrid'in e-postayı alması ve ngrok webhook URL'sine iletmesi için bir veya iki dakika bekleyin, bu da onu Flask'ın /e-posta uç noktasına iletecektir. Yukarıda gördüğünüz gibi Flask uygulamasında yazdığım basit uç nokta konsola alınan e-posta verilerini yazdırıyor:
İşte bu kadar, şimdi Flask uygulamamızda web istekleri olarak e-postalar alıyoruz!
Üretim dağıtımı
Bu bölümde, geliştirme sırasında dağıtılan web kancaları ile üretim amaçlı kullanıma yönelik web kancaları arasındaki birkaç önemli farklılığa dikkat çekmek istiyorum.
ngrok olmadan dağıtımlar
Yukarıda belirtildiği gibi, ngrok bir üretim aracı değildir ve asla bir üretim dağıtımında kullanılmamalıdır. Bunun yerine Flask uygulamanızı doğrudan İnternete bağlı bir sunucuya yerleştireceksiniz. Flask belgelerinde tartışılan birkaç dağıtım seçeneği vardır.
Web kancası güvenliği
E-posta alma uç noktanızın İnternet'te herkese açık olduğunu düşünün, böylece URL'yi bilen herkes ona bir istek gönderebilir ve uygulamanızı SendGrid istekleri gibi davranan kötü niyetli kullanıcılar tarafından gönderilen sahte çağrılara maruz bırakabilir.
Bu tür bir saldırıyı önlemek için iyi bir önlem , Flask uç noktanızda Temel Kimlik Doğrulamayı uygulamaktır. Flask-HTTPAuth uzantısı , bu tür bir güvenliğin uygulanmasında yardımcı olabilir.
Uç noktanıza kimlik doğrulama eklerseniz, SendGrid'e verilen web kancası URL'sine kullanıcı adını ve parolayı eklemeniz gerekir. Yukarıda kullandığım webhook'un https://username:[email protected]/email olarak verilmesi gerekiyor.
Çözüm
Her şeyi e-posta alacak şekilde ayarlamanın birçok adımı olsa da, bunu başarmanın en basit yollarından biri budur. Gelen Ayrıştırma hakkında daha fazla bilgi için dokümanlar sayfamıza bakın.
Inbound Parse ile ne oluşturduğunuzu görmek için sabırsızlanıyoruz!