package com.wang.base.email;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Date;
import java.util.Properties;
import java.util.UUID;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message.RecipientType;
import javax.mail.BodyPart;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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 javax.mail.internet.MimeUtility;
/**
* <p>
* Title: Jmail
* </p>
* <p>
* Description: JavaMail send email
* </p>
* <p>
* Copyright: Copyright (c) 2011
* </p>
* <p>
* Company: Professional Service, Inc
* </p>
*
* @author Jason Yang
* @version 1.0
*/
public class SendMail {
/**
* 簡單郵件傳輸協議
*/
private String smtp;
/**
* STMP是否需要認證
*/
private boolean authRequired;
/**
* STMP認證用戶名
*/
private String user;
/**
* STMP認證密碼
*/
private String password;
/**
* 收件人地址 多個地址以英文逗號(,)分割
*/
private String to;
/**
* 發件人地址
*/
private String from;
/**
* 抄送人地址 多個地址以英文逗號(,)分割
*/
private String cc;
/**
* 暗送人地址 多個地址以英文逗號(,)分割
*/
private String bcc;
/**
* 主題
*/
private String subject;
/**
* 發送的郵件是文本內容
*/
private String bodyText;
/**
* 發送郵件是HTML內容
*/
private String bodyHtml;
/**
* 發送郵件內容是普通的String
*/
private String bodyString;
/**
* 發送郵件內容是HTML的String
*/
private String htmlString;
/**
* 附件數量
*/
private int attachedNum = -1;
/**
* 是否插入數據
*/
private boolean insertData = false;
/**
* SQL的結果集
*/
private java.sql.ResultSet jRS;
/**
* 附件文件名
*/
private String[] fileName = { "", "" };
public SendMail() {
}
private Multipart multipart;
/**
* 初始化操作(構造方法)
*
* @param smtp
* STMP協議
* @param authRequired
* 是否進行STMP認證
* @param user
* STMP認證用戶名
* @param password
* STMP認證密碼
*/
public SendMail(String smtp, boolean authRequired, String user, String password) {
this.smtp = smtp;
this.authRequired = authRequired;
this.user = user;
this.password = password;
}
// 發送郵件方法
public boolean beginSendMail() {
Properties props = new Properties();
Session mailSession; // mail session object
MimeMessage mimeMsg; // MIME mail object
props.put("mail.smtp.host", smtp);
if (authRequired) {
props.put("mail.smtp.auth", "true"); // SMTP authentication
}
//設置自定義發件人暱稱
String nick="";
try {
nick=javax.mail.internet.MimeUtility.encodeText("學習中心");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
mailSession = Session.getDefaultInstance(props, null);
try {
mimeMsg = new MimeMessage(mailSession);
// 設置發件人地址
if (!"".equals(from) && from != null) {
mimeMsg.setFrom(new InternetAddress(from, nick));
}
// 設置單個收件人地址
if (!"".equals(to) && to != null) {
mimeMsg.setRecipients(RecipientType.TO, InternetAddress.parse(to));
}
// 設置抄送人地址
if (!"".equals(cc) && cc != null) {
mimeMsg.setRecipients(RecipientType.CC, InternetAddress.parse(cc));
}
// 設置暗送人地址
if (!"".equals(bcc) && bcc != null) {
mimeMsg.setRecipients(RecipientType.BCC, InternetAddress.parse(bcc));
}
// 設置郵件標題
if (!"".equals(subject) && subject != null) {
mimeMsg.setSubject(subject);
}
mimeMsg.setSentDate(new Date(System.currentTimeMillis()));
MimeMultipart mp = new MimeMultipart();
// 郵件內容是普通的文本內容
if (!"".equals(bodyText) && bodyText != null) {
MimeBodyPart mbpText = new MimeBodyPart();
if (!insertData) {
mbpText.setContent(new javax.activation.DataHandler(new javax.activation.FileDataSource(bodyText)).getContent(),
"text/plain");
} else {
Object jObj = new javax.activation.DataHandler(new javax.activation.FileDataSource(bodyText)).getContent();
String jStr = (String) jObj;
jStr = replaceField(jStr);
mbpText.setContent(jStr, "text/plain");
}
mp.addBodyPart(mbpText);
}
// 郵件內容是HTML內容一個文件bodyHtml是文件名
if (!"".equals(bodyHtml) && bodyHtml != null) {
MimeBodyPart mbpHtml = new MimeBodyPart();
if (!insertData) {
mbpHtml.setContent(new javax.activation.DataHandler(new javax.activation.FileDataSource(bodyHtml)).getContent(),
"text/html;charset=utf8");
} else {
Object jObj = new javax.activation.DataHandler(new javax.activation.FileDataSource(bodyHtml)).getContent();
String jStr = (String) jObj;
jStr = replaceField(jStr);
mbpHtml.setContent(jStr, "text/html;charset=utf8");
}
mp.addBodyPart(mbpHtml);
}
// 郵件內容是字符串型
if (!"".equals(bodyString) && bodyString != null) {
MimeBodyPart mbpString = new MimeBodyPart();
mbpString.setContent(bodyString, "text/plain;charset=utf8");
mp.addBodyPart(mbpString);
}
// 郵件內容是普通的HTML的String
if (htmlString != null) {
MimeBodyPart mbpString = new MimeBodyPart();
mbpString.setContent(htmlString, "text/html;charset=UTF-8");
mp.addBodyPart(mbpString);
MimeBodyPart gifBodyPart = new MimeBodyPart();
String f = "";
try{
f = URLDecoder.decode((new File(this.getClass().getResource("").getPath())).toString(),"utf-8");
f = f.substring(0,f.lastIndexOf("WEB-INF"))+"images"+File.separator+"logo.png";
}catch(Exception e){}
FileDataSource fds = new FileDataSource(f);
// FileDataSource fds = new FileDataSource(URLDecoder.decode("D:\\Workspaces\\MyEclipse%208.5\\.metadata\\.me_tcat\\webapps\\YunJK_idc\\images\\logo.png", "utf-8"));
gifBodyPart.setDataHandler(new DataHandler(fds));
gifBodyPart.setContentID("logo1.png");
mp.addBodyPart(gifBodyPart);
}
// 附件
int i = attachedNum - 1;
while (i >= 0) {
MimeBodyPart mbpAttached = new MimeBodyPart();
javax.activation.FileDataSource fds = new javax.activation.FileDataSource(fileName[i]);
mbpAttached.setFileName(fds.getName());
mbpAttached.setDataHandler(new javax.activation.DataHandler(fds));
//sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
//mbpAttached.setFileName( "=?GBK?B?" + enc.encode( fds.getName().getBytes() ) + "?=" );
mbpAttached.setFileName(MimeUtility.encodeText(fds.getName()));
mp.addBodyPart(mbpAttached);
i--;
}
// add the Multipart to the message
mimeMsg.setContent(mp);
Transport transport = mailSession.getTransport("smtp");
transport.connect(smtp, user, password);
// send the message
transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
transport.close();
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
return true;
}
// replace fields with data in the original data source
/**
* 替換文件
*/
public String replaceField(String strOriginal) {
String fieldName, fieldValue;
int leftBracket, rightBracket;
try {
// Get the position of the first field
leftBracket = strOriginal.indexOf("[", 0);
// Run through the text
while (leftBracket != -1) {
// Get the right field marker
rightBracket = strOriginal.indexOf("]", leftBracket);
// Extract the field name from between [ and ]
fieldName = strOriginal.substring(leftBracket + 1, rightBracket);
// Get field value for the current data source record
fieldValue = jRS.getString(fieldName);
// Replace the entire field code with the value
strOriginal = strOriginal.substring(0, leftBracket) + fieldValue
+ strOriginal.substring(rightBracket + 1, strOriginal.length());
// Get the postion of the next field
leftBracket = strOriginal.indexOf("[", 0);
}
return strOriginal;
} catch (java.sql.SQLException se) {
}
return null;
}
/**
* 簡單郵件傳輸協議
*/
public String getSmtp() {
return smtp;
}
/**
* 簡單郵件傳輸協議
*/
public void setSmtp(String smtp) {
this.smtp = smtp;
}
/**
* STMP是否需要認證
*/
public boolean isAuthRequired() {
return authRequired;
}
/**
* STMP是否需要認證
*/
public void setAuthRequired(boolean authRequired) {
this.authRequired = authRequired;
}
/**
* STMP認證用戶名
*/
public String getUser() {
return user;
}
/**
* STMP認證用戶名
*/
public void setUser(String user) {
this.user = user;
}
/**
* STMP認證密碼
*/
public String getPassword() {
return password;
}
/**
* STMP認證密碼
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 收件人地址 多個地址以英文逗號(,)分割
*/
public String getTo() {
return to;
}
/**
* 收件人地址 多個地址以英文逗號(,)分割
*/
public void setTo(String to) {
this.to = to;
}
/**
* 發件人地址
*/
public String getFrom() {
return from;
}
/**
* 發件人地址
*/
public void setFrom(String from) {
this.from = from;
}
/**
* 抄送人地址 多個地址以英文逗號(,)分割
*/
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;
}
/**
* 發送的郵件是文本內容的一個文件,bodyText是文件名
*/
public String getBodyText() {
return bodyText;
}
/**
* 發送的郵件是文本內容的一個文件,bodyText是文件名
*/
public void setBodyText(String bodyText) {
this.bodyText = bodyText;
}
/**
* 發送郵件是HTML內容的一個文件,bodyHtml是文件的名字
*/
public String getBodyHtml() {
return bodyHtml;
}
/**
* 發送郵件是HTML內容的一個文件,bodyHtml是文件的名字
*/
public void setBodyHtml(String bodyHtml) {
this.bodyHtml = bodyHtml;
}
/**
* 發送郵件內容是普通的String
*/
public String getBodyString() {
return bodyString;
}
/**
* 發送郵件內容是普通的String
*/
public void setBodyString(String bodyString) {
this.bodyString = bodyString;
}
/**
* 發送郵件內容是HTML的String(會解析)
*/
public String getHtmlString() {
return htmlString;
}
/**
* 發送郵件內容是HTML的String(會解析)
*/
public void setHtmlString(String htmlString) {
this.htmlString = htmlString;
}
/**
* 附件數量
*/
public int getAttachedNum() {
return attachedNum;
}
/**
* 附件數量
*/
public void setAttachedNum(int attachedNum) {
this.attachedNum = attachedNum;
}
/**
* 是否插入數據
*/
public boolean isInsertData() {
return insertData;
}
/**
* 是否插入數據
*/
public void setInsertData(boolean insertData) {
this.insertData = insertData;
}
/**
* SQL的結果集
*/
public java.sql.ResultSet getJRS() {
return jRS;
}
/**
* SQL的結果集
*/
public void setJRS(java.sql.ResultSet jrs) {
jRS = jrs;
}
/**
* 附件文件名
*/
public String[] getFileName() {
return fileName;
}
/**
* 附件文件名
*/
public void setFileName(String[] fileName) {
this.fileName = fileName;
}
public Multipart getMultipart() {
return multipart;
}
public void setMultipart(Multipart multipart) {
this.multipart = multipart;
}
// 發送郵箱的html內容
/**
* @desciption 發送郵箱的html內容
* @param userid
* 用戶的唯一標識
* @param password
* 用戶的密碼
* @return String 若用戶的唯一標識存在,返回發送郵件的內容(html形式); 若用戶的唯一標識不存在,返回一個空串。
*/
public String getHtml(String content) {
if (content != null) {
String strhtml = "<html xmlns=\"http://www.w3.org/1999/xhtml>";
strhtml += "<head>";
strhtml += " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
strhtml += " <link href=\"../css/cnstyle.css\" rel=\"stylesheet\" type=\"text/css\" />";
strhtml += "</head>";
strhtml += "<body bgcolor=\"FFFFFF\">";
strhtml += " <table width=\"99%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
strhtml += " <tr>";
strhtml += " <td width=\"2%\" height=\"80\"> </td>";
strhtml += " <td width=\"98%\" align=\"left\" valign=\"middle\" class=\"font5\">";
strhtml += content;
strhtml += " </td>";
strhtml += " </tr>";
strhtml += " </table>";
strhtml += "</body>";
strhtml += "</html>";
return strhtml;
}
return "";
}
/**
* @desciption 發送郵箱的html內容
* @param userid
* 用戶的唯一標識
* @param password
* 用戶的密碼
* @return String 若用戶的唯一標識存在,返回發送郵件的內容(html形式); 若用戶的唯一標識不存在,返回一個空串。
*/
public String getHtml(String toName, String content) {
if (content != null) {
String strhtml = "";
strhtml += "<html xmlns=\"http://www.w3.org/1999/xhtml>";
strhtml += " <head>";
strhtml += " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
strhtml += " </head>";
strhtml += " <body bgcolor=\"FFFFFF\">";
strhtml += " <table width=\"600\" border=\"0\" align=\"left\" cellpadding=\"0\" cellspacing=\"0\">";
strhtml += " <tr>";
strhtml += " <td align=\"left\"><i><strong style=\"color: #75A7D8; font-family: Georgia; font-size: 46px;\">GAINET</strong><a style=\"underline:none\" target=\"_blank\" href=\"http://www.zzidc.com\"><strong style=\"color: #0000FF; font-family: Georgia; font-size: 20px;\">景安網絡</strong></a></i></td>";
strhtml += " </tr>";
strhtml += " <tr>";
strhtml += " <td align=\"left\"></td>";
strhtml += " </tr>";
strhtml += " <tr>";
strhtml += " <td height=\"3\" bgcolor=\"75A7D8\"></td>";
strhtml += " </tr>";
strhtml += " <tr>";
strhtml += " <td height=\"10\" bgcolor=\"#E6F0FA\" ></td>";
strhtml += " </tr>";
strhtml += " <tr>";
strhtml += " <td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
strhtml += " <tr>";
strhtml += " <td width=\"2%\" height=\"40\"> </td>";
strhtml += " <td width=\"98%\" align=\"left\" valign=\"middle\" class=\"font5\">尊敬的 <font color=\"red\">";
strhtml += toName;
strhtml += " </font> </td>";
strhtml += " </tr>";
strhtml += " <tr>";
strhtml += " <td width=\"2%\" height=\"40\"> </td>";
strhtml += " <td width=\"98%\" align=\"left\" valign=\"middle\" class=\"font5\"> ";
strhtml += content;
strhtml += " </td>";
strhtml += " </tr>";
strhtml += " <tr>";
strhtml += " <td width=\"2%\" height=\"40\"> </td>";
strhtml += " <td width=\"98%\" align=\"left\" valign=\"middle\" class=\"font5\">";
strhtml += " </td>";
strhtml += " </tr>";
strhtml += " <tr>";
strhtml += " <td width=\"2%\" height=\"40\"> </td>";
strhtml += " <td width=\"98%\" align=\"right\" valign=\"right\" class=\"font5\">";
strhtml += " 請勿回覆此郵件,如有疑問請聯繫我們 <a target=\"_blank\" href=\"http://www.zzidc.com\">景安互聯網數據中心</a>";
strhtml += " </td>";
strhtml += " </tr>";
strhtml += " </table></td>";
strhtml += " </tr>";
strhtml += " <tr>";
strhtml += " <td height=\"20\"> </td>";
strhtml += " </tr>";
strhtml += " </table>";
strhtml += " </body>";
strhtml += "</html>";
return strhtml;
}
return "";
}
public void addImage(File image){
try {
String header = UUID.randomUUID().toString();
String img = "<img src=\"cid:" + header + "\">";
addHtml(img);
addAttach(image, header);
} catch (Exception e) {
e.printStackTrace();
}
}
public void addAttach(File attach, String header) {
try {
BodyPart bodyPart = new MimeBodyPart();
DataSource dataSource = new FileDataSource(attach);
bodyPart.setDataHandler(new DataHandler(dataSource));
bodyPart.setFileName(attach.getName());
if(header != null){
bodyPart.setHeader("Content-ID", "<" + header + ">");
}
multipart.addBodyPart(bodyPart);
} catch (MessagingException e) {
e.printStackTrace();
}
}
/**
* 在郵件中添加 html 代碼
* @param html String
*/
public void addHtml(String html) {
try {
BodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent(html, "text/html;charset=utf8");
multipart.addBodyPart(bodyPart);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
jar包下載地址https://download.csdn.net/download/nanyanglu/10667213