这里主要以QQ邮件的方式进行发送
想学习更多,请关注个人微信GZH:Magic全靠想象
1、发送邮件配置
- 引入发送邮件satart
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
- 配置application.properties
# 字符集
spring.mail.default-encoding= utf-8
# 邮件host类型
spring.mail.host= smtp.qq.com
# 发送者邮箱
spring.mail.username= 1599532618@qq.com
# 发送者邮箱的安全验证码
spring.mail.password= ***********
获取password方式
2、邮件entity
package com.vcback.vc_back_main.entity;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @author 高俊
* @create 2022-08-2022/8/8-9:24
*/
@Data
@Component
public class EmailEntity {
// 发送人
@Value("${spring.mail.username}")
private String from;
// 收件人
private String to;
// 邮件主题
private String subject;
// 文本内容
private String text;
// 发送时间
private Date sentDate = new Date();
// 附件路径
private String filePath;
// jign'tai
private String srcId;
}
3、邮件工具类
package com.vcback.vc_back_main.utils;
import com.easy.tool.utils.bean.BeanUtils;
import com.easy.tool.utils.uuid.UUIDUtils;
import com.vcback.exception.CommonException;
import com.vcback.vc_back_main.entity.EmailEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* @author 高俊
* @create 2022-08-2022/8/8-9:29
*/
@Component
public class SendMailUtils {
// html格式邮件前后缀
private String htmlPrefix = "<html><body>";
private String htmlsuffix = "</body></html>";
@Resource
private JavaMailSender javaMailSender;
// 简单发送邮件
public void sendSimpleEmail(EmailEntity entity){
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(entity.getFrom());
message.setTo(entity.getTo());
message.setSentDate(entity.getSentDate());
message.setSubject(entity.getSubject());
message.setText(entity.getText());
try {
javaMailSender.send(message);
}catch (MailException e){
throw new CommonException(500,"简易邮件发送失败");
}
}
// 发送html格式内容邮件
public void sendHtmlEmail(EmailEntity entity){
MimeMessage message = javaMailSender.createMimeMessage();
try {
//true表示需要创建一个multipart message
MimeMessageHelper mime = new MimeMessageHelper(message, true);
mime.setTo(entity.getTo());
mime.setFrom(entity.getFrom());
mime.setSubject(entity.getSubject());
mime.setText(htmlPrefix + entity.getText() + htmlsuffix,true);
javaMailSender.send(message);
} catch (MessagingException e) {
throw new CommonException(500,"发送html邮件时发生异常");
}
}
// 发送附件邮件
public void sendFileEmail(EmailEntity entity){
MimeMessage message = javaMailSender.createMimeMessage();
String filePath = entity.getFilePath();;
try {
//true表示需要创建一个multipart message
MimeMessageHelper mime = new MimeMessageHelper(message, true);
mime.setTo(entity.getTo());
mime.setFrom(entity.getFrom());
mime.setSubject(entity.getSubject());
mime.setText(htmlPrefix + entity.getText() + htmlsuffix,true);
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
mime.addAttachment(fileName, file);
javaMailSender.send(message);
} catch (MessagingException e) {
throw new CommonException(500,"发送附件邮件时发生异常");
}
}
// 发送静态资源文件
public void sendStaticEmail(EmailEntity entity){
MimeMessage message = javaMailSender.createMimeMessage();
String filePath = entity.getFilePath();;
try {
//true表示需要创建一个multipart message
MimeMessageHelper mime = new MimeMessageHelper(message, true);
mime.setTo(entity.getTo());
mime.setFrom(entity.getFrom());
mime.setSubject(entity.getSubject());
mime.setText(htmlPrefix + entity.getText() + htmlsuffix,true);
FileSystemResource file = new FileSystemResource(new File(filePath));
mime.addAttachment(entity.getSrcId(), file);
javaMailSender.send(message);
} catch (MessagingException e) {
throw new CommonException(500,"发送静态资源文件邮件时发生异常");
}
}
}
4、项目打包到aliyun服务器发送邮件失败的问题
原因:由于阿里云服务器因为安全考虑不开放发送邮件的默认端口 25 ,所以导致邮件发送被拦截
解决方案:这里通过使用465端口以及ssl加密方式发送邮件,所以在application.properties中添加配置
# 阿里云服务器发送邮件配置项
# SSL Config
spring.mail.port=465
spring.mail.protocol=smtp
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.socketFactory.port=465
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory