- 首先要保证用户名密码正确,且邮箱支持smtp服务,特别注意的是QQ邮箱第三方登录需要用授权码来作为密码而不是QQ密码,授权码在邮箱设置>账户中可以获得
- smtp服务端口号需要以SLL加密端口号465 链接邮箱,在spring-mail配置文件中需要如下配置
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- 配置javamailsend --> <bean id="javamailsend" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${mail.host}"></property> <property name="port" value="${mail.port}"></property> <property name="username" value="${mail.username}"></property> <property name="password" value="${mail.password}"></property> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <!-- 要采用加密方式连接,所以需要加下面这行配置 --> <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> <prop key="mail.smtp.timeout">25000</prop> </props> </property> </bean>
<!-- 配置freemark --> <bean id="freemarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="WEB-INF/template/"></property> <property name="freemarkerSettings"><!-- 设置FreeMarker环境属性--> <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="mailtemplate" class="com.fcq.util.MailTemplate"> <property name="freemarker" ref="freemarker"></property> <property name="javamailsend" ref="javamailsend"></property> </bean> </beans>package com.fcq.util;
import java.io.File;
import java.io.IOException;
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 org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class MailTemplate {
private JavaMailSender javamailsend;
private FreeMarkerConfigurer freemarker;
public JavaMailSender getJavamailsend() {
return javamailsend;
}
public void setJavamailsend(JavaMailSender javamailsend) {
this.javamailsend = javamailsend;
}
public FreeMarkerConfigurer getFreemarker() {
return freemarker;
}
public void setFreemarker(FreeMarkerConfigurer freemarker) {
this.freemarker = freemarker;
}
//将freemarker模板转换成 String类型的邮件模板
public String getMailTemplate(String name){
String mailtemplate = "";
Date date = new Date();
SimpleDateFormat sFormat = new SimpleDateFormat("yyyy-MM-dd");
String time = sFormat.format(date);
Map<String,String> map = new HashMap<String,String>();
try {
Template template = freemarker.getConfiguration().getTemplate("mailTemplate.ftl");
map.put("username",name);
map.put("currenttime",time);
mailtemplate = FreeMarkerTemplateUtils.processTemplateIntoString(template,map);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TemplateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mailtemplate;
}
public boolean sendMail(String mail){
Boolean sendFlag = false;
try {
MimeMessage message = javamailsend.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
helper.setSubject("模板邮件");
helper.setFrom("709032083@qq.com");
helper.setTo(mail);
// true 表示启动HTML格式的邮件
helper.setText(getMailTemplate(mail),true);
//添加插件图片
FileSystemResource fileSystemResource = new FileSystemResource(new File("F:/apple.png"));
/*addAttachment addInline 两种附件添加方式
*addAttachment 是以附件的方式发送
*addline是以页面内置元素发送
*/
//以附件的形式添加到邮件
// 使用MimeUtility.encodeWord 解决附件名中文乱码的问题
// helper.addAttachment(MimeUtility.decodeText("apple.png"), fileSystemResource);
helper.addInline("apple",fileSystemResource);
javamailsend.send(message);
sendFlag = true;
} catch (MailException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// catch (UnsupportedEncodingException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
return sendFlag;
}
}
参考资料:http://blog.csdn.net/greensurfer/article/details/7557115参考博客:http://blog.csdn.net/greensurfer/article/details/7557115