Məqalələr

JAVA`da e-mail göndərmək

JAVA`da e-mail göndərmək
Written by Mushfiq Mammadov

Bu məqalədə sizlərə Java ilə e-mail göndərməyi izah etməyə çalışacam. İlk öncə e-mail göndərmək nə üçün lazım ola bilər ona nəzər salaq. Misal üçün mən mail göndərməyi 3 yerdə tətbiq etmişəm.

Birincisi, yazmış olduğum web proyekti istifadə edən userlərin proyektlə bağlı irad və təkliflərini bildirmələri üçün. İstifadəçi irad və təkliflərini yazıb “göndər” düyməsini sıxdıqda arxa tərəfdə sendMailTLS metodu çağrılır və irad-təklifin mətni default olaraq təyin etdiyim e-mail ünvanına göndərilir.

İkincisi, baza ilə bağlantı zamanı yarana biləcək Exception’ların mətnlərini görmək üçün. Proyekt server’ə deploy olunduqdan sonra console’da proyektin axışını izləmək olmur (mümkün olmayan hallardan söhbət gedir). Buna görə də try-catch bloku daxilində yazılmış kodda əgər exception baş verərsə, catch’də bu exceptionu yaxalayıb mətnini öz e-mailinizə göndərirsiniz.

Üçüncüsü, qeydiyyat formu olan bir app.da istifadəçi öz parolunu unudursa, həmin istifadəçiyə avtomatlaşmış rejimdə öz parolunu göndərmək üçün. Bu zaman istifadəçi öz e-mailini qeyd edir və onun qeyd etdiyi e-mail’in bazada mövcud olub olmadığı yoxlanıldıqdan sonra həmin e-mailə parol göndərilir.
İndi isə kod tərəfinə baxaq. Mail göndərmək üçün əsas 3 şeyi bilməyiniz vacibdir:

  1. İstifadə edəcəyiniz mail serverin SMTP Host ünvanını
  2. İstifadə edəcəyiniz mail serverin SMTP Port’unu
  3. İstifadə edəcəyiniz mail serverdə qeydiyyatdan keçmiş account’un (account’unuzun) username və password’u

Aşağıda Gmail üzərindən mail göndərilməsinə dair bir nümunə verilmişdir. Daha aydın olsun deyə izaha nümunə üzərindən davam edək.

package com.mm.mail;

import java.util.List;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/*
 * @author MM
 */
public class SendMail {

    public static void sendMailTLS(String subject, String text) {

        final String username = "[email protected]";    // gmail`ə daxil olduğunuz elektron ünvan
        final String password = "******";                // həmin e-mail`ə aid parol
        final String from = "[email protected]";            // hansı addan göndərildiyini bildirən ünvan
        String to = "[email protected]";                      // mail göndərmək istədiyiniz ünvan
        String tomultiple = "[email protected], [email protected], [email protected]"; // bir neçə nəfərə göndərmək istəyirsinizsə

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");   // 2-ci parametrə diqqət!
        props.put("mail.smtp.port", "587");              // 2-ci parametrə diqqət!

        Session session = Session.getInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password);   // username&password düzgünlüyünün yoxlanılması
                }
            });

        try {
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));        // from
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(to));                // istəkdən asılı olaraq "to" yaxud "tomultiple" istifadə olunur
            message.setSubject(subject);                       // e-mail`in başlığı (subject) göndərilir
            message.setText(text);                             // e-mail`in mətni (text) göndərilir

            Transport.send(message);
            
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        sendMailTLS("Burada gonderilen email`in bashligi qeyd olunmalidir", "Burada ise gonderilen emailin metni qeyd olunmalidir");
    }

}

Yeni Web proyekt yaradırıq və içində də adi java class yaradıb yuxarıda gördüyünüz paketləri import edirik. Bundan sonra metod yazırıq və ilk öncə istifadə edəcəyimiz mail server gmail olduğundan gmail’də qeydiyyatdan keçdiyimiz username və password’u qeyd edirik. Daha sonra “from”, “to”, “tomultiple” dəyişənləri elan edib ilk dəyərlərini mənimsədirik (açıqlamaları commentlə qarşısında göstərilib). Əgər e-mail göndərmək istədiyiniz ünvanları əvvəlcədən bilmirsinizsə, proyekt işləyən vaxtı təyin ediləcəksə, həmin e-mail ünvanı parametr kimi də metoda göndərib “to” dəyişəninə mənimsədə bilərsiniz. Sadəcə e-mail ünvanların düzgün yazıldığına fikir verin. Username&Password’dan sonra bilməli olduğumuz digər iki vacib şey 29 və 30-cu sətirlərdə commentlərdə də qeyd etdiyimiz kimi ikinci parametrdi: SMTP Host və SMTP Port. Gmail üçün SMTP Host “smtp.gmail.com” və SMTP Port isə “587”-dir. Bu parametrlərin düzgün olduğu təsdiq edildikdən sonra Username&Password’un Gmail’də mövcud olub-olmaması yoxlanılır, əgər düzgün olarsa e-mail göndərilir.

Burada diqqət edilməsi gərəkən vacib bir məqam var. Əgər siz internetə Proxy ilə qoşulmusunuzsa, daxili mail server mövcuddursa, Gmail üzərində göstərilmiş bu nümunə işləməyəcəkdir. Çünki əvvəldə də qeyd olunduğu kimi host, port və account daxili mail server`ə uyğunlaşdırılmalıdır. Daxili mail server varsa, təbii ki, bu mail server`də sizin accountunuz mövcuddur. Qalır bu mail serverin host və portunu öyrənmək. Bunu Outlook, Windows Mail proqramlarının içinə daxil olaraq öyrənmək olar. Misal üçün, Windows Mail`də proqramı açdıqdan sonra yuxarıdakı menu`dan Tools –> Accounts –>Properties –>Servers seçərək Outgoing Mail (SMTP) label`inin qarşısında SMTP Hostu və  Tools –> Accounts –> Properties –>Advanced seçərək Outgoing Mail (SMTP) label`inin qarşısında SMTP Portu görəcəksiniz. Həmin host və portu 29 və 30-cu sətirlərdə ikinci parametr kimi qeyd edilmiş host  və portla əvəz edirsiniz. Username&Password`a da daxili mail serverdəki username və password`unuzu yazırsınız. Bundan sonra yenidən normal şəkildə e-mail göndərə biləcəksiniz.

E-mail göndərməyi test etmək üçün balaca bir nümunə web app yaratmışam, test etmək istəsəniz proyekti buradan yükləyərək İDE`də açıb test edə bilərsiniz.

Ümid edirəm ki, faydalı olmuşdur. Uğurlar

P.S. Main metodu sizi çaşdırmasın, nümunə Web Application`da yaradılıb, sadəcə class`ın içindən run edib yoxlamaq rahat olsun deyə main metodu yazmışam. Bu nümunəni Java Application`da yazdıqda kitabxanaya əlavə .jar faylı yüklənməlidir (yüklə). Web Application`da isə .jar faylı add etməyə ehtiyac yoxdu.

22.04.2014

About the author

Mushfiq Mammadov

Leave a Comment


The reCAPTCHA verification period has expired. Please reload the page.

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.