springboot集成javax mail第三方邮件功能避坑,javax.mail.MessagingException: Exception reading response

springboot集成javax mail使用第三方发送邮件时存在各种各样的异常,正常流程大概如下:

1. 邮箱开通smtp功能(以126邮箱为例)

在这里插入图片描述

2. 项目pom文件导入依赖

导入以下几个依赖时会报错

Exception in thread "main" java.lang.NoSuchMethodError: com.sun.mail.util.TraceInputStream.<init>(Ljava/io/OutputStream;Lcom/sun/mail/util/MailLogger;)V
		<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>1.5</version>
        </dependency>

        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>javax.mail-api</artifactId>
            <version>1.6.2</version>
        </dependency>

考虑使用spring-boot的起步依赖后改为导入以下依赖,成功不报异常

		<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>1.5</version>
        </dependency>

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

也就是用spring-boot的起步依赖替换activation以及javax.mail-api两个依赖;

3. 编写发送邮件的接口

@Service
public class SendCodeImpl implements SendCode {
    @Autowired
    EmailInfoConfig emailInfoConfig;

    /**
     * @param address 接收邮件的邮箱地址
     * @param code  外部传入的随机生成的验证码
     * @return
     */
    @Override
    public Boolean sendCode(String address, String code) {
        HtmlEmail send = new HtmlEmail();
        try {
            send.setSocketConnectionTimeout(25000);
            send.setHostName("smtp.sina.com");
            send.setCharset("utf-8");
            //第一个参数是发送者的Eamil   第二个参数是发送者昵称
            send.setFrom("xxxxx@sina.com", "zhangsan");
            //第一个参数是发送者的Eamil   第二个参数是开通邮箱smtp功能时获取的授权码
            send.setAuthentication("xxxxx@sina.com", "xxxxxxxxxx");
            // 接收者的邮箱
            send.addTo(address);
            //Eamil的标题
            send.setSubject("xxx给您送上验证码");
            //Eamil的内容
            send.setMsg("欢迎光临,特此送上验证:   " + code + "   请您签收");
            // 邮箱第三方使用的端口
            send.setSmtpPort(25);  // 邮箱第三方使用的端口
            //send.setSSLCheckServerIdentity(true);  // 开启SSL加密
            send.send(); //发送
        } catch (EmailException e) {
            e.printStackTrace();
        }
        
        return new Boolean(true);
    }
}

此处可能会报异常

org.springframework.mail.MailSendException: Failed messages: javax.mail.MessagingException: Exception reading response (java.net.SocketTimeoutException: Read timed out)

经过尝试,qq邮箱与126邮箱都会报该异常,换用以上的sina邮箱后不报异常,遇到该异常时多换用不同邮箱,不一定哪个邮箱就一定有效。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值