Spring Boot 发送邮件以及踩过的坑(Linux、465、ssl、email)

 

一、简单实现

1.引入依赖

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

2. application.yml配置

spring:
  mail:
    host: smtp.163.com
    username: xxx@163.com
    password: xxxxxx			#有的是授权码,有的是密码
    protocol: smtp

默认端口25

3.EmailUtil工具类,自己写

@Component
public class EmailUtil {
    @Resource
    private JavaMailSender mailSender;
    @Value("${spring.mail.username}")
    private String from;
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    public void send(String to, String subject, String text) {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = null;
        try {
            helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(text, true);
        } catch (MessagingException e) {
            logger.error(e.getMessage());
        }
        mailSender.send(message);
        logger.info("发送成功");
    }
}

4.测试

@SpringBootTest
class ServerApplicationTests {
    @Resource
    private EmailUtil emailUtil;

    @Test
    void contextLoads() {
        emailUtil.send("xxx@qq.com","模板邮件","xxx");
    }

}

二、踩过的坑

本地电脑是windows环境,通过简单实现就能发送邮件了。

问题:服务器是阿里云linux的,这种情况下会出错误提示,连接超时。

Couldn't connect to host, port: xxx.xxx.xxx.xxx, 25; timeout -1;

网上说,linux无法自动解析域名,需要先将邮件服务器地址host解析成ip

解析之后还是会报错。

根据网上说法是,阿里云25号端口没开,开了之后发现还是不行。

使用命令发现,邮件服务器端的25端口连接不上

telnet xxx.xxx.xxx.xxx 25

使用命令发现,邮件服务器端的465端口能连接上

telnet xxx.xxx.xxx.xxx 465

然后把port改成465,出现以下错误

Could not connect to SMTP host: 202.101.149.132, port: 465, response: -1

465端口是ssl协议,需要进行配置

application.yml配置修改为:

spring:
  mail:
    host: xxx.xxx.xxx.xxx
    username: xxx
    password: xxx
    protocol: smtp
    port: 465
    default-encoding: UTF-8
    properties:
      mail.smtp.auth: true
      mail:
        smtp:
          ssl:
            enable: true
      mail.smtp.socketFactory.port: 465
      mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
      mail.smtp.socketFactory.fallback: false

修改完成后,报错

 PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

问题原因是因为信任证书,百度了很久没有找到合适的方法,后来试着把邮件服务器地址加入信任,就可以了。

最终配置如下:

spring:
  mail:
    host: xxx.xxx.xxx.xxx
    username: xxx
    password: xxx
    protocol: smtp
    port: 465
    default-encoding: UTF-8
    properties:
      mail.smtp.auth: true
      mail:
        smtp:
          ssl:
            enable: true
            trust: xxx.xxx.xxx.xxx
      mail.smtp.socketFactory.port: 465
      mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
      mail.smtp.socketFactory.fallback: false

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Spring Boot 的邮件发送功能来发送电子邮件。首先,你需要在项目的依赖中添加 Spring Boot 的邮件依赖。在 `pom.xml` 文件中添加以下代码: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 接下来,你需要在配置文件中配置邮件相关的属性。在 `application.properties`(或 `application.yml`)文件中添加以下属性: ```properties # 邮件服务器主机名 spring.mail.host=your-mail-host # 邮件服务器端口 spring.mail.port=your-mail-port # 邮件发送者用户名 spring.mail.username=your-username # 邮件发送者密码 spring.mail.password=your-password # 邮件发送者地址 spring.mail.from=your-email-address ``` 现在,你可以在你的代码中使用 `JavaMailSender` 接口来发送邮件。你可以注入 `JavaMailSender` 接口的实例,并使用 `send()` 方法发送邮件。以下是一个简单的示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @Service public class EmailService { @Autowired private JavaMailSender javaMailSender; public void sendEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); javaMailSender.send(message); } } ``` 你可以在需要发送邮件的地方调用 `sendEmail()` 方法,并传入收件人地址、邮件主题和邮件内容。 这是使用 Spring Boot 发送邮件的基本步骤。你可以根据自己的需求进行进一步的定制和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值