美文网首页
Springboot发送邮件及所遇到的超时问题

Springboot发送邮件及所遇到的超时问题

作者: 木头就是我呀 | 来源:发表于2020-03-19 08:51 被阅读0次

本篇主要介绍的是如何在Springboot中发送邮件,这个场景很容易遇到,比如我们在注册一个账号的时候,系统会提示你接收一个邮件验证码,这个时候,就需要在后台配置相关参数并发送该邮件了。具体怎么实现的呢,请往下看:

    1. 添加pom依赖
      <!--邮件-->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
      </dependency>
    
    1. 获取邮箱授权码。这里以QQ邮箱为例,我们登陆QQ邮箱,找到设置-邮箱设置-账户-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,选择开启POP3/SMTP服务,此时会得到一个授权码,妥善保管,以下会用到的。
      image.png
  • 3.applocation.properties中添加如下配置,yml文件请自行转换格式

    # 邮箱相关变量
    #这里以QQ邮箱为例
    #QQ邮箱服务器
    spring.mail.host=smtp.qq.com
    #你的QQ邮箱账户
    spring.mail.username=123456@qq.com
    #你的QQ邮箱第三方授权码
    spring.mail.password=xxxxxxxxxxxxxxxxx
    #编码类型
    spring.mail.default-encoding=UTF-8
    #发送端口
    spring.mail.port=465
    #ssl
    spring.mail.properties.mail.smtp.ssl.enable=true
    
    • 注意,我在本地调试的时候,没有加上面的发送端口ssl两个配置,是没问题的,正常的能发送,我的电脑是mac系统;当我将项目部署到我的一个windows服务器上的时候,邮箱发送这个功能就出现了问题,出现类似如下错误信息
      ERROR: Problem while 
      sending     message: javax.mail.MessagingException: Could not connect to SMTP host: 
      smtp.qq.com, port: 25,     response: -1
    
    • 搜索了一圈解决方案,统一的解决方案是让我添加发送端口配置项,修改默认的25端口为465端口,原因是QQ邮箱提供的帮助信息是这样的:
      image.png
    • 我就正常的添加了发送端口这一项配置,可情况还是一样,在mac上可以发送,但是在windows上报的错误和上面一样,只是其中的端口变成了port: 465。经过了一些查询,找到了这样一句话:
      465端口(SMTPS):465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,
      它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。
      SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露,
      还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。
      
    • 这时候我就怀疑是不是自己漏掉了邮箱的ssl配置,经过搜索,得到了上面的ssl配置,此时,windows上报超时的问题就解决了。


      image.png
    1. 定义发送邮件的实现类
    package com.mutou.jobs.service;
    
    import javax.annotation.Resource;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.stereotype.Service;
    
    /** 邮件service.
     * @author 杨喜存
     * @since 2019/12/6 11:22 AM
     */
    @Service
    public class MailService {
      @Value("${spring.mail.username}")
      private String mail_username;
    
      @Resource
      private JavaMailSender mailSender;
    
      public void sendDefaultMail(String to, String subject, String content){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(to);//收信人
        message.setSubject(subject);//主题
        message.setText(content);//内容
        message.setFrom(mail_username);//发信人
    
        mailSender.send(message);
      }
    }
    
    1. 就可以直接发送啦
    mailService.sendDefaultMail( "收件人的邮箱","主题", "邮件内容");
    

这是之前实现过的,前天晚上部署的时候发现的问题,这里拿出来做个记录,实现的代码不是重点,问题才是重点;如果你也遇到相同的问题,希望能帮到你。

相关文章

  • Springboot发送邮件及所遇到的超时问题

    本篇主要介绍的是如何在Springboot中发送邮件,这个场景很容易遇到,比如我们在注册一个账号的时候,系统会提示...

  • springboot发送邮件遇到的问题

    在实际项目中遇到的需求:使用企业内部邮箱,比如我自己的邮箱cczhao@xxx,发送邮件给企业内其它同事。我先是使...

  • 阿里云 - 25端口封禁解决

    使用JavaMail发送邮件在阿里云服务器邮件发送失败 问题发现 问题产生: SpringBoot使用JavaMa...

  • SpringBoot邮件发送css样式在手机邮件中显示失效问题

    关于 下面分享一个本人在开发邮件服务遇到的一个小插曲,在使用SpringBoot的邮件发送FreeMarker模板...

  • SpringBoot邮件发送

    这篇文章介绍springboot的邮件发送。 由于很简单就没有分出server和imp之类,只是在controll...

  • SpringBoot 发送邮件

    # 依赖 # 配置 # 发送简单文本邮件 # 发送html邮件 # 使用邮件模板发送邮件 添加依赖 配置 新建ht...

  • springboot 发送邮件

    邮件的依赖: 定义邮件的服务类: 这里我们实例化MailService 测试一下: test-applicatio...

  • SpringBoot发送邮件

    简述 在日常工作开发中,发送邮件功能有时需要我们去开发使用,这里首先介绍以下与发送接受邮件相关的一些协议: 发送邮...

  • SpringBoot 发送邮件

    学习目标 快速掌握邮件业务类的核心逻辑和企业邮件的日常服务。 快速查阅 专题阅读:《SpringBoot 布道系列...

  • springBoot 发送邮件

    全局配置文件: # JavaMailsender 邮件发送的配置 spring . mail .host-smtp...

网友评论

      本文标题:Springboot发送邮件及所遇到的超时问题

      本文链接:https://www.haomeiwen.com/subject/jickyhtx.html