Spring的邮件发送配置
引入依赖
想要系统发送邮件我们必须先引入相应的jar包。所以我们使用maven引入邮件发送的依赖。
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.1</version>
</dependency>
javax.mail是java实现邮件发送的工具类。
邮件服务器信息配置文件
一般我们将邮件服务器配置信息写在properties文件里,然后在系统中运行时加载。如果要发送邮件,我们需要配置以下几项重要信息。
基于spring的JavaMailSenderImpl配置的。
- protocol:邮件服务协议。有smtp,smtps,pop3。(这里需要注意的是在配置properties时,不要将参数写成大写。如smtp写成SMTP,这将导致与javax.mail里面参数不符,造成找不到协议的报错。)
- host:邮件服务器地址。是协议+.+邮件服务器类型后缀+.com。如qq的smtp就是smtp.qq.com,网易的smtp就是smtp.163.com。
- port:smtp默认使用25端口,smtps使用465端口,pop3默认110.
- username:邮箱地址。即发送方邮箱地址。如855928192@qq.com。
- password:邮箱服务器授权码,请注意这个不是你邮箱的密码,这个是邮箱服务器授权码。(各家邮箱服务器授权码获取方式可百度)
- javaMailProperties:这里配置的是邮箱服务器的。是其他的一些邮箱配置属性。使用标签进行配置。如email.smtp.auth(身份认证)。
例子:
email.protocol=smtp
email.host=localhost
email.port=25
email.username=test1@mail.com
email.password=123456
email.auth=true
email.systemEmail=844271870@qq.com
spring的JavaMailSenderImpl的声明
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="protocol" value="${email.protocol}"/>
<property name="host" value="${email.host}"/>
<property name="port" value="${email.port}"/>
<property name="username" value="${email.username}"/>
<property name="password" value="${email.password}"/>
<property name="javaMailProperties">
<props>
<prop key="mail.${email.protocol}.auth">${email.auth}</prop>
</props>
</property>
</bean>
代码编写
//使用spring的依赖注入,注入JavaMailSender的实现类JavaMailSenderImpl
@Autowired
private JavaMailSender javaMailSender;
//从properties配置文件读取,用于表示邮件发送方地址。
@Value("${email.systemEmail}")
private String systemEmail;
@Override
public void sendEmail(String to, String subject, String htmlText) throws Exception {
try {
//使用spring的javaMailSender生成javax.email的MimeMessage对象
MimeMessage msg = javaMailSender.createMimeMessage();
//使用spring的MimeMessageHelper对MimeMessage对象进行属性设置。
MimeMessageHelper msgHelper = new MimeMessageHelper(msg);
//发送方地址设置
msgHelper.setFrom(systemEmail);
//接收方方地址设置
msgHelper.setTo(to);
//邮件主题设置
msgHelper.setSubject(subject);
//邮件内容设置,true参数表示内容可以表示为html内容
msgHelper.setText(htmlText,true);
//发送邮件
javaMailSender.send(msg);
}catch (MessagingException e){
throw new Exception("Failed to send Email.",e);
}
}
public JavaMailSender getJavaMailSender() {
return javaMailSender;
}
public void setJavaMailSender(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}