java web 發送郵件

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\">&nbsp;</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\">&nbsp;</td>";
			strhtml += "					<td width=\"98%\" align=\"left\" valign=\"middle\" class=\"font5\">尊敬的&nbsp;<font color=\"red\">";
			strhtml += toName;
			strhtml += "					</font>&nbsp;</td>";
			strhtml += "				</tr>";
			strhtml += "				<tr>";
			strhtml += "					<td width=\"2%\" height=\"40\">&nbsp;</td>";
			strhtml += "					<td width=\"98%\" align=\"left\" valign=\"middle\" class=\"font5\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
			strhtml += content;
			strhtml += "					</td>";
			strhtml += "				</tr>";
			strhtml += "				<tr>";
			strhtml += "					<td width=\"2%\" height=\"40\">&nbsp;</td>";
			strhtml += "					<td width=\"98%\" align=\"left\" valign=\"middle\" class=\"font5\">";
			strhtml += "					</td>";
			strhtml += "				</tr>";
			strhtml += "				<tr>";
			strhtml += "					<td width=\"2%\" height=\"40\">&nbsp;</td>";
			strhtml += "					<td width=\"98%\" align=\"right\" valign=\"right\" class=\"font5\">";
			strhtml += "						請勿回覆此郵件,如有疑問請聯繫我們&nbsp;<a target=\"_blank\" href=\"http://www.zzidc.com\">景安互聯網數據中心</a>";
			strhtml += "					</td>";
			strhtml += "				</tr>";
			strhtml += "			</table></td>";
			strhtml += "		</tr>";
			strhtml += "  		<tr>";
			strhtml += "			<td height=\"20\">&nbsp;</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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章