Merhaba bugün Java Mail Api kullanarak Android Studio Otomatik Mail Gönderme konusunu anlatacağım. Bloğumda yayınlayacağım ilk makale bu olacak. İşlerimden vakit buldukça yeni makaleler gelecektir.
Mobil uygulamalarımızda kullanıcıların maillerine belli başlı iletiler yollamak isteyebiliyoruz. Burada karşımıza çıkan soru androidde mail nasıl yollanır sorusu oluyor. Bu işi Gmail, Yandex Mail, Outlook… veya kendimize ait özel bir e-posta ile yapabiliriz. Bu yazımda Android Studio üzerinden mail yollamak için gmail uygulama şifrelerini kullanacağız lafı uzatmadan yazıya geçelim.
İçindekiler
- 1) Mail Yollamak İçin Gereksinimler
- 2) Gerekli Kütüphanelerin Eklenmesi
- 3) Android Studio Otomatik Mail Yollamak İçin İnternet İzni
- 4) 2 Adımlı Doğrulama ve Uygulama Şifresi
- 5) Yapılandırma Verileri Sınıfı Oluşturma
- 6) Mail Gönderici Sınıfımızı Oluşturma
- 7) Android Studio Otomatik Mail Göndermek
- 8) Ekli Şekilde Mail Yollamak
- 9) Ekli Mail Yollamak İçin Dosya Okuma İzni
- 10) Sonuç – Mail Gönderici Örnek Uygulama
1) Mail Yollamak İçin Gereksinimler
- JavaMail’in desteklediği minimum sürüm Android KitKattır yani API düzeyiniz (minSdkVersion) 19 olmalıdır.
- Gmail ile mail yollamak istiyorsak 2 adımlı doğrulama aktif olmalıdır.
- Ayrıca Google Hesabınızda Uygulama Şifreleri kısmında gmail için uygulama şifresi oluşturulmalıdır. (2 Adımlı doğrulamayı desteklemeyen uygulamalarda oturum açabilmek için)
2) Gerekli Kütüphanelerin Eklenmesi
- build.gradle(Project: ProjeAdı) kısmına giriyoruz repositories bloğunun içine maven kodunu giriyoruz.
- build.gradle(Module: app) kısmına giriyoruz dependencies bloğuna aşağıdaki kütüphaneleri tanımlıyoruz. Bu yazı yazıldığı sırada en güncel sürümleri 1.5.5 üzerinden anlatılmıştır. Son sürüme ulaşmak için maven repository sayfasındaki dosyalara bakabilir veya Android Studio üzerinden aldığınız uyarıya göre gösterilen sürüme yükseltebilirsiniz.
3) Android Studio Otomatik Mail Yollamak İçin İnternet İzni
AndroidManifest.xml Dosyamıza girip <application hemen üstüne şu kodu yazıyoruz.
<uses-permission android:name=”android.permission.INTERNET” />
Artık gmail ile mail yollamak için 2 adımlı doğrulamayı aktif edip, gmail uygulama şifresi oluşturalım.
4) 2 Adımlı Doğrulama ve Uygulama Şifresi
Google hesabımıza girip Güvenlik sekmesine geliyoruz ve 2 Adımlı Doğrulama seçeneğine tıklıyoruz.
2 Adımlı Doğrulamayı başlatmak için Başlayın butonuna basıyoruz. Onay için telefonunuza bir doğrulama kodu yollanıyor bunu giriyoruz. Son olarak Şimdi Dene butonuyla telefonumuzu ikinci oturum açma seçeneğimiz olarak belirliyoruz.
Uygulama şifresi oluşturmak için Güvenlik sekmesinde Uygulama Şifreleri seçeneğine basıyoruz.
Burada uygulama olarak postayı cihaz olarak Diğer’i seçiyoruz.
Daha sonra isimlendirip oluştura basıyoruz.
Sonunda oluşturmuş olduğumuz şifreyi kopyalayıp bir yere kaydediyoruz. Daha sonra lazım olacak.
5) Yapılandırma Verileri Sınıfı Oluşturma
Config dosyamızı yani yapılandırma için kullanacağımız mailimiz ve uygulama şifremizi barındıracak sınıfı oluşturuyoruz. Android Studioda paket adımıza sağ tıklayıp New -> Java Class seçeneklerine basıp YapilandirmaVerileri isimli bir sınıf oluşturuyoruz. İçeriği şu şekilde olacaktır.
6) Mail Gönderici Sınıfımızı Oluşturma
Java Mail Api kullanarak Android Studio Otomatik Mail yollarken kısa sürelide olsa bir işlem yürütüldüğü için AsyncTask ile bu işlem sürecini ilerletiyoruz. Otomatik mail gönderen sınıfımız arka planda işlemleri hallettikten sonra maili yolluyor. İlgili kodların ne işe yaradığı yorum satırlarında belirtilmiştir. Paket adımıza sağ tıklayıp New -> Java Class seçeneklerine basıp MailGonderici isimli bir sınıf oluşturuyoruz. Aşağıdaki kodları içine ekliyoruz.
7) Android Studio Otomatik Mail Göndermek
Herhangi bir sınıftan örneğin MainActivity’den MailGonderici sınıfımızı şu şekilde çağırıp ardından execute() ile çalıştırmaya başlıyoruz. Bu sayede Java Mail Api ile Android Uygulama üzerinden otomatik mail yollama işlemini gerçekleştirmiş oluyoruz.
8) Ekli Şekilde Mail Yollamak
Dosya ekleri (attachment) eklenmiş şekilde otomatik mail göndermek için MailGonderici sınıfımızda değişiklikler yapacağız. Android Studio Ekli Mail Gönderme olarak işaretlediğim yerden itibaren yeni eklenen kısımdır.
9) Ekli Mail Yollamak İçin Dosya Okuma İzni
Uygulama içinde oluşturduğunuz bir dosya ekini veya telefonda yer alan bir dosyayı mail olarak yollayabilirsiniz. Örneğin Pdf oluşturmayı burada anlatmıştık. AndroidManifest.xml dosyamıza girip <application hemen üstüne şu kodları yazıyoruz. Bu kodları yazıp projeyi Android Studioda çalıştırdıktan sonra telefon ayarlarında uygulamalara girip kendi uygulamamızı bulup dosya okuma izni veriyoruz.
<uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE”/>
Bu sayede telefon hafızasında yer alan test.pdf isimli pdf dosyamızı mail ekimize ekleyerek otomatik mail yollama işlemini tamamlamış oluyoruz.
10) Sonuç – Mail Gönderici Örnek Uygulama
Okuduğunuz için teşekkürler umarım işinize yaramıştır. Android Studio Otomatik Mail nasıl yollanır bugün olduğunca anlattık. Takıldığınız kısımları yorumlarda bana sorabilirsiniz. Kaynak kodlara hemen aşağıdan ulaşabilirsiniz.
Mail Gönderici GitHub Kaynak Kodlar (Clone or download butonuyla indirebilirsiniz)
Merhaba mail gönderici kısmında alici_mail_adresi olarak tanımlamanız var mail adresini sayfada yazdırmak yerine kod kısmında belirtmek istiyorum..Teşekkürler
Merhaba, herhangi bir mail adresini tanımlama esnasında sabit olarak belirleyebilirsiniz. Yani EditText’i kaldırıp kodlama kısmında şöyle bir şey yapabilirsiniz. Oldukça basit zaten iyi çalışmalar dilerim.
this.alici_mail_adresi = alici_mail_adresi@example.com;
bu yorumun için teşekkür ederim işe yaradı geri dönüş için kusura bakma.. Başka bir sorun var..Umarım çözebiliriz. Emulatörde çalışıyor bu sıkıntısız fakat telefonuma yüklediğimde aşağıdaki hatayı alıyorum ve uygulama başa dönüyor rica etsem kontrol edermisin;
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
Process: com.example.eros, PID: 31809
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$4.done(AsyncTask.java:415)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.VerifyError: Rejecting class com.sun.mail.handlers.text_plain that attempts to sub-type erroneous class com.sun.mail.handlers.handler_base (declaration of ‘com.sun.mail.handlers.text_plain’ appears in /data/app/~~OK61DxvSqsBhnrzMxDH9cg==/com.example.eros-TN68p3j3G_r8-CfGaUJEUw==/base.apk)
at java.lang.Class.newInstance(Native Method)
at javax.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:600)
at javax.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:554)
at javax.activation.DataHandler.getDataContentHandler(DataHandler.java:627)
at javax.activation.DataHandler.writeTo(DataHandler.java:329)
at javax.mail.internet.MimeUtility.getEncoding(MimeUtility.java:324)
at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1525)
at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2198)
at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2159)
at javax.mail.Transport.send(Transport.java:123)
at com.example.eros.mailgonderici.doInBackground(mailgonderici.java:87)
at com.example.eros.mailgonderici.doInBackground(mailgonderici.java:19)
at android.os.AsyncTask$3.call(AsyncTask.java:394)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.VerifyError: Verifier rejected class com.sun.mail.handlers.handler_base: java.awt.datatransfer.DataFlavor[] com.sun.mail.handlers.handler_base.getTransferDataFlavors() failed to verify: java.awt.datatransfer.DataFlavor[] com.sun.mail.handlers.handler_base.getTransferDataFlavors(): [0x4] can’t resolve returned type ‘Unresolved Reference: java.awt.datatransfer.DataFlavor[]’ or ‘Reference: javax.activation.ActivationDataFlavor[]’ (declaration of ‘com.sun.mail.handlers.handler_base’ appears in /data/app/~~OK61DxvSqsBhnrzMxDH9cg==/com.example.eros-TN68p3j3G_r8-CfGaUJEUw==/base.apk)
at java.lang.Class.newInstance(Native Method)
at javax.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:600)
at javax.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:554)
at javax.activation.DataHandler.getDataContentHandler(DataHandler.java:627)
at javax.activation.DataHandler.writeTo(DataHandler.java:329)
at javax.mail.internet.MimeUtility.getEncoding(MimeUtility.java:324)
at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1525)
at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2198)
at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2159)
at javax.mail.Transport.send(Transport.java:123)
at com.example.eros.mailgonderici.doInBackground(mailgonderici.java:87)
at com.example.eros.mailgonderici.doInBackground(mailgonderici.java:19)
at android.os.AsyncTask$3.call(AsyncTask.java:394)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Aşağıdaki linki inceleyebilirsiniz sdk kaynaklı olduğunu düşünüyorum.
https://stackoverflow.com/questions/64650611/android-studio-verifyerror-rejecting-class-text-plain-from-javamail-api
Merhaba, e-posta ekine o anda çektiğim fotoğrafı otomatik ekleterek hemen çekim sonrası ekleterek, e posta adresine direkt göndermek için ne yapmam gerekir.
Bilgi paylaşımlarınız ve emekleriniz için teşekkürler