package cn.cgw.util.mail;
import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;
public class Mail {
private MimeMessage mimeMsg;
private Session session;
private Properties props;
private boolean needAuth = false;
private String username, password;
private Multipart mp;
public Mail(String smtp) { setSmtpHost(smtp); createMimeMessage(); }
public void setSmtpHost(String host) {
if (props == null) props = System.getProperties();
props.put("mail.smtp.host", host);
}
public boolean createMimeMessage() {
try {
session = Session.getDefaultInstance(props, null);
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart();
return true;
} catch (Exception e) { return false; }
}
public void setNeedAuth(boolean need) {
if (props == null) props = System.getProperties();
props.put("mail.smtp.auth", need ? "true" : "false");
}
public void setNamePass(String user, String pwd) { username = user; password = pwd; }
public boolean setSubject(String sub) {
try { mimeMsg.setSubject(sub); return true; } catch (Exception e) { return false; }
}
public boolean setBody(String body) {
try {
BodyPart bp = new MimeBodyPart();
bp.setContent(body, "text/html;charset=GBK");
mp.addBodyPart(bp);
return true;
} catch (Exception e) { return false; }
}
public boolean addFileAffix(String filename) {
try {
BodyPart bp = new MimeBodyPart();
FileDataSource fds = new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fds));
bp.setFileName(fds.getName());
mp.addBodyPart(bp);
return true;
} catch (Exception e) { return false; }
}
public boolean setFrom(String from) {
try { mimeMsg.setFrom(new InternetAddress(from)); return true; } catch (Exception e) { return false; }
}
public boolean setTo(String to) {
try { mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); return true; } catch (Exception e) { return false; }
}
public boolean setCc(String cc) {
try { mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc)); return true; } catch (Exception e) { return false; }
}
public boolean sendout() {
try {
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(username, password);
transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
transport.close();
return true;
} catch (Exception e) { return false; }
}
// 靜態便捷方法
public static boolean send(String smtp, String from, String to, String subject, String body, String user, String pwd) {
Mail mail = new Mail(smtp);
mail.setNeedAuth(true);
mail.setNamePass(user, pwd);
return mail.setFrom(from) && mail.setTo(to) && mail.setSubject(subject) && mail.setBody(body) && mail.sendout();
}
public static boolean sendAndCc(String smtp, String from, String to, String cc, String subject, String body, String user, String pwd, String attach) {
Mail mail = new Mail(smtp);
mail.setNeedAuth(true);
mail.setNamePass(user, pwd);
boolean ok = mail.setFrom(from) && mail.setTo(to) && mail.setCc(cc) && mail.setSubject(subject) && mail.setBody(body);
if (attach != null) ok &= mail.addFileAffix(attach);
return ok && mail.sendout();
}
}
public static void main(String[] args) {
String smtp = "smtp.example.com";
String from = "me@example.com";
String to = "you@example.com";
String cc = "cc@example.com";
String subject = "Test";
String body = "Hello
";
String user = "user";
String pwd = "pass";
String attach = "F:/notes/struts2與mvc.txt";
Mail.sendAndCc(smtp, from, to, cc, subject, body, user, pwd, attach);
}
封裝良好、功能完整的 JavaMail 工具類,可直接整合至專案發送 HTML 郵件、附件與抄送。
出處:bianceng.cn