Hutool 线上邮件发送失败问题

Hutool 线上邮件发送错误问题

测试环境,拿163邮箱来测试,是正常成功。但是,部署到生产环境时,是一个内网邮件系统。配置好生产的对应smtp服务器地址以及账号密码后,提示如下

Could not connect to SMTP host: ***.***.com, port: 465

我把 hutool 做了封装,核心代码

@AutoConfiguration
@EnableConfigurationProperties(MailProperties.class)
public class MailConfig {

    @Bean
    @ConditionalOnProperty(value = "mail.enabled", havingValue = "true")
    public MailAccount mailAccount(MailProperties mailProperties) {
        MailAccount account = new MailAccount();
        account.setHost(mailProperties.getHost());
        account.setPort(mailProperties.getPort());
        account.setAuth(mailProperties.getAuth());
        account.setFrom(mailProperties.getFrom());
        account.setUser(mailProperties.getUser());
        account.setPass(mailProperties.getPass());
        account.setSocketFactoryPort(mailProperties.getPort());
        account.setStarttlsEnable(mailProperties.getStarttlsEnable());
        account.setSslEnable(mailProperties.getSslEnable());
        account.setTimeout(mailProperties.getTimeout());
        account.setConnectionTimeout(mailProperties.getConnectionTimeout());

        return account;
    }

}

确定自己配置没有问题。网上的解决按方案如下:

1.修改jdk协议(无效)

网上说,是jdk1.8版本导致SSL调用权限上有问题,版本比较高。解决方法是:

找到jdk 1.8安装目录,找到C:\Program Files\Java\jre里面的lib\security 下面有个java.security。找到对应的 SSLv3,删除掉,重启项目就好了。(删掉SSLv3就是允许SSL调用)

2.修改代码,添加协议(无效)

网上说是代码里添加协议:props.put("mail.smtp.ssl.protocols", "TLSv1.2");

转换到hutool,如下:

account.setSslProtocols("TLSv1.2");

3.最终解决办法

网上办法

MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);

Session session = Session.getInstance(props);

转换到 hutool,如下:

MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
account.setCustomProperty("mail.smtp.ssl.socketFactory", sf);

最终代码

@AutoConfiguration
@EnableConfigurationProperties(MailProperties.class)
public class MailConfig {

    @Bean
    @ConditionalOnProperty(value = "mail.enabled", havingValue = "true")
    public MailAccount mailAccount(MailProperties mailProperties) {
        MailAccount account = new MailAccount();
        account.setHost(mailProperties.getHost());
        account.setPort(mailProperties.getPort());
        account.setAuth(mailProperties.getAuth());
        account.setFrom(mailProperties.getFrom());
        account.setUser(mailProperties.getUser());
        account.setPass(mailProperties.getPass());
        account.setSocketFactoryPort(mailProperties.getPort());
        account.setStarttlsEnable(mailProperties.getStarttlsEnable());
        account.setSslEnable(mailProperties.getSslEnable());
        account.setTimeout(mailProperties.getTimeout());
        account.setConnectionTimeout(mailProperties.getConnectionTimeout());

        try {
            // 解决连接smtp服务失败问题
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            account.setCustomProperty("mail.smtp.ssl.socketFactory", sf);
        } catch (GeneralSecurityException e) {
            throw new RuntimeException(e);
        }
        return account;
    }

}

参考链接:线上发送邮件问题记录

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Hutool发送邮件的步骤如下: 1. 首先,需要引入第三方依赖javax.mail,可以在pom.xml文件中添加以下代码: ```xml <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency> ``` 2. 在项目的resources目录下创建一个config文件夹,并在该文件夹下创建一个名为mail.setting的文件。在该文件中配置邮件服务器的相关信息,例如: ```properties # 邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀> host = smtp.qq.com # 发件人(必须正确,否则发送失败) from = ***@qq.com # 用户名,默认为发件人邮箱前缀 user = *** # 密码(注意,某些邮箱需要为SMTP服务单独设置授权码,详情查看相关帮助) pass = *** ``` 3. 在项目的pom.xml文件中导入Hutool的maven依赖,可以添加以下代码: ```xml <hutool.version>5.0.5</hutool.version> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>${hutool.version}</version> </dependency> ``` 以上就是使用Hutool发送邮件的步骤。你可以根据需要进行相应的配置和调用Hutool提供的邮件发送方法来发送邮件。 #### 引用[.reference_title] - *1* [用hutool实现邮件发送功能](https://blog.csdn.net/weixin_57393819/article/details/125533322)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Hutool模块之邮件发送功能(Mail)](https://blog.csdn.net/qq355972697/article/details/114637374)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值