问题场景
利用Java发送邮件作为审核流程的通知方式。
CODE
package itext;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
/**
* Created on 2017/8/21
* Author: youxingyang.
*/
public class CommonUtil {
/**
* 获得指定类的静态变量值
* @param className
* @param field
* @return
* @throws ClassNotFoundException
*/
public static Object getConst(String className, String field) throws ClassNotFoundException{
Class<?> c = Class.forName(className);
try {
return c.getField(field).get(null);
} catch (Exception e) {
}
return null;
}
/**
* 封装的发送邮件方法,返回一个是否成功发送信息
* @param recipients 收件人姓名
* @param subject 主题
* @param content 内容
* @return
* @throws Exception
*/
public static String sendEmail(String recipients, String subject, String content) throws Exception {
String msg = "-1";
String port = "25";
//在此处配置作为发送方的邮件信息
String filename = "config.properties";
Properties props = new Properties();
InputStream in = new FileInputStream(filename);
props.load(in);
String host = props.getProperty("email.host");
String username = props.getProperty("email.username");
String password = props.getProperty("email.password");
if (!recipients.equals("")) {
Email email = new Email(recipients, subject, content);
email.setUsername(username);
email.setPassword(password);
email.setHost(host);
email.setPort(port);
EmailUtils.sendEmail(email);
msg = "success";
}
return msg;
}
public static void main(String[] args) throws Exception {
System.out.println(sendEmail("xxxxxxx@126.com", "test", "hello,world"));
}
}
package itext;
import java.io.FileInputStream;
import java.util.Properties;
/**
* Created on 2017/9/8
* Author: youxingyang.
*/
public class Email {
private String to;//收件人
private String subject;//主题
private String content;//内容
private String username;//发件人
private String password;//密码
private String port;//SMTP
private String host;
private String cc;
private String bcc;
private String[] files;
protected void init() {
String filename = "config.properties";
Properties props = new Properties();
try {
props.load(new FileInputStream(filename));
String username = props.get("email.username").toString();
String password = props.get("email.password").toString();
this.username = username;//Base64.decode(username);
this.password = password;//Base64.decode(password);
if(this.username.toLowerCase().contains("@qq.com") || this.username.toLowerCase().contains("@annoroad.com")){
this.host = "smtp.exmail.qq.com";
}else if(this.username.toLowerCase().contains("@163.com")){
this.host = "smtp.163.com";
}else if(this.username.toLowerCase().contains("@sina.com")){
this.host = "smtp.sina.com";
}else if(this.username.toLowerCase().contains("@139.com")){
this.host = "smtp.139.com";
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Email构造函数
* @param to 收件人
* @param subject 标题
* @param content 内容
* @param cc 抄送人
* @param bcc 密送人
* @param files 附件
*/
public Email(String to, String subject, String content, String cc,
String bcc, String[] files) {
this.to = to;
this.subject = subject;
this.content = content;
this.cc = cc;
this.bcc = bcc;
this.files = files;
init();
}
/**
* Email构造函数
* @param to 收件人
* @param subject 标题
* @param content 内容
* @param cc 抄送人
* @param files 附件
*/
public Email(String to, String subject, String content, String cc,
String[] files) {
this.to = to;
this.subject = subject;
this.content = content;
this.cc = cc;
this.files = files;
init();
}
/**
* Email构造函数
* @param to 收件人
* @param subject 标题
* @param content 内容
* @param files 附件
*/
public Email(String to, String subject, String content, String[] files) {
this.to = to;
this.subject = subject;
this.content = content;
this.files = files;
init();
}
/**
* Email构造函数
* @param to 收件人
* @param subject 标题
* @param content 内容
* @param cc 抄送人
* @param bcc 密送人
*/
public Email(String to, String subject, String content, String cc,
String bcc) {
this.to = to;
this.subject = subject;
this.content = content;
this.cc = cc;
this.bcc = bcc;
init();
}
/**
* Email构造函数
* @param to 收件人
* @param subject 标题
* @param content 内容
* @param cc 抄送人
*/
public Email(String to, String subject, String content, String cc) {
this.to = to;
this.subject = subject;
this.content = content;
this.cc = cc;
init();
}
/**
* Email构造函数
* @param to 收件人
* @param subject 标题
* @param content 内容
*/
public Email(String to, String subject, String content) {
this.to = to;
this.subject = subject;
this.content = content;
init();
}
public String[] getFiles() {
return files;
}
public void setFiles(String[] files) {
this.files = files;
}
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 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 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 getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package itext;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
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;
/**
* Created on 2017/9/8
* Author: youxingyang.
*/
public class EmailUtils {
public static void sendEmail(Email email) throws Exception {
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
message.setRecipients(Message.RecipientType.TO, email.getTo());
message.setFrom(new InternetAddress(email.getUsername()));
message.setSubject(email.getSubject());
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(email.getTo()));//接收人
if(email.getCc() != null && !email.getCc().equals(""))
message.setRecipients(Message.RecipientType.CC,InternetAddress.parse(email.getCc()));//抄送人
if(email.getBcc() != null && !email.getBcc().equals(""))
message.setRecipients(Message.RecipientType.BCC,InternetAddress.parse(email.getBcc()));//密送人
MimeMultipart mimeMuti = new MimeMultipart("mixed");
if(email.getFiles() != null && email.getFiles().length > 0){
for(String file : email.getFiles()){
MimeBodyPart bodyPartAttch = createAttachMent(file);//附件
mimeMuti.addBodyPart(bodyPartAttch);
}
}
MimeBodyPart bodyPartContentAndPic = createContentAndPic(email.getContent());//文本内容
mimeMuti.addBodyPart(bodyPartContentAndPic);
message.setContent(mimeMuti);
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(email.getHost(), email.getUsername(), email.getPassword());
transport.sendMessage(message, message.getAllRecipients());
}
//创建附件
protected static MimeBodyPart createAttachMent(String path) throws MessagingException {
MimeBodyPart mimeBodyPart = new MimeBodyPart();
FileDataSource dataSource = new FileDataSource(new File(path));
mimeBodyPart.setDataHandler(new DataHandler(dataSource));
mimeBodyPart.setFileName(dataSource.getName());
return mimeBodyPart;
}
//创建文本
protected static MimeBodyPart createContentAndPic(String content) throws MessagingException, UnsupportedEncodingException {
MimeMultipart mimeMutiPart = new MimeMultipart("related");
//文本
MimeBodyPart contentBodyPart = new MimeBodyPart();
//img的src要和setHeader中设置的值一样
contentBodyPart.setContent(content,"text/html;charset=gbk");
mimeMutiPart.addBodyPart(contentBodyPart);
//图片和文本结合
MimeBodyPart allBodyPart = new MimeBodyPart();
allBodyPart.setContent(mimeMutiPart);
return allBodyPart;
}
}