com.clickntap.tool.mail.Mail Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of Stripecube Show documentation
Show all versions of Stripecube Show documentation
Stripecube is an open source Java framework for Web Applications
package com.clickntap.tool.mail;
import java.io.File;
import java.net.FileNameMap;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.clickntap.utils.ConstUtils;
public class Mail {
private static Log log = LogFactory.getLog(Mail.class);
private static final String MIXED = "mixed";
private static final String RELATED = "related";
private static final String ALTERNATIVE = "alternative";
private static final String CONTENT_ID = "Content-Id";
private static final String CONTENT_TYPE = "Content-Type";
protected String key = ConstUtils.EMPTY;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
protected String host = ConstUtils.EMPTY;
protected String port = null;
protected String from = null;
protected String username = null;
protected String password = null;
protected List to = new ArrayList();
protected List cc = new ArrayList();
protected List bcc = new ArrayList();
protected List attachs = new ArrayList();
protected List resources = new ArrayList();
protected String subject = ConstUtils.EMPTY;
protected List bodies = new ArrayList();
protected Boolean starttls;
public Mail() {
this(false);
}
public Mail(Boolean starttl) {
this.starttls = starttl;
}
public void setHost(String host) {
this.host = host;
}
public void setPort(String port) {
this.port = port;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setFrom(String email) {
this.from = email;
}
public void addTo(String email) {
this.to.add(email);
}
public void addTos(List to) {
this.to.addAll(to);
}
public void resetTo() {
this.to = new ArrayList();
}
public void addCc(String mail) {
this.cc.add(mail);
}
public void addCcs(List cc) {
this.cc.addAll(cc);
}
public void resetCc() {
this.cc = new ArrayList();
}
public void addBcc(String mail) {
this.bcc.add(mail);
}
public void addBccs(List bcc) {
this.bcc.addAll(bcc);
}
public void resetBcc() {
this.bcc = new ArrayList();
}
public void addAttach(String file) {
this.attachs.add(file);
}
public void addAttachs(List attachs) {
this.attachs.addAll(attachs);
}
public void resetAttachs() {
this.attachs = new ArrayList();
}
public void addResource(String file) {
this.resources.add(file);
}
public void addResources(List resources) {
this.resources.addAll(resources);
}
public void resetResources() {
this.resources = new ArrayList();
}
public void setSubject(String subject) {
this.subject = subject;
}
public void addBody(String content, String contentType) {
bodies.add(new Body(content, contentType));
}
public void addBodies(List bodies) {
this.bodies.addAll(bodies);
}
public void resetBodies() {
bodies = new ArrayList();
}
public void send(boolean synchronous) throws Exception {
if (synchronous)
send();
else
sendAsynchronous();
}
public void send() throws Exception {
MimeMessage msg;
java.util.Properties p = new java.util.Properties();
SmtpAuthenticator authenticator = null;
if (host.equals("localhost"))
p.put("mail.host", host);
else {
p.put("mail.smtp.host", host);
p.put("mail.smtp.localhost", host);
}
if (port != null)
p.put("mail.smtp.port", port);
if (username != null) {
if (starttls)
p.put("mail.smtp.starttls.enable", "true");
p.put("mail.smtp.auth", "true");
authenticator = new SmtpAuthenticator(username, password);
}
Session session = Session.getInstance(p, authenticator);
msg = new MimeMessage(session);
if (from != null)
msg.setFrom(new InternetAddress(from));
msg.setSubject(subject);
for (int i = 0; i < to.size(); i++)
msg.addRecipient(Message.RecipientType.TO, new InternetAddress((String) to.get(i)));
for (int i = 0; i < cc.size(); i++)
msg.addRecipient(Message.RecipientType.CC, new InternetAddress((String) cc.get(i)));
for (int i = 0; i < bcc.size(); i++)
msg.addRecipient(Message.RecipientType.BCC, new InternetAddress((String) bcc.get(i)));
MimeBodyPart mbp = null;
FileDataSource fds = null;
Body body = null;
if ((attachs.size() + resources.size() + bodies.size()) > 1) {
Multipart mp = null;
Multipart mpBodies = null;
Multipart mpResources = null;
String mpType = ConstUtils.EMPTY;
if (attachs.size() > 0)
mpType = MIXED;
else if (resources.size() > 0)
mpType = RELATED;
else if (bodies.size() > 1)
mpType = ALTERNATIVE;
mp = new MimeMultipart(mpType);
if (resources.size() > 0 && !mpType.equals(RELATED))
mpResources = new MimeMultipart(RELATED);
if (bodies.size() > 1 && !mpType.equals(ALTERNATIVE))
mpBodies = new MimeMultipart(ALTERNATIVE);
for (int i = 0; i < bodies.size(); i++) {
body = (Body) bodies.get(i);
mbp = new MimeBodyPart();
mbp.setContent(body.getContent(), body.getContentType());
if (mpBodies != null)
mpBodies.addBodyPart(mbp);
else if (mpResources != null)
mpResources.addBodyPart(mbp);
else
mp.addBodyPart(mbp);
}
if (mpBodies != null) {
mbp = new MimeBodyPart();
mbp.setContent(mpBodies);
if (mpResources != null)
mpResources.addBodyPart(mbp);
else
mp.addBodyPart(mbp);
}
for (int i = 0; i < resources.size(); i++) {
FileNameMap fileNameMap = URLConnection.getFileNameMap();
String contentType = fileNameMap.getContentTypeFor((String) resources.get(i));
File f = new File((String) resources.get(i));
fds = new FileDataSource(f);
mbp = new MimeBodyPart();
mbp.setDataHandler(new DataHandler(fds));
mbp.setHeader(CONTENT_ID, ConstUtils.LT + fds.getName() + ConstUtils.GT);
mbp.setHeader(CONTENT_TYPE, contentType);
if (mpResources != null)
mpResources.addBodyPart(mbp);
else
mp.addBodyPart(mbp);
}
if (mpResources != null) {
mbp = new MimeBodyPart();
mbp.setContent(mpResources);
mp.addBodyPart(mbp);
}
for (int i = 0; i < attachs.size(); i++) {
fds = new FileDataSource((String) attachs.get(i));
mbp = new MimeBodyPart();
mbp.setDataHandler(new DataHandler(fds));
mbp.setFileName(fds.getName());
mp.addBodyPart(mbp);
}
msg.setContent(mp);
} else if (bodies.size() == 1) {
body = (Body) bodies.get(0);
msg.setContent(body.getContent(), body.getContentType());
}
msg.setSentDate(new java.util.Date());
Transport.send(msg);
}
public void sendAsynchronous() {
Thread t = new MailerThread();
t.setPriority(Thread.MIN_PRIORITY);
t.start();
}
public class MailerThread extends Thread {
public void run() {
try {
send();
} catch (Exception e) {
log.error("mail", e);
}
}
}
public class SmtpAuthenticator extends Authenticator {
protected PasswordAuthentication passwordAuthentication = null;
public SmtpAuthenticator(String username, String password) {
passwordAuthentication = new PasswordAuthentication(username, password);
}
protected PasswordAuthentication getPasswordAuthentication() {
return passwordAuthentication;
}
}
}