一、组件版本

<groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-dependencies</artifactId>
 <version>Hoxton.RELEASE</version>

 <!-- 邮件服务 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

spring-boot-starter-mail 内部依赖的是 jakarta.mail 1.6.4版本。

org.springframework.boot spring-boot-starter 2.2.1.RELEASE compile org.springframework spring-context-support 5.2.1.RELEASE compile com.sun.mail jakarta.mail 1.6.4 compile jakarta.mail 是 javax.mail 1.6版本后的重命名。

二、场景描述

    在使用 JavaMailSender.send(mimeMessage); 发送邮件时,时间太久,至少18s以上。

三、问题展现

    通过在代码中,设置mail中Session的debug日志分析,主要是两处源码耗时太久。
  1. com.sun.mail.smtp.SMTPTransport 类中的726行 getLocalHost() 从而获取 CanonicalHostName

  2. org.springframework.mail.javamail.JavaMailSenderImpl 中 mimeMessage.saveChanges()

中,内部深处也是使用了 getLocalHostName() 而获取 CanonicalHostName

三、解决方案

    解决方案有两种。

    1. 在本地的hosts文件中,配置 本地的ip与域名(或计算机名),使其可以快速获取到CanonicalHostName.

例如

            192.168.56.1 localhost1

    2.  通过在程序代码中添加系统变量以及mail的Session的变量,从而绕过,不获取CanonicalHostName。

session.getProperties().setProperty(“mail.smtp.localhost”, “自定义”);
System.getProperties().setProperty(“mail.mime.address.usecanonicalhostname”, “false”);
伪代码:

@Autowired
private JavaMailSender mailSender;

public Boolean sendComplexEmail2(EmailBo email) throws MessagingException, IOException {

    // 解决本地DNS未配置 ip->域名场景下,邮件发送太慢的问题
    System.getProperties().setProperty("mail.mime.address.usecanonicalhostname", "false");
    // 获取 MimeMessage
    MimeMessage mimeMessage = mailSender.createMimeMessage();
    Session session = mimeMessage.getSession();
    // 设置 日志打印控制器
    session.setDebug(true);
	//  解决本地DNS未配置 ip->域名场景下,邮件发送太慢的问题
    session.getProperties().setProperty("mail.smtp.localhost", "myComputer");

。。。。。。
}

————————————————
版权声明:本文为CSDN博主「peanut12138」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21216941/article/details/128543631

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐