spring使用模板發送郵件及附件筆記

需要引用的jar包:

mail-1.4.1.jar

activation-1.1.jar

spring-context-support-2.5.jar

spring-webmvc.jar


前臺頁面

forgetPassword.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>忘記密碼</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    

  </head>
  
  <body>
  	<h2>忘記密碼處理</h2>
    <form action="forgetPassword" name="form1" method="post">
    	您的註冊郵箱:<input type="text" name="user.userId" value=""/>
    	<input type="submit" value=" 提交  ">
    </form>
  </body>
</html>



MailAction.java:

package com.gifer.action;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;

import com.gifer.model.LoginUser;
import com.opensymphony.xwork2.ActionSupport;

import freemarker.template.Template;
import freemarker.template.TemplateException;

public class MailAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 4962937405531604950L;

	private static final Logger log = LoggerFactory.getLogger(MailAction.class);

	private JavaMailSenderImpl mailSender;
	private SimpleMailMessage mailMessage;
	private FreeMarkerConfigurer freeMarkerConfigurer;

	private LoginUser user;

	public void setMailSender(JavaMailSenderImpl mailSender) {
		this.mailSender = mailSender;
	}

	public void setMailMessage(SimpleMailMessage mailMessage) {
		this.mailMessage = mailMessage;
	}

	public void setUser(LoginUser user) {
		this.user = user;
	}

	public void setFreeMarkerConfigurer(
			FreeMarkerConfigurer freeMarkerConfigurer) {
		this.freeMarkerConfigurer = freeMarkerConfigurer;
	}

	@Override
	public String execute() throws Exception {
		// String content = "hello," + user.getUserId()
		// + ",您的臨時密碼是:123456,請及時登錄修改。";

		// 發送簡單郵件
		// this.sendSimpleMail(content);

		// 發送html郵件
		// this.sendHtmlMail(content);

		this.sendTemplateMail();

		return SUCCESS;
	}

	// 發送簡單文本內容郵件
	private void sendSimpleMail(String content) {
		this.mailMessage.setTo(user.getUserId());// 郵件接收者
		this.mailMessage.setText(content);// 郵件內容
		this.mailSender.send(mailMessage);// 發送
	}

	// 發送HTML內容郵件
	private void sendHtmlMail(String content) {
		MimeMessage mailMsg = this.mailSender.createMimeMessage();
		MimeMessageHelper messageHelper = new MimeMessageHelper(mailMsg);

		String html = "<html><head></head><body><h1>Hello</h1>" + content
				+ "</body></html>";

		try {
			messageHelper.setTo(user.getUserId());
			messageHelper.setText(html, true);// true 表示啓動HTML格式的郵件
		} catch (MessagingException e) {
			log.error(e.getMessage(), e);
		}

		this.mailSender.send(mailMessage);// 發送
	}

	// 發送郵件內容採用模板
	public void sendTemplateMail() {

		try {
			MimeMessage mailMsg = this.mailSender.createMimeMessage();

			MimeMessageHelper messageHelper = new MimeMessageHelper(mailMsg,
					true, "UTF-8");
			messageHelper.setTo(user.getUserId());// 接收郵箱
			messageHelper.setFrom(this.mailMessage.getFrom());// 發送郵箱
			messageHelper.setSentDate(new Date());// 發送時間
			messageHelper.setSubject(this.mailMessage.getSubject());// 郵件標題

			// true 表示啓動HTML格式的郵件
			messageHelper.setText(this.getMailText(), true);// 郵件內容

			// 添加郵件附件
			FileSystemResource rarfile = new FileSystemResource(new File(
					"E:\\UploadFileDemo\\mail圖片測試.png"));

			// addAttachment addInline 兩種附件添加方式
			// 以附件的形式添加到郵件
			// 使用MimeUtility.encodeWord 解決附件名中文亂碼的問題
			messageHelper.addAttachment(MimeUtility.encodeWord("mail圖片測試.png"),
					rarfile);

			// <img src='cid:file'/> 此處將文件內容嵌入郵件頁面中
			// 這裏的'cid:file'與addInline('file',rarfile)中的file對應
			messageHelper.addInline("file", rarfile);

			this.mailSender.send(mailMsg);// 發送

		} catch (MessagingException e) {
			log.error(e.getMessage(), e);
		} catch (UnsupportedEncodingException e) {
			log.error(e.getMessage(), e);
		}

	}

	/**
	 * 獲取模板並將內容輸出到模板
	 * 
	 * @param content
	 * @return
	 */
	private String getMailText() {
		String html = "";

		try {

			Map map = new HashMap();
			map.put("userName", "greensurfer");
			map.put("userId", user.getUserId());
			map.put("password", "123456");
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");

			map.put("sendTime", sdf.format(new Date()));
			// 裝載模板
			Template tpl = this.freeMarkerConfigurer.getConfiguration()
					.getTemplate("forgetPassword.ftl");
			// 加入map到模板中 輸出對應變量
			html = FreeMarkerTemplateUtils.processTemplateIntoString(tpl, map);

		} catch (IOException e) {
			e.printStackTrace();
		} catch (TemplateException e) {
			e.printStackTrace();
		}
		return html;
	}
}


applicationContext.xml部分:

<!-- 郵件發送方配置bean -->
	<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
		<property name="host" value="smtp.163.com" />
		<!-- mail account -->
		<property name="username" value="gifer" />
		<property name="password" value="123456" />
		<property name="javaMailProperties">
			<props>
				<prop key="mail.smtp.auth">true</prop>
			</props>
		</property>
	</bean>
	<!-- 郵件發送模板 -->
	<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
		<property name="from" value="[email protected]" />
		<property name="subject" value="帳戶密碼忘記郵件" />
	</bean>
	<!-- 配置發送模板bean-->
	<bean id="freeMarkerConfigurer"
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="templateLoaderPaths" value="classpath:mailTemplate" /><!-- 模板路徑位置 -->
		<property name="freemarkerSettings">
			<props>
				<prop key="template_update_delay">1800</prop><!-- 模板更新延時 -->
				<prop key="default_encoding">UTF-8</prop>
				<prop key="locale">zh_CN</prop>
			</props>
		</property>
	</bean>
	<bean id="mailAction" class="com.gifer.action.MailAction"
		abstract="false" scope="prototype" lazy-init="default" autowire="default"
		dependency-check="default">
		<property name="mailSender">
			<ref bean="mailSender" />
		</property>
		<property name="mailMessage">
			<ref bean="mailMessage" />
		</property>
		<property name="freeMarkerConfigurer">
			<ref bean="freeMarkerConfigurer"/>
		</property>
	</bean>



struts.xml

<action name="forgetPassword" class="mailAction">
			<result name="success">jsp/mailSuccess.jsp</result>
			<result name="input">jsp/forgetPassword.jsp</result>
		</action>




模板文件

forgetPassword.ftl:

<!DOCTYPE head PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<style type="text/css">
body {
	font-size: 14px;
	line-height: 1.5
}
</style>
</head>
<body>
	<table cellspacing="0" cellpadding="20">
		<tr>
			<td>
				<table width="500" cellspacing="0" cellpadding="1">
					<tr>
						<td bgcolor="#FF8E00" align="left"
							style="font-family:'lucida grande',tahoma,'bitstream vera sans',helvetica,sans-serif;line-height:150%;color:#FFF;font-size:24px;font-weight:bold;padding:4px"> 
							GIFER社區
						<th></th>
					</tr>
					<tr>
						<td bgcolor="#FF8E00">
							<table width="100%" cellspacing="0" bgcolor="#FFFFFF"
								cellpadding="20">
								<tr>
									<td
										style="font-family:'lucida grande',tahoma,'bitstream vera sans',helvetica,sans-serif;line-height:150%;color:#000;font-size:14px;">
										親愛的${userName}:
										<blockquote>
											<br> <strong>您在gifer.com的帳戶${userId}密碼忘記了?該郵件爲你提供臨時密碼:${password},請及時登錄,修改您的密碼。</strong><br>
											<br>如果下面鏈接不可用,請複製下面的鏈接到瀏覽器進行訪問,以便修改你的帳戶密碼。<br>帳戶密碼修改鏈接:<br>
											<a href="http://localhost:10002/UserManager/" target="_blank">http://localhost:10002/UserManager/</a><br>
											<br>
										</blockquote> <br> <br>GIFER 社區<br> <a
										href="http://localhost:10002/UserManager/" target="_blank">http://localhost:10002/UserManager/</a>
										<br>發送時間:${sendTime}<br> <br>此郵件爲系統自動發出,請勿回覆。</td>
										
								</tr>
							</table></td>
					</tr>
				</table></td>
		</tr>
	</table>
	<img src='cid:file'/>
</body>
</html>




發送郵件效果圖:






發佈了53 篇原創文章 · 獲贊 2 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章