学习Java时,看廖雪峰大神文章使用了javax.mail
来发送SMTP邮件。在加入中文时,发现收到的邮件里中文都是乱码。
按照一般经验,多半是编码的问题。然而在代码中,会涉及到编码的地方已经全部设置了,如:
1 | BodyPart textPart = new MimeBodyPart(); |
在邮箱界面点击“显示邮件原文”,看到SMTP原始内容中,也确实是UTF-8
编码:
把相同的中文字符放在VS Code里,首先以UTF-8
编辑,然后将其用各种编码重新打开,与邮件的乱码对比,发现收到的邮件实际上仍然是GBK
编码(Windows系统默认编码)。
这就比较奇怪了,在网上找了一通也没有解决问题,转而从别的方面考虑。
最后注意到了用Maven编译时的一个警告:
1 | [WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent! |
原来是使用Maven时没有设置编码,导致生成的字节码中实际上保存的是系统默认的GBK
编码。这样即使是邮件头中设置了UFT-8
编码也无济于事。
解决方法是在pom.xml
的<properties>
字段添加<project.build.sourceEncoding>
指定UTF-8
编码:
1 | <properties> |
总结:编程时需要严谨,WARNING
的信息有时也很重要。