本章通过Spring Mail实现了简单邮件、附件和HTML邮件的发送,涉及的主要知识点:
1. Spring mail实现:JavaMailSenderImpl
2. 简单消息:SimpleMailMessage
3. 扩展:MimeMessage
4. MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型
4. 自定义邮件模板:MailTemplate
0.开启SMTP服务和获取授权码
通过某个邮箱进行第三方邮件发送时,需要登陆此邮箱开启SMTP服务并获取授权码。
本例以163作为发送端邮件
1. 开启SMTP的步骤是:登陆邮箱–>设置–>POP3/SMTP/IMAP–>开启
2. 获取授权码的步骤是:登陆邮箱–>设置–>客户端授权密码–>开启(开启授权码有风险,记得开发完成后关闭此功能)
3. 关于授权码
的说明:通过Java发送邮件是,需要setPassword,这里的Password就是所谓的授权码
,而非邮箱的登陆密码。
4. 163邮箱的SMTP服务器: smtp.163.com,端口号是25。
5. 关于邮箱的服务器和端口号,可以参考常用的邮箱服务器(SMTP、POP3)地址、端口
1.目录结构
project
\---src
\---main
\---java
| \---pers
| \---hanchao
| \---mail
| \---App.java
| \---MailUtils.java
| \---MailTemplate.java
\---resources
\---spring-config
\---spring-mail.xml
\---spring-mail.properties
2.App.java
package pers.hanchao.mail;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.mail.MessagingException;
/**
* <p>简单对Spring mail的应用:简单消息邮件、附件邮件以及html邮件</p>
* @author hanchao 2018/1/13 11:36
**/
public class App {
public static void main(String[] args) throws MessagingException {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config/spring-mail.xml");
MailUtils mailUtils = (MailUtils) context.getBean("mailUtils");
mailUtils.sendSimpleMail("******@163.com","******@163.com",
"简单邮件测试","这是一个简单邮件发送示例:Hello World");
String attachPath = "C:\\Users\\hanchao\\Pictures\\Saved Pictures\\红狼.jpg";
mailUtils.sendMimeMail("******@163.com","******@163.com",
"HTML邮件测试","这是一个HTML邮件发送示例:Hello World",MailTemplate.TEMPLATE_TEST,attachPath);
}
}
3.MailUtils.java
package pers.hanchao.mail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* <p>简单的邮件工具类,实现了简单邮件、附件和html邮件的发送</p>
* @author hanchao 2018/1/13 11:48
**/
@Component
public class MailUtils {
@Autowired
private JavaMailSenderImpl javaMailSender;
/**
* <p>通过JavaMailSenderImpl.send(SimpleMailMessage)发送简单消息</p>
* @author hanchao 2018/1/13 9:56
**/
public void sendSimpleMail(String from,String to,String subject,String message){
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom(from);
simpleMailMessage.setTo(to);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(message);
//发送邮件
javaMailSender.send(simpleMailMessage);
}
/**
* <p>通过JavaMailSenderImpl.send(MimeMessage)以及MimeMessageHelper发送HTML内容和附件</p>
* @author hanchao 2018/1/13 11:37
**/
public void sendMimeMail(String from,String to,String subject,String message,int template,String attachPath) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//通过MimeMessageHelper进行邮件内容的设置
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setFrom(from);
mimeMessageHelper.setTo(to);
mimeMessageHelper.setSubject(subject);
//发送html内容
mimeMessageHelper.setText(MailTemplate.getText(MailTemplate.TEMPLATE_TEST,message),true);
//发送附件
File testAttach = new File(attachPath);
if (testAttach.exists()){
mimeMessageHelper.addAttachment("test.jpg",testAttach);
}
//发送邮件
javaMailSender.send(mimeMessage);
}
}
4.MailTemplate.java
package pers.hanchao.mail;
/**
* <p>邮件模板示例</p>
* @author hanchao 2018/1/13 11:36
**/
public class MailTemplate {
public static final int TEMPLATE_TEST = 1;
public static String getText(int templateType,String message){
switch (templateType){
case 1:
return "<html>\n" +
"<body style=\"background-color:PowderBlue;\">\n" +
"<p style=\"font-family:times;color:green;font-size:30px\">\n" +
message + "</p>\n" +
"</body>\n" +
"</html>";
default:
return message;
}
}
}
5.spring-mail.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解-->
<context:annotation-config/>
<!--开启component扫描-->
<context:component-scan base-package="pers.hanchao.*"/>
<!--通过spring-mail.properties配置属性-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="fileEncoding" value="UTF-8"/>
<property name="location" value="spring-mail.properties"/>
</bean>
<!--spring实现的JavaMail-->
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${mail.host}"/>
<property name="port" value="${mail.port}"/>
<property name="defaultEncoding" value="${mail.encode}"/>
<property name="username" value="${mail.username}"/>
<property name="password" value="${mail.password}"/>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
<prop key="mail.smtp.timeout">20000</prop>
</props>
</property>
</bean>
</beans>
6.spring-mail.properties
mail.host=smtp.163.com
mail.port=25
mail.encode=utf-8
mail.username=******5272@163.com
#授权码,而非邮箱的登陆密码
mail.password=******