Kamis, 21 Agustus 2014

Aplikasi sederhana pengiriman email pada server sendiri dengan JavaMail

Seiring dengan perkembangan cloud computing dan aplikasi cloud, maka email sebagai pengenal seseorang dalam dunia maya juga menjadi sesuatu hal yang penting.

Aplikasi cloud atau hanya sekedar website biasa membutuhkan email baik itu sebagai promosi produk, konfirmasi keikut sertaan, milis, atau notifikasi. Oleh karena itu, kemampuan setiap bahasa pemrograman dan developer-nya untuk mengirimkan email sangatlah penting. Alangkah lucunya sebuah aplikasi atau usaha Anda yang digadang-gadang sangat hebat mengirimkan promosinya melalui akun mail gratis seperti gmail, yahoo atau akun mail gratis lainnya.

Well... jika Anda ingin membuatkan mail pribadi, bisa hubungi saya :D

Pada tulisan kali ini saya membahas tentang mengirim email dengan library javax.mail. Library ini bisa didownload pada http://www.oracle.com/technetwork/java/javamail/index.html

Untuk membuat email dapat terkirim melalui server, Anda harus mengaktifkan port 25 atau port lainnya yang mendukung Send Mail Transfer Protocol (SMTP)


1. Mengirim email dari Virtual Private Server.
Pada code dibawah juga saya selipkan 'myserver.com', silahkan aktifkan baris tersebut dan menonaktifkan baris localhos untuk dapa mengirimkan email jika server Anda langsung pada IP publik.

package tutmailb;

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;

public class SendEmail {
   public static void main(String[] args) {
      
      System.out.println("mulai mengirim");
    
      // Dikirimkan kepada...
      String to = "itsme@nitzaalfinas.com";

      // Data pengirim
      String from = "nitza@myserver.com";
      final String username = "nitza"; //username server
      final String password = "password"; //password server

      // mengirimkan email melalui vps
      String host = "localhost";
      
      //mengirimkan email melalui server pribadi
      //String host = "myserver.com";

      
      Properties props = new Properties();
      props.put("mail.smtp.host", host);
      props.put("mail.smtp.port", "25");
      

      // Get the Session object.
      Session session = Session.getInstance(props,
         new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
               return new PasswordAuthentication(username, password);
            }
      });
      
      
      try {
    // Default MimeMessage object.
    Message message = new MimeMessage(session);
    
    // setFrom
    message.setFrom(new InternetAddress(from));
 
    // header
    message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
 
    // pesan
    message.setText("Halo... Ini pengirimain email melalui JavaMail ... ");

    //jika ingin mengirimkan email html, aktifkan baris berikut dan matikan baris diatas
    //message.setContent("

Ini adalah email html

", "text/html"); // kirim email Transport.send(message); System.out.println("Saya keren dan telah sukses mengirimkan email... :D"); } catch (MessagingException e) { throw new RuntimeException(e); } } }


Compile kedalam bentuk jar. Misalnya; tutmailb.jar
Untuk menjalankan email diatas, buka terminal Anda dan ketik perintah Java seperti berikut;

$ java -jar tutmailb.jar



2. Mengirimkan email melalui Gmail
Mengirimkan email langsung dari akun gmail Anda juga memungkinkan dilakukan melalui server Anda. Tentunya user yang akan menerima akan melihat email yang dikirim melaui gmail. Tetapi gmail juga memberikan opsi anda untuk mengganti gmail anda dengan format namaanda@perusahaananda.com.



package tutmailb;

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;

public class SendEmail {
   public static void main(String[] args) {
      
      System.out.println("mulai mengirim");
    
      // Dikirimkan kepada...
      String to = "kepada@gmail.com";

      // Data pengirim
      String from = "dari@gmail.com";
      final String username = "dari";//username gmail
      final String password = "password";//password gmail

      // mengirimkan email melalui vps
      String host = "myserver.com";
      

      Properties props = new Properties();
      props.put("mail.smtp.auth", "true");
      props.put("mail.smtp.starttls.enable", "true");
      props.put("mail.smtp.host", host);
      props.put("mail.smtp.port", "25");
      

      // Get the Session object.
      Session session = Session.getInstance(props,
         new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
               return new PasswordAuthentication(username, password);
            }
      });
      
      
      try {
    // Default MimeMessage object.
    Message message = new MimeMessage(session);
 
    
    // setFrom
    message.setFrom(new InternetAddress(from));
 
    // header
    message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
 
    // pesan
    message.setText("Halo... Ini pengirimain email melalui JavaMail ... ");
    
    // kirim email
    Transport.send(message);

    System.out.println("Saya keren dan telah sukses mengirimkan email... :D");

      } 
      catch (MessagingException e) {
         throw new RuntimeException(e);
      }
   }
}

Untuk menjalankannya, sama dengan cara diatas menggunakan terminal.


3. Selesai.

Berikut screenshot aplikasi diatas dari server aplikasi diatas.



Aplikasi sederhana diatas masih berjalan dengan command line. Mungkin pada tulisan selanjugnya saya akan bahas mengirimkan email dengan User Interface (UI).