一个中文害我加了两天班
前几天有股东找我,说项目已经启动了,按着文档去操作但收不到邮件啊。
我一想,这肯定是邮件的配置有问题吧,是不是pass(授权码)
没有配置正确啊,这绝大部分刚开始对接邮件都是这个问题(我的代码是不可能背锅的)。
为了保险起来,我说看下日志吧。然后他给我发了个截图:
截图肯定看不了啊,我让他把文字复制在微信给我,但是我一对比,图片和文字是对不上的,文字是少了日志的(估计是微信截断了)
有了日志文件以后,我很轻易地发现,是这条消息被去重了。(语雀文档已经写了这种情况了,估计他也没细看)
后来去掉去重的逻辑了以后,还是报错了,但这个问题也好查,一看就知道是附件的链接没填对:
把附件的链接去掉了以后,还是报错了,遇到了个新问题,这问题是我从来没有见过的;我发现我用他的模板去发送消息是正常的,那很明确就是环境的问题了。
ERROR c.java3y.austin.handler.handler.impl.EmailHandler - EmailHandler#handler fail!cn.hutool.extra.mail.MailException: MessagingException: 502 Invalid input from 125.22.222.22 to newxmesmtplogicsvrszb6-0.qq.com
at cn.hutool.extra.mail.Mail.send(Mail.java:393)
at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:416)
at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:194)
at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:176)
at com.java3y.austin.handler.handler.impl.EmailHandler.handler(EmailHandler.java:60)
at com.java3y.austin.handler.handler.BaseHandler.doHandler(BaseHandler.java:61)
at com.java3y.austin.handler.pending.Task.run(Task.java:66)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: javax.mail.MessagingException: 502 Invalid input from 125.22.222.22 to newxmesmtplogicsvrszb6-0.qq.co
而环境的问题我归纳几点:
1、首先怀疑是网络问题,是不是开了VPN,是不是网不通
2、接着怀疑是不是动了我代码,没理由相同的代码会有不一致的结果。
这问题在这就僵住了,他说不是网络的问题,也没有动我的代码,那还能是什么问题呢?那只能远程看看了(但我对这没有信心,对着报错查了半天都没有啥思路,感觉网上说的都不对)
后来层层debug进去,发现是connect失败了,而connect会依赖EHLO命令的返回(该命令主要用于客户端与SMTP服务器通信),该命令返回了502,正常应该是250的。
我又对比了下我的环境debug进去,看看有什么异同点:
发现差别就在于,他的hostname是中文。
后来,我去细查了一下,EHLO
命令确实会对domain
有限制。https://datatracker.ietf.org/doc/html/rfc5321#section-4.1.1.1
这个问题又让我回想起初学编程,尘封多年的记忆了:
1、当年学编程的时候还提倡不用IDE,要记事本手写美言美语是提高编程能力,一些语法的错误(可能是符号的问题;,)在记事本压根看不出来,然后查个大半天。
2、以前不习惯用英文,一些目录或者配置可能都按照习惯用中文或者一些特殊字符,自然就会出现奇奇怪怪的问题(查个半天)
3、各种编码问题(ISO8859-1转GKB,GKB转UTF-8,数据库的编码...)
这些问题都不复杂,但是很折腾人,也很搞人心态。但其实很多是可以自己尽量避免:变量/目录/配置简单(避免关键字/中文/特殊字符)会在隐形间给你省很多事。
遵守规则,大道至简。
------------------
还是有很多同学不懂得正确提问,怀着不正确的提问姿势,进入职场迟早是要吃亏的。
我始终认为提问这种事,是要将心比心的,在提问之前,把自己代入到回答者中,尝试以“回答者”的角度看待自己的问题,能不能让人看明白 。
在我的浏览器收藏夹里一直有个仓库我都保留着,大概在我大学的时候就存着了。一方面是希望自己的提问是「有效」的,一方面如果遇上那种「不懂提问」的人,我就直接给他链接先看看。
这个仓库的名称叫做:How-To-Ask-Questions-The-Smart-Way
https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md
推荐项目 如果想学Java项目的,我还是 强烈推荐 我的开源项目 消息推送平台Austin(8K stars) ,可以用作 毕业设计 ,可以用作 校招 ,可以看看 生产环境是怎么推送消息 的。
仓库地址(可点击阅读原文跳转):https://gitee.com/zhongfucheng/austin
我开通了 股东服务 内容,感兴趣可以点击下方看看,主要针对的是项目哟