Could not connect to SMTP host: smtp.qiye.aliyun.com, port: 465

邮箱 java javamail 文章 2023-01-17 13:30 3947 0 全屏看文

AI助手支持GPT4.0

今天公司企业邮箱改成阿里云的了,导致程序报错。

后来在把公司的邮局地址改为 smtp换成 smtp.qiye.aliyun.com之后。

程序爆出如下错误:

Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.qiye.aliyun.com, port: 465, response: -1
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1270)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
	at javax.mail.Service.connect(Service.java:275)

但是通过【三叔工具箱】的发邮件功能测试,发现配置没问题。

image.png

收到的邮件:

image.png

唯一的区别就是,以前走的25端口,现在改为了465端口。

从邮件测试得知,阿里邮局地址、端口、邮箱登录账号密码都没错。

此时唯一有问题的,就是我们的代码javamail没有走ssl协议。

于是在追加:

props.put("mail.smtp.starttls.enable", true);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.ssl.trust", smtpServer);

后错误变了:

Caused by: com.sun.mail.smtp.SMTPSendFailedException: 440 mail from account doesn't conform with authentication (Auth Account:BarCodeSupport@goodbabygroup.com|Mail Account:BarCodeSupport@qiye.aliyun.com)

	at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
	at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)

这个是因为发邮件的和发件人必须是同一个(以前这个漏洞,可以伪造任何发件人)

于是我又追加了:

props.put("mail.smtp.user", userName);
props.put("mail.smtp.from", userName);

代码变成:

props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
props.put("mail.smtp.auth", "true"); //指定是否需要SMTP验证 
props.put("mail.debug", "false");
props.put("mail.smtp.starttls.enable", true);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.ssl.trust", smtpServer);
props.put("mail.smtp.user", userName);
props.put("mail.smtp.from", userName);

ma = new MailAuthenticator(userName, password);

终于发成功了

image.png

-EOF-

AI助手支持GPT4.0