34-Spring Boot SSM邮件

Spring SSM邮件

1. 邮箱配置

  1. 首先要配置你将要使用的发送的邮箱
  2. 登录你的邮箱,找到设置->POP3/SMTP/IMAP来进行开启POP3/SMTP服务和IMAP/SMTP服务
  3. 之后根据自己的邮箱情况找到开启授权码登录方式,拿到授权码即可。

2. 相关的POM依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
<!--添加spring支持email 依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.19.RELEASE</version>
</dependency>

<!--邮件发送-->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.1</version>
</dependency>

3. 在Spring中进行发送

3.1. 发送简单文本邮件

  1. 可以将配置文件放置到yml中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.mail.internet.MimeMessage;
import java.io.BufferedReader;
import java.io.FileReader;

/**
* @Author spricoder
* Create by 2020/07/05
* @Version 1.0
**/

@Component
public class MailUtil {
private static JavaMailSender javaMailSender;
private static String host = "smtp.qq.com";
private static String emailFrom;
private static Integer SMTPPort = 465;//SSL
private static String coding = "utf-8";
private static String password;

private static void initJavaMailSender() throws Exception {
if(javaMailSender == null) {
synchronized (MailUtil.class){
if(javaMailSender == null){
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
//外部加载数据
FileReader fileReader = new FileReader("filename");
BufferedReader bufferedReader = new BufferedReader(fileReader);
emailFrom = bufferedReader.readLine();
password = bufferedReader.readLine();

mailSender.setHost(host);//指定用来发送Email的邮件服务器主机名
mailSender.setPort(SMTPPort);//默认端口,标准的SMTP端口
mailSender.setUsername(emailFrom);//用户名
mailSender.setPassword(password);//就是刚刚设置的授权码

//加认证机制
Properties javaMailProperties = new Properties();
javaMailProperties.put("mail.smtp.auth", true);
javaMailProperties.put("mail.smtp.starttls.enable", true);
javaMailProperties.put("mail.smtp.starttls.required", true);
javaMailProperties.put("mail.smtp.timeout", 5000);
javaMailProperties.put("mail.smtp.ssl.enable",true);
javaMailProperties.put("mail.smtp.socketFactory.class",javax.net.ssl.SSLSocketFactory.class);

mailSender.setDefaultEncoding(coding);
mailSender.setJavaMailProperties(javaMailProperties);

javaMailSender = mailSender;
}
}
}
}

public void sendMessage(String toEmail, String code) throws Exception{
initJavaMailSender();
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(emailFrom);//发件人
helper.setTo(toEmail);//收件人
helper.setSubject("主题");//主题

//不使用HTML
helper.setText("内容", false);
//使用HTML
helper.setText("HTML", true);

//发送邮件
javaMailSender.send(message);
}

}

发送带有附件的邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void sendMessage(String toEmail, String code) throws Exception{
initJavaMailSender();
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(emailFrom);//发件人
helper.setTo(toEmail);//收件人
helper.setSubject("主题");//主题

//不使用HTML
helper.setText("内容", false);
//使用HTML
helper.setText("HTML", true);

//添加附件
FileSystemResource resource = new FileSystemResource("F:\\Users\\yd\\Desktop\\test.png");
helper.addAttachment("test.png", resource);

//发送邮件
javaMailSender.send(message);
}

4. 出现的问题

  1. 在服务器端不能进行发送:
    1. 检查是不是使用的端口没有开放,可以使用telnet命令进行检查:telnet smtp.qq.com 25
    2. 是不是因为必须要SSL的端口465进行发送(25端口不可以)
1
2
3
4
5
6
7
8
9
10
11
mail:
host: smtp.exmail.qq.com
username: 邮箱地址
default-encoding: utf-8
password: 授权码
port: 465
properties:
mail:
smtp:
socketFactory:
class: javax.net.ssl.SSLSocketFactory
  1. 端口情况:
    1. 25端口:使用普通简单加密类型的端口
    2. 465端口:使用SSL加密方式的端口
    3. 567端口:使用TSL加密方式的端口

5. 参考

  1. SSM 框架整合 spring 发送邮件功能实现!
  2. Springboot邮件发送 部署到服务器后邮件不能发送问题
  3. 使用 spring封装的javamail linux服务器发送邮件失败解决
  4. Spring发送邮件

34-Spring Boot SSM邮件
https://spricoder.github.io/2022/04/13/Spring-Boot/34-Spring-Boot-SSM%E9%82%AE%E4%BB%B6/
作者
SpriCoder
发布于
2022年4月13日
许可协议