package com.adisayoga.earthquake.wrapper; import java.util.Date; import java.util.Properties; import javax.activation.CommandMap; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.activation.MailcapCommandMap; import javax.mail.Authenticator; import javax.mail.BodyPart; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import android.content.Context; import android.util.Log; /** * Class bantuan untuk memudahkan dalam mengirim email. * * @author Adi Sayoga */ public class EarthquakeMail extends Authenticator { private static final String TAG = "EarthquakeMail"; private String host = "smtp.gmail.com"; // default smtp server private String port = "465"; // default smtp port private String sport = "465"; // default socketfactory port private String user = ""; // username private String pass = ""; // password private String from = ""; // Email dikirim dari private String[] to = new String[] {}; private String subject = ""; // Email subjek private String body = ""; // email body private final boolean auth = true; // smtp authentication - default on private final boolean debuggable = false; // debug mode on or off - default off private final Multipart multipart = new MimeMultipart(); public EarthquakeMail(Context context) { // Ada sesuatu yang salah dengan MailCap, javamail tidak dapat menemukan // handler untuk multipart/mixed part, jadi berikut ini perlu ditambahkan. MailcapCommandMap mc = (MailcapCommandMap) CommandMap .getDefaultCommandMap(); mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); CommandMap.setDefaultCommandMap(mc); Prefs prefs = Prefs.getInstance(context); // Load dari preferences atau biarkan dengan nilai defaultnya String host = prefs.getMailHost(); if (!host.equals("")) this.host = host; String port = prefs.getMailPort(); if (!port.equals("")) this.port = port; String sport = prefs.getMailSPort(); if (!sport.equals("")) this.sport = sport; this.user = prefs.getMailUsername(); this.pass = prefs.getMailPass(); } public EarthquakeMail(Context context, String user, String pass) { this(context); this.user = user; this.pass = pass; } /** * Kirim email. * * @return True jika email berhasil dikirim, false sebaliknya. * @throws Exception */ public boolean send() throws Exception { if (user.equals("") || pass.equals("") || to.length == 0 || from.equals("") || subject.equals("") || body.equals("")) { Log.d(TAG, "Data tidak lengkap"); return false; } Properties props = getProperties(); Session session = Session.getInstance(props, this); MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress(from)); InternetAddress[] addressTo = new InternetAddress[to.length]; for (int i = 0; i < to.length; i++) { addressTo[i] = new InternetAddress(to[i]); } msg.setRecipients(MimeMessage.RecipientType.TO, addressTo); msg.setSubject(subject); msg.setSentDate(new Date()); // setup message body BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText(body); multipart.addBodyPart(messageBodyPart); // Taruh parts pada message msg.setContent(multipart); // kirim email Transport.send(msg); Log.d(TAG, "Pesan telah dikirim ke: " + from.toString()); Log.i(TAG, body); return true; } private Properties getProperties() { Properties props = new Properties(); props.put("mail.smtp.host", host); if (debuggable) props.put("mail.debug", "true"); if (auth) props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", port); props.put("mail.smtp.socketFactory.port", sport); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.fallback", "false"); return props; } /** * Menambahkan file lampiran. * * @param filename Nama file lampiran * @throws Exception */ public void addAttachment(String filename) throws Exception { BodyPart messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); } @Override public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user, pass); } // Getters dan setters public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String[] getTo() { return to; } public void setTo(String[] to) { this.to = to; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public String getPort() { return port; } public void setPort(String port) { this.port = port; } public String getSport() { return sport; } public void setSport(String sport) { this.sport = sport; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } }