Instead of directly using JavaMail API here is a small utility to send emails which shields the user from JavaMail internals.
EmailConfiguration.java
package com.sivalabs.email; import java.util.Properties; public class EmailConfiguration { private Properties properties = new Properties(); public static final String SMTP_HOST = "mail.smtp.host"; public static final String SMTP_AUTH = "mail.smtp.auth"; public static final String SMTP_TLS_ENABLE = "mail.smtp.starttls.enable"; public static final String SMTP_AUTH_USER = "smtp.auth.user"; public static final String SMTP_AUTH_PWD = "smtp.auth.pwd"; public static final String DEBUG = "debug"; public Properties getProperties() { return this.properties; } public void setProperty(String key, String value) { this.properties.put(key, value); } public void addProperties(Properties props) { this.properties.putAll(props); } public String getProperty(String key) { return this.properties.getProperty(key); } }
Email.java
package com.sivalabs.email; import java.util.ArrayList; import java.util.List; public class Email { private String from; private String[] to; private String[] cc; private String[] bcc; private String subject; private String text; private String mimeType; private List<Attachment> attachments = new ArrayList<Attachment>(); 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[] getCc() { return cc; } public void setCc(String... cc) { this.cc = cc; } public String[] getBcc() { return bcc; } public void setBcc(String... bcc) { this.bcc = bcc; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getText() { return text; } public void setText(String text) { this.text = text; } public String getMimeType() { return mimeType; } public void setMimeType(String mimeType) { this.mimeType = mimeType; } public List<Attachment> getAttachments() { return attachments; } public void addAttachments(List<Attachment> attachments) { this.attachments.addAll(attachments); } public void addAttachment(Attachment attachment) { this.attachments.add(attachment); } public void removeAttachment(int index) { this.attachments.remove(index); } public void removeAllAttachments() { this.attachments.clear(); } }
Attachment.java
package com.sivalabs.email; public class Attachment { private byte[] data; private String filename; private String mimeType; public Attachment() { } public Attachment(byte[] data, String filename, String mimeType) { super(); this.data = data; this.filename = filename; this.mimeType = mimeType; } public byte[] getData() { return data; } public void setData(byte[] data) { this.data = data; } public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } public String getMimeType() { return mimeType; } public void setMimeType(String mimeType) { this.mimeType = mimeType; } }
EmailService.java
package com.sivalabs.email; import java.util.List; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.mail.Authenticator; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.util.ByteArrayDataSource; public class EmailService { private EmailConfiguration configuration = null; private Authenticator auth =null; public EmailService(EmailConfiguration configuration) { this.configuration = configuration; this.auth = this.buildSmtpAuthenticator(); } private Authenticator buildSmtpAuthenticator() { String emailId = configuration.getProperty(EmailConfiguration.SMTP_AUTH_USER); String password = configuration.getProperty(EmailConfiguration.SMTP_AUTH_PWD); return new SMTPAuthenticator(emailId, password); } public void sendEmail(Email email) { Session session = Session.getDefaultInstance(this.configuration.getProperties(), auth); boolean debug = Boolean.valueOf(this.configuration.getProperty(EmailConfiguration.DEBUG)); session.setDebug(debug); try { Message msg = this.buildEmailMessage(session, email); Transport.send(msg); } catch (MessagingException e) { throw new RuntimeException(e); } } private Message buildEmailMessage(Session session, Email email) throws MessagingException { Message msg = new MimeMessage(session); msg.setSubject(email.getSubject()); this.addRecievers(msg, email); Multipart multipart = new MimeMultipart(); this.addMessageBodyPart(multipart, email); this.addAttachments(multipart, email); msg.setContent(multipart); return msg; } private void addRecievers(Message msg, Email email) throws MessagingException { InternetAddress from = new InternetAddress(email.getFrom()); msg.setFrom(from); InternetAddress[] to = this.getInternetAddresses(email.getTo()); msg.setRecipients(Message.RecipientType.TO, to); InternetAddress[] cc = this.getInternetAddresses(email.getCc()); msg.setRecipients(Message.RecipientType.CC, cc); InternetAddress[] bcc = this.getInternetAddresses(email.getBcc()); msg.setRecipients(Message.RecipientType.BCC, bcc); } private void addMessageBodyPart(Multipart multipart, Email email) throws MessagingException { BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setContent(email.getText(), email.getMimeType()); multipart.addBodyPart(messageBodyPart); } private void addAttachments(Multipart multipart, Email email) throws MessagingException { List<Attachment> attachments = email.getAttachments(); if(attachments != null && attachments.size() > 0) { for (Attachment attachment : attachments) { BodyPart attachmentBodyPart = new MimeBodyPart(); String filename = attachment.getFilename() ; DataSource source = new ByteArrayDataSource(attachment.getData(), attachment.getMimeType()); attachmentBodyPart.setDataHandler(new DataHandler(source)); attachmentBodyPart.setFileName(filename); multipart.addBodyPart(attachmentBodyPart); } } } private InternetAddress[] getInternetAddresses(String... addresses) throws AddressException { if(addresses == null || addresses.length == 0) { return null; } InternetAddress[] iAddresses = new InternetAddress[addresses.length]; for (int i = 0; i < addresses.length; i++) { iAddresses[i] = new InternetAddress(addresses[i]); } return iAddresses; } } class SMTPAuthenticator extends javax.mail.Authenticator { private String username; private String password; public SMTPAuthenticator(String username, String password) { this.username = username; this.password = password; } public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }Add the mail.jar, activation.jar to the classpath. Here is the TestClient on how to use the EmailService Utility.
package com.sivalabs.email; public class EmailClient { public static void main(String[] args) { EmailConfiguration configuration = new EmailConfiguration(); configuration.setProperty(EmailConfiguration.SMTP_HOST, "smtp.gmail.com"); configuration.setProperty(EmailConfiguration.SMTP_AUTH, "true"); configuration.setProperty(EmailConfiguration.SMTP_TLS_ENABLE, "true"); configuration.setProperty(EmailConfiguration.SMTP_AUTH_USER, "xyz@gmail.com"); configuration.setProperty(EmailConfiguration.SMTP_AUTH_PWD, "**********"); EmailService emailService = new EmailService(configuration); Email email = new Email(); email.setFrom("sivaprasadreddy.k@gmail.com"); email.setTo("sivaprasadreddy_k@yahoo.co.in"); email.setCc("sivaprasadreddy.k@gmail.com"); email.setSubject("Test Mail from SivaLabs"); email.setText("Hi,This is a test email from Siva Labs
"); email.setMimeType("text/html"); Attachment attachment1 = new Attachment("ABCDEFGH".getBytes(), "test1.txt","text/plain"); email.addAttachment(attachment1); Attachment attachment2 = new Attachment("XYZZZZZZ".getBytes(), "test2.txt","text/plain"); email.addAttachment(attachment2); emailService.sendEmail(email); } }
Hi can you please provide the code in a zip, it would be more easier to run the code in that way.
ReplyDeleteIts good for me as novice to learn.please provide code in zip
ReplyDeleteif for iso-8859-1
ReplyDeleteMimeType:
email.setMimeType("text/html; charset=utf-8");
Class EmailService:
.....
private Message buildEmailMessage(Session session, Email email) throws MessagingException {
// Message msg = new MimeMessage(session);
// msg.setSubject(email.getSubject());
// Fix for ISO by Ricardo Cabral
MimeMessage msg = new MimeMessage(session);
msg.setSubject(email.getSubject(), email.getCharset());
....