邮件发送功能是我们在开发中非常常见的一个需求,对于各种账号的注册绑定和账号激活都是非常好用的。因此今天我们来学习一下在spring中实现发送邮件的功能。
1.导入jar包。首先我们需要在我们spring项目中添加以下两个jar包(我是使用的maven所以直接配置依赖信息)
-
<!--spring支持-->
-
<dependency>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring-context-support</artifactId>
-
<version>5.0.0.RELEASE</version>
-
</dependency>
-
<!--邮件发送-->
-
<dependency>
-
<groupId>com.sun.mail</groupId>
-
<artifactId>javax.mail</artifactId>
-
<version>1.6.1</version>
-
</dependency>
2.配置邮件服务器等信息。
先在邮箱中设置开启smtp和pop3服务然后拿到授权码:
mail.properties文件:
-
#服务器主机名 smtp.xx.com
-
mail.smtp.host=smtp.163.com
-
#密码/客户端授权码
-
mail.smtp.password=XXXXXXXXX
-
#编码字符
-
mail.smtp.defaultEncoding=utf-8
-
#是否进行用户名密码校验
-
mail.smtp.auth=true
-
#设置超时时间
-
mail.smtp.timeout=20000
3.配置applicationContext-email.xml。在配置文件中导入properties文件的属性:
-
<!--邮件配置-->
-
<context:property-placeholder location="classpath:config/mail.properties" ignore-unresolvable="true"/>
其中ignore-unresolvable="true"属性是配置文件中存在多个property-placeholder时出现解析不了的占位符进行忽略掉,详细解释可以参考这位大神的博客:property-placeholder。
然后注入一个邮件发送的bean接口:
-
<!--配置邮件接口-->
-
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
-
<property name="host" value="${mail.smtp.host}"/>
-
<property name="username" value="${mail.smtp.username}"/>
-
<property name="password" value="${mail.smtp.password}"/>
-
<property name="defaultEncoding" value="${mail.smtp.defaultEncoding}"/>
-
<property name="javaMailProperties">
-
<props>
-
<prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
-
<prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
-
</props>
-
</property>
-
</bean>
所有配置都完成了
4.编写一个测试类来测试一下:
-
package com.ssm.controller;
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.core.io.FileSystemResource;
-
import org.springframework.mail.SimpleMailMessage;
-
import org.springframework.mail.javamail.JavaMailSender;
-
import org.springframework.mail.javamail.MimeMessageHelper;
-
import org.springframework.web.bind.annotation.RequestMapping;
-
import org.springframework.web.bind.annotation.RestController;
-
import javax.mail.MessagingException;
-
import javax.mail.internet.MimeMessage;
-
import java.io.File;
-
import java.io.IOException;
-
import java.util.Properties;
-
/**
-
* created by viking on 2018/07/17
-
* 测试邮件发送controller
-
*/
-
@RestController
-
@RequestMapping("mail")
-
public class SendMailController {
-
@Autowired
-
private JavaMailSender javaMailSender;//在spring中配置的邮件发送的bean
-
@RequestMapping("send")
-
public Object sendMail03(){
-
MimeMessage mMessage=javaMailSender.createMimeMessage();//创建邮件对象
-
MimeMessageHelper mMessageHelper;
-
Properties prop = new Properties();
-
String from;
-
try {
-
//从配置文件中拿到发件人邮箱地址
-
prop.load(this.getClass().getResourceAsStream("/config/mail.properties"));
-
from = prop.get("mail.smtp.username")+"";
-
mMessageHelper=new MimeMessageHelper(mMessage,true);
-
mMessageHelper.setFrom(from);//发件人邮箱
-
mMessageHelper.setTo("[email protected]");//收件人邮箱
-
mMessageHelper.setSubject("Spring的邮件发送");//邮件的主题
-
mMessageHelper.setText("<p>这是使用spring的邮件功能发送的一封邮件</p><br/>" +
-
"<a href='https://blog.csdn.net/Mr__Viking'>打开我的博客主页</a><br/>" +
-
"<img src='cid:fengye'>",true);//邮件的文本内容,true表示文本以html格式打开
-
File file=new File("F:/img/枫叶.png");//在邮件中添加一张图片
-
FileSystemResource resource=new FileSystemResource(file);
-
mMessageHelper.addInline("fengye", resource);//这里指定一个id,在上面引用
-
mMessageHelper.addAttachment("枫叶.png", resource);//在邮件中添加一个附件
-
javaMailSender.send(mMessage);//发送邮件
-
} catch (MessagingException e) {
-
e.printStackTrace();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
return "发送成功";
-
}
-
}
5.测试结果。直接上图:
访问接口运行程序
查看邮箱的收到的邮件信息
收到的邮件和我们预期的一样,说明我们的功能完美的实现了
以上转载借鉴自别处并加以更改