邮件的发送
一、注册一个网易的邮箱账号
地址:https://mail.163.com/
- 开启POP3/SMTP服务:
- 获取客户端的授权码和服务器的地址
二、实现邮件发送
- 导入依赖
<!--spring支持-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.3.3</version>
</dependency>
<!--邮件发送-->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.1</version>
</dependency>
- 在xml文件中配置
<!-- 邮件发送 邮件服务器的配置 -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<!-- 发送内容使用的编码 -->
<property name="defaultEncoding" value="UTF-8" />
<!-- 发送邮件使用的服务器地址 -->
<property name="host" value="smtp.163.com" />
<!-- 从那个邮箱发送邮件使用的账号,一般为自己的邮箱 -->
<property name="username" value="lscong1003@163.com" />
<!-- 为了保密,必须是授权码,不能是实际登录该邮箱的登录密码 -->
<property name="password" value="您的授权码" />
<property name="javaMailProperties">
<props>
<!-- 需要认证登录信息 -->
<prop key="mail.smtp.auth">true</prop>
<!-- 可以查看调试信息 -->
<prop key="mail.debug">false</prop>
<!-- 连接超时 -->
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
</bean>
<!-- 邮箱发送邮件 -->
<bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage" scope="singleton">
<!-- 从那个邮箱发送邮件的邮箱 -->
<property name="from" value="lscong1003@163.com"/>
</bean>
<!-- 开发自己的邮件发送程序 -->
<bean id="mailSenderUtil" class="com.simon.utils.MailSenderUtil">
<!-- 注入上面配置的bean -->
<property name="mailSender" ref="mailSender" />
<property name="simpleMailMessage" ref="simpleMailMessage" />
</bean>
- 发送邮件的工具类
package com.simon.utils;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Map;
public class MailSenderUtil {
//Java邮件发送对象
private JavaMailSender mailSender;
//简单邮件信息(封装邮件的信息)
private SimpleMailMessage simpleMailMessage;
//发送到那个邮箱,比如发给自己,设置默认为自己(可以在业务层的方法中修改),也可以发给别人,比如111111@qq.com
//private String to = "lscong1003@163.com";
private String to;
//发送的邮箱的标题
private String subject;
//发送的邮箱的内容
private String content;
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public SimpleMailMessage getSimpleMailMessage() {
return simpleMailMessage;
}
public void setSimpleMailMessage(SimpleMailMessage simpleMailMessage) {
this.simpleMailMessage = simpleMailMessage;
}
public JavaMailSender getMailSender() {
return mailSender;
}
public void setMailSender(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
/**
* 发送普通带附件的HTML邮件
* @throws MessagingException
*/
public void sendHtmlWithAttachment(Map attachments) throws MessagingException{
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true);
//设置发送给那个邮箱
messageHelper.setTo(this.getTo());
messageHelper.setFrom(simpleMailMessage.getFrom());
//设置发送邮件的标题
messageHelper.setSubject(this.getSubject());
//设置发送的内容 第二参数为是否是html邮件
messageHelper.setText(this.getContent(),true);
//发送邮件
mailSender.send(mimeMessage);
}
}
-
这里模拟一个找回密码的邮件发送;在注册用户的时候基本上是使用邮箱注册的,所以这里找回密码也是发送邮箱,在前端输入邮箱,查询数据库将用户的密码发送到输入的邮箱地址中,用户可以查看邮箱而得知密码,再进行登录。
-
前端输入邮箱的表单:
<form class="layui-form">
<div class="layui-form-item">
<label for="aEmail" class="layui-form-label">
<span class="x-red">*</span>邮箱
</label>
<div class="layui-input-inline">
<input placeholder="请输入找回密码的邮箱" type="text" id="aEmail" name="aEmail" required=""
lay-verify="aEmail"
autocomplete="off" class="layui-input">
</div>
<div class="layui-input-inline">
<button class="layui-btn" lay-filter="send" lay-submit="">
发送
</button>
</div>
</div>
</form>
- 发送邮件的controller:
/*
* 发送邮箱
* */
@PostMapping("/sendEmail")
@ResponseBody
public Map<String, Object> sendEmail(@RequestBody Admin admin) {
Map<String, Object> map = adminService.selectByEmail(admin);
return map;
}
- 业务层
public class AdminServiceImpl implements AdminService {
@Autowired
private AdminMapper adminMapper;
@Autowired
private MailSenderUtil mailSenderUtil;
public Map<String, Object> selectByEmail(Admin admin) {
Map<String, Object> map = new HashMap<String, Object>();
Admin admin1 = adminMapper.selectByEmail(admin.getAEmail());
if (admin1 != null) {
//查询到密码
String pass = admin1.getAPass();
//调用发送邮箱
try {
sendEmail(admin.getAEmail(), pass);
map.put("code", "200");
map.put("info", "邮件发送成功,请前往邮箱查看登录!");
System.out.println("邮件发送成功!");
} catch (MessagingException e) {
System.out.println("邮件发送失败!");
map.put("code", "500");
map.put("info", "邮件发送失败!");
e.printStackTrace();
}
}else {
map.put("info","此邮箱不存在!");
}
return map;
}
private void sendEmail(String email, String pass) throws MessagingException {
System.out.println("开始发送邮件!");
//设置发送给谁
mailSenderUtil.setTo(email);
//设置邮件的标题
mailSenderUtil.setSubject("密码找回 ");
//添加标题和内容(密码)
StringBuilder builder = new StringBuilder();
builder.append("<html><body>密码为:");
builder.append(pass);
builder.append("</body></html>");
String content = builder.toString();
mailSenderUtil.setContent(content);
//发送邮件
mailSenderUtil.sendHtmlWithAttachment(null);
}
}
- mapper层就自己去编写一个方法和查询数据库中的数据的xml就行了。