文章目录
- 1. 发送简单邮件
- 1.1 导入依赖
- 1.2 配置邮件信息
- 1.3 定义接口
- 1.4 定义实现类
- 1.5 测试
- 2. 发送其他格式
- 2.1 发送HTML格式
- 2.2 发送附件
1. 发送简单邮件
1.1 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
1.2 配置邮件信息
需要在 appilcation.yml
中对发送的邮件的一些信息进行配置,配置信息如下:
spring:
mail:
host:
username:
password:
这里我们使用QQ邮箱作为示例,如果使用126或者163等邮箱操作的步骤相差不大,这里的 username
字段就是我们QQ邮箱的地址,至于 password
,获取步骤如下。
首先进入邮箱的主页,点击设置,点击设置里面的帐户。
往下滑,直到看到这一块
点击第一个 POP3/SMTP服务
那一行的开启,得到一个授权码,这个授权码就是我们的 password
。
由于QQ邮箱我发短信他不理我,这里我就用163邮箱了吧,步骤还是一样的。
1.3 定义接口
在启动类的同级目录下定义一个接口,接口如下:
public interface SendMailService {
void sendMail();
}
接下来就是实现这个接口了。
1.4 定义实现类
发一个邮件,我们需要什么?至少需要一个主题、内容、发件人以及收件人吧,于是我们的实现类可以这样实现:
@Service
public class SendMailServiceImp implements SendMailService {
@Autowired
private JavaMailSender javaMailSender;
// 邮件标题
private String subject = "测试邮件";
// 邮件正文
private String context = "测试邮件正文";
// 邮件发件人,即获得授权码那个邮箱
private String from = "";
// 邮件收件人
private String to = "";
@Override
public void sendMail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(context);
javaMailSender.send(message);
}
}
注意:需要添加 @Service
注解将其注入springboot容器中。
1.5 测试
在测试类中进行测试如下:
@SpringBootTest
class MailApplicationTests {
@Autowired
private SendMailService sendMailService;
@Test
void contextLoads() {
sendMailService.sendMail();
}
}
可以看到,我们的邮箱中就躺下了一封邮件,如下
2. 发送其他格式
当然,简单类型的邮件只有个text消息是无法满足我们的,接下来我们需要发送更多的其他形式的文件。
2.1 发送HTML格式
这个时候简单邮件就不能支持这种格式了,就需要使用另外的格式了,代码如下:
@Service
public class SendMailServiceImp implements SendMailService {
@Autowired
private JavaMailSender javaMailSender;
// 邮件标题
private String subject = "测试邮件";
// 邮件正文
private String context = "<img src='https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fbkimg.cdn.bcebos.com%2Fpic%2F0ff41bd5ad6eddc451da40c7c48aa1fd5266d01695f7&refer=http%3A%2F%2Fbkimg.cdn.bcebos.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1669045822&t=4ad71df55ec3bf37bafe5d0e1443951e'/>";
// 邮件发件人
private String from = "";
// 邮件收件人
private String to = "";
@Override
public void sendMail() {
try {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
// 下面的true表示使用HTML格式的文件
helper.setText(context, true);
javaMailSender.send(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
该改吗经过测试执行后,得到信息如下所示:
可以看到,我们的HTML格式完全得到了执行,这让我不仅想到了垃圾邮件也肯定是这样发过来的。
2.2 发送附件
当需要发送附件的时候,需要将 MimeMessageHelper
中是否发送附件设置为 true
并添加到附件中去,具体示例如下所示。
@Service
public class SendMailServiceImp implements SendMailService {
@Autowired
private JavaMailSender javaMailSender;
// 邮件标题
private String subject = "测试邮件";
// 邮件正文
private String context = "测试内容";
// 邮件发件人
private String from = "";
// 邮件收件人
private String to = "";
@Override
public void sendMail() {
try {
MimeMessage message = javaMailSender.createMimeMessage();
// true表示设置使用附件的形式
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
// 设置使用HTML格式
helper.setText(context, true);
File f1 = new File("web_mark.md");
// 前一个参数是发送的文件名
helper.addAttachment("书签", f1);
javaMailSender.send(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
发送成功后的邮箱收件如下所示: