JSF

JSF Dersleri – Mail İle Hesabı Aktif Etme

CFESiYuUMAEwk8p

Merhaba arkadaşlar. Bu yazıda JSF ve Java Mail API ile mail yoluyla aktivasyon işlemi nasıl yapılır ona değineceğiz.

Normalde siz bir siteye kayıt olduğunuzda çoğu site sizden verilen e-posta adresi doğru olduğunu göstermenizi ister ve bunun için girilen e-posta adresine bir doğrulama linki yollar. Siz de bu linke tıkladığınızda arka tarafta çalışan metotlar gelen bazı parametrelere göre doğrulamasını yapar.

Şimdi biz de örnek uygulama ile bu senaryoyu gerçekleştirelim ve bu işin nasıl yapıldığına bakalım.  Bu yazıya kadar anlatmış olduğum yerleri yazının uzamaması için anlatmayacağım fakat bilmeyen arkadaşlar için ilgili yazılara linkler vereceğim. Bu yazıdaki uygulamanın kaynak kodlarına buradan erişebilirsiniz.

Şimdi ilk olarak bu örnek için kullanacağımız veri tabanının yapısını inceleyelim.

Screen Shot 2016-02-19 at 19.40.34

Tablo içerisinde otomatik artan bir id alanımız, isim-soyismi tutan nameAndSurname alanımız, e-posta adresini tutan emailAdress alanımız, hesabın aktif ya da devre dışı olduğuna dair bilgi tutan enabled alanımız ve son olarak aktivasyon için kullanacağımız temproraryUUID alanımız bulunuyor.

register.xhtml

Ana sayfamız olan register sayfası içerisinde  kullanıcıdan isim soyisim ve bir e-mail adresi girmesini bekliyoruz. Her iki alan da required=”true” ile zorunlu hale getirilmiştir ve requiredMessage özelliği ile alan boş geçilmeye çalışıldığında h:message bileşeni vasıtası ile kullanıcıya gösterilecek mesajlar tanımlanmıştır.

Kullanıcıdan e-posta adresini aldığımız kısımda fazladan bir de f:validateRegex ile hazırlanmış bir validator görmekteyiz. Bu etiketin pattern özelliğine atanmış olan şablona e-mail adresi test edilecektir. Daha fazla bilgi için buradaki yazıyı okuyunuz.

Sayfanın son aşamasındaki commandButton ile de girilen formdaki verileri veri tabanına kaydedecek ve e-posta gönderecek metodu tetikletiyoruz.

RegisterBean.java

Register sayfamız ile bağlantılı olan RegisterBean sınıfı içerisinde kullanıcıdan alınacak isim-soyismi tutacak nameAndSurname değişkeni, e-posta adresini tutacak email değişkeni, veri tabanına kayıt işleminin sonucunu tutacak olan operationResult değişkeni ve onların get-set metotları yer alıyor. Sınıf içerisinde tanımlanmış olan 4. değişken olan temprorayUUID değişkeni ise kullanıcının e-posta adesini doğrulaması için gönderilecek mailde ayırt edici kısım olacak değeri taşıyacak değişken.

registerUser metodu içerisinde JDBC kullanarak veri tabanına bağlantı yapıyoruz ve kullanıcının girdiği bilgileri veri tabanına kaydediyoruz. Dikkat etmemiz gereken nokta default olarak enabled sütunun false girildiğidir çünkü hesabın aktif ya da devre dışı olduğunu bu sütun bildirecektir ve birisi kayıt olduğunda olması gereken bu alanın false olmasıdır.  Aynı metot içerisinde

ifadesi ile kullanıcıya doğrulama maillinde gönderilecek ayırt edici bir id oluşturma işlemi yapıyoruz. Java’nın bize sağladığı kolaylıkla, java.util paketi ile rahatlıkla ayırt edici bir id oluşturabiliyoruz. Veri tabanındaki tablonun 4. sütununa da bu bilgi girilecek ve doğrulama işlemi sırasında bu bilgiye göre işlem yapılacak. Kayıt eklendikten sonra kullanıcıya mail atacak olan metodu çağııyoruz. Veri tabanına kayıt ekleme hakkında bilgi tazelemek için buradaki yazıma bakabilirsiniz.

sendActivationMail metodu içerisinde kullanıcının verdiği mail adresine doğrulama linki gönderilmesi işlemini yapıyoruz. Java’da mail gönderimi hakkında bilgi tazelemek için buradaki yazıma bakabilirsiniz. Metot içinde benim dikkat çekmek istediğim nokta  message.setText kısmı. Burada kullanıcıya tıklaması için yollayacağımız linki hazırlıyoruz. String içinde http ile başlayan yerden soru işaretine kadar kısım bildiğimiz klasik localhost dizin yapısı. Soru işareti ile başlayan yer bu URL’e parametre eklemesi yapıyoruz demektir. Soru işaretinden hemen sonra uuid= ifadesi ile ayıt edici id kısmına isim tanımlaması yapıyoruz. Son kısımda da + operatörü ile bağlama yaparak oluşturulan temprorayUUID gönderilecek URL’e ekleniyor.

resultPage.xhtml

resultPage sayfamız içerisinde RegisterBean içerisinden alınan operationResult ile kayıt başarılı mı yapıldı yoksa hata mı meydana geldi buna ilişkin bir mesaj yazdırılıyor.

activation.xhtml

activation sayfası içerisinde rendered özelliğine gelecek değere başarılı aktivasyon ya da başarısız aktivasyon mesajları yazdırıyoruz.

ActivationBean.java

ActivationBean içerisinde

kodu ile URL’den gelecek parametreyi alabiliyoruz. Daha önceki yazılarda değindiğimiz ve Managed Bean enjeksiyonuna yarayan @ManagedProperty notasyonuna verilen parametre içinde yer alan param ifadesi gelen parametreleri niteliyor. Bu parametreler içerisinden .uuid ifadesi ise bizim gönderilecek maile eklediğimiz url’deki uuid parametresini almamızı sağlıyor. Bu iki satır kod ile alınan parametre String uuid değişkenine yükleniyor.

boolean valid değişkeni ise hesabın aktif mi aktif değil mi ona ait değeri tutacak olan değişkendir.

@PostConstrcut notasyonu ile işaretlenmiş init metodu içerisinde önce SQL Update komutu ile gelen parametreye göre update veri tabanındaki ve linkteki uuid parametreleri tutan hesabın enabled kolonunu 1 yani true yapıyoruz. Akabinde SQL Select komutu ile ilgili kaydın enabled kolonundaki bilgi çekilip valid değişkenine atanıyor.

Ekran Çıktısı

Projeyi çalıştırınca gelen sayfadaki inputText’leri şu şekilde doldurup Kayıt Ol butonuna tıklıyorum.

Screen Shot 2016-02-19 at 19.47.20

Butona basmam akabinde resultPage sayfasına yönlendiriliyorum. Kaydın başarılı bir şekilde yapıldığını ve bana e-posta adresine aktivasyon maili geldiğini söylüyor.

Screen Shot 2016-02-19 at 19.48.56

Resimden de gördüğümüz üzere aktivasyon için içinde linki de barındıran mail geldi. Şimdi bu linke tıklıyorum.

Screen Shot 2016-02-19 at 19.51.50

Bana hesabımın başarı ile aktifleştirildiği söyleniyor. Demek ki ActivationBean içindeki valid değişkeni true özellik kazandı.

Screen Shot 2016-02-19 at 19.54.26

Şimdi bir de enabled alanı ne durumda onun için bir de veri tabanına baktığımızda enabled alanının 1 yani true olduğunu görüyoruz.

Screen Shot 2016-02-19 at 19.56.57

Bu yazı içerisinde JSF ve Java Mail API kullanarak mail ile aktivasyon nasıl yapılır onu öğrenmiş olduk arkadaşlar. Bu yazı ve başka yazılarımla ilgili sorularınızı, düzeltilmesini, değiştirilmesini istediğiniz yerleri lütfen yorum kısmına yazın arkadaşlar. Böylece sizden sonra yazıları okuyacak başka arkadaşların yazılardan daha iyi faydalanmasını sağlayabilirsiniz. Disqus yorum sistemine geçtiğimiz için misafir olarak kolayca yorum yapabilirsiniz zaten 🙂 Başka yazıda görüşene kadar sağlıcakla kalın.

Selam ve Sevgilerimle

  • Suleyman

    Teşekkurler paylaşım icin, jsf için kitap onerebilirmisiniz ayrıca ingilizce daha makbul olur.

    • İlkay Günel

      Merhabalar. Rica ederim.
      Türkçe zaten JSF için bir kitap yok. Sağda solda olan JSF kitaplarını dikkate almayınız.
      İngilizce olarak JSF için referans olarak genellikle Core Java Server Faces kitabı alınır:http://corejsf.com/ ama bu kitabı bulmak çok zor ülkede. Yurtdışından getirtebilirsiniz. Bu sefer de tuzlu olabilir.
      İlaveten Apress’in kitapları da çok iyidir. E-book olarak alabilirsiniz. Benim de almak istediğim kiataplar var oradan.
      Şu iki kitabı da tavsiye edebilirim:
      http://www.apress.com/9781430246237?gtmf=s
      http://www.apress.com/9781430250104?gtmf=s