Membuat Blasting Email Menggunakan Java. |
Yepp yang kalian butuh buat bikin project ini, yaitu buka IDE Eclipse versi apa aja boleh yang penting support java, kalo belom punya IDE'nya klik disini IDE ECLIPSE MARS !
Nahh lanjut yaa, gue anggep kalian udah punya IDE'nya, dan sekarang lanjut ke Library yang kita butuhin, yaitu Apache POI - Library ini dibutuhin cuma buat Read File Excel, soalnya nanti kebutuhan kita itu membuat list Email yang dituju buat Newsletter.
Okee selanjutnya kita langsung masuk aja ke koding'nya ;), langsung aja bikin New Project dan caranya open IDE Eclipse dan dipojok kiri atas ada FILE > New > Java Project. dan kalo udah, bikin file Main.Java dan copy paste kode dibawah ini :
package com.bye.project; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Main { public static void main(String[] args) throws Exception { try { FileInputStream file = new FileInputStream(new File("/PATH_FILE_EXCEL/example_user_email.xlsx")); //Create Workbook instance holding reference to .xlsx file XSSFWorkbook workbook = new XSSFWorkbook(file); //Get first/desired sheet from the workbook XSSFSheet sheet = workbook.getSheetAt(0); ListOke kalo udah di copy gue jelasin dikit, kalo kode diatas itu fungsinya cuman buat Read File Excel yang didalamnya berisi kumpulan list email yang mau dituju buat pengiriman. Jangan lupa buat rubah "PATH_FILE" yang diatas yaa ;) soalnya gue mau lanjut lagi nih sebelom ngantuk :vusers = new ArrayList (); //Iterate through each rows one by one Iterator rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); //For each row, iterate through all the columns Iterator
cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); //Check the cell type and format accordingly switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: //System.out.print(cell.getNumericCellValue() + "\t"); break; case Cell.CELL_TYPE_STRING: //System.out.print(cell.getStringCellValue() + "\t"); if(cell.getStringCellValue().contains("@")){ users.add(cell.getStringCellValue()); } break; } } System.out.println(""); } file.close(); SendGmail.sendToMail(users); } catch (Exception e) { e.printStackTrace(); } } } |
Nah yang selanjutnya kita buat File SendGmail.java dan coba langsung paste aja kode dibawah ini, biar nanti gw jelasin fungsinya untuk apa :
package com.bye.project; import javax.mail.*; import javax.mail.internet.*; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.Set; public class SendGmail { private static final String SMTP_HOST_NAME = "smtp.gmail.com"; private static final int SMTP_HOST_PORT = 465; private static final String SMTP_AUTH_USER = "bye.webster@gmail.com"; private static final String SMTP_AUTH_PWD = "***ISI_PASSWORD_LOE***"; public static void sendToMail(Listdata) throws Exception { int i = 0; while (i < data.size()) { sendToMail(data.get(i)); i++; } } public static void sendToMail(String email) throws Exception { Properties props = new Properties(); props.put("mail.transport.protocol", "smtps"); props.put("mail.smtps.host", SMTP_HOST_NAME); props.put("mail.smtps.auth", true); // props.put("mail.smtps.quitwait", "false"); Session mailSession = Session.getDefaultInstance(props); mailSession.setDebug(true); Transport transport = mailSession.getTransport(); /* // Buka Ini Kalo Mau Replace Some Kata Didalem File Template Map input = new HashMap (); input.put("Author", "bye.webster@gmail.com"); input.put("Topic", "HTML Template for Email"); input.put("Content In", "English"); //HTML mail content String htmlText = readEmailFromHtml("/PATH_FILE_TEMPLATE_NEWSLETER/template.html", input); */ String fileName = "/PATH_FILE_TEMPLATE_NEWSLETER//template.html"; MimeMessage message = new MimeMessage(mailSession); message.setSubject("Testing MAILBLAST Gan !"); message.setContent(readContentFromFile(fileName), "text/html"); message.setFrom(new InternetAddress("bye.webster@gmail.com")); message.addRecipient(Message.RecipientType.TO, new InternetAddress(email)); transport.connect(SMTP_HOST_NAME, SMTP_HOST_PORT, SMTP_AUTH_USER, SMTP_AUTH_PWD); transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO)); transport.close(); } //Method to replace the values for keys protected static String readEmailFromHtml(String filePath, Map input) { String msg = readContentFromFile(filePath); try { Set > entries = input.entrySet(); for(Map.Entry entry : entries) { msg = msg.replace(entry.getKey().trim(), entry.getValue().trim()); } }catch(Exception exception){ exception.printStackTrace(); } return msg; } //Method to read HTML file as a String private static String readContentFromFile(String fileName){ StringBuffer contents = new StringBuffer(); try { //use buffering, reading one line at a time BufferedReader reader = new BufferedReader(new FileReader(fileName)); try { String line = null; while (( line = reader.readLine()) != null){ contents.append(line); contents.append(System.getProperty("line.separator")); } }finally { reader.close(); } }catch (IOException ex){ ex.printStackTrace(); } return contents.toString(); } }
Nahh gue jelasin dikit lagi yaa, kalo file ini itu ada 4 method yang terdiri dari :
- sendToMail(List<String> data) : method ini berfungsi sebagai perulangan yang simple buat ngelempar parameter email ke method nomer 2.
- sendToMail(String email) : dan yang ini function buat kirim email'nya.
- readEmailFromHtml(String filePath, Map<String, String> input) : ini fungsi buat baca file template html dan merubah keyword secara dynamic, dan yang berkaitan juga sama method nomer 4.
- readContentFromFile(String fileName) : ini bagian yang buat baca perline dari isi file.
Nah gue mau kasih sample image dan file excel buat experiment :
Example Email List |
Link buat email list
Dan ini sample buat tampilan Newsletter'nya :D kita pake newsletter si MatahariMall aja hehhe :
Example Newsletter |
Link buat template newsletter
Nahhh coba langsung aja di Run As > Java Application. dan setelah di Run As hasil tampilan yang gue buka di salah satu email tujuan seperti dibawah ini :
Dan Hasil LOG dari proses di java kira kira seperti ini kalo applikasinya udah berjalan dengan sempurna ;)
Horeeee akhirnya kita bisa membuat aplikasi yang dibutuhin buat promosi product ! Semoga ini bisa berguna buat kalian yang punya usaha & pengen mengenalkan product kalian ke publik.
Example Email Yang Sudah Diterima ! |
Dan Hasil LOG dari proses di java kira kira seperti ini kalo applikasinya udah berjalan dengan sempurna ;)
EHLO 192.168.2.1 250-smtp.gmail.com at your service, [180.245.75.120] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8 DEBUG SMTP: Found extension "SIZE", arg "35882577" DEBUG SMTP: Found extension "8BITMIME", arg "" DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH" DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" DEBUG SMTP: Found extension "PIPELINING", arg "" DEBUG SMTP: Found extension "CHUNKING", arg "" DEBUG SMTP: Found extension "SMTPUTF8", arg "" DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM DEBUG SMTP: AUTH LOGIN command trace suppressed DEBUG SMTP: AUTH LOGIN succeeded DEBUG SMTP: use8bit false MAIL FROM:250 2.1.0 OK w25sm42741335pge.9 - gsmtp RCPT TO: 250 2.1.5 OK w25sm42741335pge.9 - gsmtp DEBUG SMTP: Verified Addresses DEBUG SMTP: bye.clone5@gmail.com DATA 354 Go ahead w25sm42741335pge.9 - gsmtp From: bye.webster@gmail.com To: bye.clone5@gmail.com Message-ID: <1102306204 .5.1485880538700="" ye-websters-macbook-pro.local=""> Subject: Testing MAILBLAST Gan ! MIME-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable 1102306204>
Horeeee akhirnya kita bisa membuat aplikasi yang dibutuhin buat promosi product ! Semoga ini bisa berguna buat kalian yang punya usaha & pengen mengenalkan product kalian ke publik.
Okaay selamat malaam, semoga mudah dipahami dan dimengerti, dan jangan lupa kabarin kalo jalan :D . Klo ada yang kurang jelas bisa ditanyakan di komentar yang ada dibawah, sampai ketemu lagi dalem episode selanjutnya, dan salam olahraga.
Link buat download sample project ;)
No comments:
Post a Comment