1、发送Email工具类
package com.iss.itreasury.test.htmlmail;
import javax.mail.internet.MimeMessage;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
/**
* -----------------------------------------
* @文件: Email.java
* @作者: fancy
* @邮箱: fancydeepin@yeah.net
* @时间: 2012-6-12
* @描述: 发送Email工具类
* -----------------------------------------
*/
public class Email {
private JavaMailSender javaMailSender;
private SimpleMailMessage simpleMailMessage;
/**
* @方法名: sendMail
* @参数名:@param subject 邮件主题
* @参数名:@param content 邮件主题内容
* @参数名:@param to 收件人Email地址
* @描述语: 发送邮件
*/
public void sendMail(String subject, String content, String to) {
try {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
/**
* new MimeMessageHelper(mimeMessage,true)之true个人见解:
* 关于true参数,官方文档是这样解释的:
* use the true flag to indicate you need a multipart message
* 翻译过来就是:使用true,以表明你需要多个消息
* 再去翻一下MimeMessageHelper的API,找到这样一句话:
* supporting alternative texts, inline elements and attachments
* 也就是说,如果要支持内联元素(HTML)和附件就必须给定第二个参数为true
* 否则抛出 java.lang.IllegalStateException 异常
*/
/**
* 刚开始收到邮件显示中文乱码,于是赶紧查看官方文档,没有提到,再查阅API,也没有查到Set编码的方法,
* 于是就在HTML里面自己指定编码,也不起作用,邮件还是显示中文乱码;
* 最后的结论是:如果HTML内容含有中文必须指定HTML的编码,默认是ISO-8859-1,所以会显示中文乱码
* 在MimeMessageHelper的构造方法中找到:
* MimeMessageHelper(MimeMessage mimeMessage, boolean multipart, String encoding)
* 实验一下,OK,原来编码是在这儿设置,没事了,中文正常显示
*/
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true,"UTF-8");
messageHelper.setFrom(simpleMailMessage.getFrom()); //设置发件人Email
messageHelper.setSubject(subject); //设置邮件主题
messageHelper.setText(content); //设置邮件主题内容
messageHelper.setTo(to); //设定收件人Email
//步骤 1
//资源的引用方法:cid:你自己设置的资源ID
messageHelper.setText(
"<html>" +
"<body>" +
"<BR>" +
"<div align='center'>" +
"<img src='cid:imageid'/>" +
"<BR>" +
"<h4>" +
"返回 fancydeepin 的Blogjava:" +
"<a href='http://www.blogjava.net/fancydeepin/'>http://www.blogjava.net/fancydeepin/</a>" +
"</h4>" +
"</div>" +
"</body>" +
"</html>", true);
/**
* ClassPathResource:很明显就是类路径资源,我这里的附件是在项目里的,所以需要用ClassPathResource
* 如果是系统文件资源就不能用ClassPathResource,而要用FileSystemResource,例:
* FileSystemResource file = new FileSystemResource(new File("D:/woniu.png"));
*/
/**
* 如果想在HTML中使用资源,必须在HTML中通过资源 ID 先引用资源,然后才来加载资源
*/
//步骤 2
ClassPathResource image = new ClassPathResource("images/body.png");
messageHelper.addInline("imageid", image);
javaMailSender.send(mimeMessage); //发送HTML邮件
} catch (Exception e) {System.out.println("异常信息:" + e);}
}
//Spring 依赖注入
public void setSimpleMailMessage(SimpleMailMessage simpleMailMessage) {
this.simpleMailMessage = simpleMailMessage;
}
//Spring 依赖注入
public void setJavaMailSender(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
}
package com.iss.itreasury.test.htmlmail;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class EmailTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("emailConfig.xml");
Email mail = (Email)context.getBean("simpleMail");
mail.sendMail("Spring SMTP Mail HTML Subject", "Spring SMTP HTML Text Content", "263996530@qq.com");
//mail.sendMail("标题", "内容", "收件人邮箱");
}
}
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<!-- 服务器 -->
<property name="host" value="smtp.****.com" />
<!-- 端口号 -->
<property name="port" value="25" />
<!-- 用户名 -->
<property name="username" value="*****"/>
<!-- 密码 -->
<property name="password" value="*****"/>
<!-- SMTP服务器验证 -->
<property name="javaMailProperties">
<props>
<!-- 验证身份 -->
<prop key="mail.smtp.auth">true</prop>
</props>
</property>
</bean>
<!--
目前我用过的EMAIL账号都是网易的,下面列出网易的SMTP服务器名和端口号:
网易邮箱 SMTP服务器 SMTP端口 POP3服务器 POP3端口
@126.com smtp.126.com 25 pop3.126.com 110
@163.com smtp.163.com 25 pop3.163.com 110
@yeah.net smtp.yeah.net 25 pop3.yeah.net 110
-->
<bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage">
<!-- 发件人email -->
<property name="from" value="*****@*****.com" />
<!--
收件人email
<property name="to" value="******@qq.com" />
email主题(标题)
<property name="subject" value="Subject" />
email主题内容
<property name="text">
<value>ContentText</value>
</property>
-->
</bean>
<bean id="simpleMail" class="com.iss.itreasury.syscore.utils.EmailUtilForHtml">
<property name="javaMailSender" ref="javaMailSender" />
<property name="simpleMailMessage" ref="simpleMailMessage" />
</bean>
</beans>