最近在写一个项目,里面使用到了ak\sk,使用短信发送需要钱,想到可以使用邮箱发送。以下是通过编写java代码使用qq邮箱发送邮件的过程,包含踩坑,仅供参考。
想要通过代码使用qq邮箱发送邮件,首先要去qq邮箱中开启服务并获取授权码。
一直下滑,找到下面的位置
在安全设置里面可以开启服务和获取授权码。
POP3:是Post Office Protocol的简称,是用来接受电子邮件的
。
IMAP:是Internet Mail Access Protocol
,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。
SMTP :是Simple Mail Transfer Protocol
,即简单邮件传输协议。发送邮件一般用的是 SMTP 服务。
我们这里就是要开通SMTP服务来发送邮件。
相关服务的默认端口号和常用地址如下:
添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
配置文件:
spring:
mail:
host: smtp.qq.com #配置 SMTP 服务器地址
port: 465 #SMTP 服务器的端口
username: xxxxxxxx@qq.com #配置邮箱用户名
password: xxxxxxxx #配置密码,不是你邮箱密码,而是刚刚申请到的授权码
default-encoding: UTF-8 #默认的邮件编码
properties:
mail:
protocol: smtp
debug: true #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory #配饰 SSL 加密工厂
socketFactory:
port: 465
ssl:
enable: true
代码:
@Resource
private JavaMailSender javaMailSender;
@GetMapping("test")
public void test(){
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("这是一封获取secretKey邮件");
message.setFrom("1504126196@qq.com");
message.setTo("1932641979@qq.com");
message.setSentDate(new Date());
message.setText("你的secretKey为: hjfkafklasjfoiduajsoifjeiouwofinfiochdwfw\n请妥善保管。");
javaMailSender.send(message);
}
注意:JavaMailSender必须使用自动注入,才能用到配置文件中的配置,如果是自己new JavaMailSenderImpl,需要将配置文件中的配置通过set进行设置。不然会报Couldn't connect to host, port: localhost, 25; timeout -1;错误。
我这里是使用web进行访问,启动项目后,在浏览器中访问localhost:8124/api/user/test就会发送邮件。控制台打印如下信息,则发送成功。
也可以在自己邮箱中查看
对方邮箱收到的信息如下: