在项目中使用网易企业邮箱发送消息

最近在做一个项目,项目中需要使用到发送邮件的功能,由于原本使用的是个人邮件发送,所以每日发送的次数还会有一些限制,对业务来说很不友好,经过一番讨论,最后决定使用网易企业邮箱来发送消息,琢磨了一天,终于配置完成了,一下是我遇到的坑。
首先是拥有一个网易的企业邮箱,这一点我就不说了,有条件的注册一个就好了
https://mail.qiye.163.com/js6/main.jsp 这是网易企业邮箱的登录连接

然后我们点击设置->邮箱设置-> 客户端设置我们可以生成一个授权密码

注意:这里有一个小问题,就是协议类型之一 IMAP协议和POP协议,而我们所熟知的SMTP协议在这里没有,我们暂时不关注它,我们生成一个IMAP协议的客户端授权码,然后记住16位授权码,接下来的项目中会遇到

然后我们去下面的网站查询一下我们的邮箱需要使用哪些端口
https://qiye.163.com/help/client-profile.html

我们去这个网站上面查询我们应该使用的服务器地址,还有开启的端口,推荐我们都要使用加密端口,
这里对应这上面有一个小问题,我们刚才生成的授权码只有POP和IMAP协议的,没有SMTP的,我最初就是误以为我只能用这两种协议去配置客户端,但是后来发现都不行,最后还是使用了SMTP协议,端口也是465,但是授权码却是我刚才生成的IMAP协议的授权码,所以这也算是一个小小的bug吧,最后我去源代码里面也发现了这样的问题

在发送邮件的javax.mail的包里面有一个文件,这个文件对应的各种协议的provider,

但是我又在代码中debug发现了这样的一行代码

我当时有些懵逼,如果按照上面的配置文件和下面的代码结合的逻辑来看,那我的Type如果不等于Transport,岂不是永远都会报错,然后我又扒拉了一下配置文件,发现POP ,POP3,POP3s的Type全都是store,那以我来看,他们是不是就永远也不会启动成功了,不知道哪一个程序员写的代码,
最后我抱着灵机一动的想法,发现虽然我是用pop协议生成的授权码,但是使用SMTP也是可以使用的,好吧,到目前为止就这样了

JAVA代码编写
第一步就是引入对应的依赖,刚才一直在说jar包有问题,但是也没有说是那个jar包,这一点全能的spring已经帮我们写好了,我们只有引入就好

org.springframework.boot
spring-boot-starter-mail

第二步就是我们的配置文件编写
spring:

邮件发送的各种配置

mail:
protocol: smtp
port: 465
host: smtp.qiye.163.com
from: notifications@jinmuinfo.com
title: 主题
username: 发件人
# 授权码
password: 授权码
default-encoding: utf-8
properties.mail.smtp.ssl.enable: true
properties.mail.smtp.ssl.required: true
properties.mail.smtp.port: 465 #端口号465或587
# html模版
defaultTemplate:
尊敬的%s:

已为您发送验证码:%s,该验证码10分钟内有效。

感谢对Unite的支持,再次希望你在Unite的体验有益和愉快。

第三步就是写代码,由于大致的格式都是那些,我这里只写主要的逻辑就好了

/**

  • @author cs

  • @des

  • @date 2021/11/16
    */
    @Slf4j
    @Service
    @ConfigurationProperties(prefix = "spring.mail")
    public class EmailServiceImpl implements EmailService {

    @Autowired
    private JavaMailSender javaMailSender;

    @Value("${spring.mail.title}")
    private String title;

    @Value("${spring.mail.registerTemplate}")
    private String registerTemplate;

    @Value("${spring.mail.bindTemplate}")
    private String bindTemplate;

    @Value("${spring.mail.updatePasswordTemplate}")
    private String updatePasswordTemplate;

    @Value("${spring.mail.forgetPasswordTemplate}")
    private String forgetPasswordTemplate;

    @Value("${spring.mail.defaultTemplate}")
    private String defaultTemplate;

    //注入配置文件中配置的信息——>from
    @Value("${spring.mail.from}")
    private String from;

    @Override
    public void sendSimpleMail(String email, String code) {
    MimeMessage message = javaMailSender.createMimeMessage();
    MimeMessageHelper messageHelper;
    try {
    messageHelper = new MimeMessageHelper(message, true);
    //发件人
    messageHelper.setFrom(from);
    //收件人
    messageHelper.setTo(email);
    //邮件主题
    message.setSubject(title);
    //邮件内容
    String appellation = email.split("@")[0];
    String content = "";
    content = String.format(defaultTemplate, appellation, code);
    messageHelper.setText(content, true);
    javaMailSender.send(message);
    log.info("邮件已经发送!");
    } catch (MessagingException e) {
    log.error("发送邮件时发生异常:" + e);
    }
    }

}
最后,给大家推荐一下最近新写的一个啥用都没有的项目,
https://auth.whaleal.com

全部评论
暂无数据
拽拽
这家伙很懒,什么都没留下
  • 积分
    25
  • 话题
    1
  • 评论
    7
  • 注册排名
    6853