在使用ñ字符时,我遇到了解析方法的问题:
essage.setRecipients(Message.RecipientType.TO, internetAddress.parse("somedir.withñchar@m ailserver.com",false));
Run Code Online (Sandbox Code Playgroud)
我为strict参数传递false,但总是得到错误:
javax.mail.internet.AddressException: Local address contains control or whitespace in string ``somedir.with±har@mailserver.com''
at Mailer.main(Mailer.java:386)
Caused by: javax.mail.internet.AddressException: Local address contains control
or whitespace in string ``somedir.with±har@mailserver.com''
at javax.mail.internet.InternetAddress.checkAddress(InternetAddress.java
:1155)
at javax.mail.internet.InternetAddress.parse(InternetAddress.java:1044)
at javax.mail.internet.InternetAddress.parse(InternetAddress.java:575)
at Mailer.main(Mailer.java:377)
Run Code Online (Sandbox Code Playgroud)
如果您仍然遇到此问题,我建议您像我一样在您不寻常的电子邮件地址中添加双引号.它对我有用,因为InternetAddress的checkAddress方法放弃验证引用的地址.这是简单快捷的解决方案.
例:
unusual_email_without_at_sign_or_with_accentuátion (won't work)
"unusual_email_without_at_sign_or_with_accentuátion" (it works!)
Run Code Online (Sandbox Code Playgroud)
完美而正确的解决方案是Java团队修复InternetAddress类的错误,即使在构造函数中接收"strict = false",它也会检查电子邮件语法.
错误示例:
InternetAddress i = new InternetAddress("unusual_email_without_at_sign_or_with_accentuátion ", false)
Run Code Online (Sandbox Code Playgroud)
变通方案解决方案的示例:
InternetAddress i = new InternetAddress("\"unusual_email_without_at_sign_or_with_accentuátion\"", false)
Run Code Online (Sandbox Code Playgroud)
创建扩展Address的新类的方法将不起作用,因为Transport.send()由于某种原因似乎再次验证地址并且异常也被启动.
请告诉我们是否有帮助!
Mar*_*ens -1
创建一个新类,扩展它并覆盖验证函数。但是我不明白你为什么想要那个。
public class invalidInternetAddress extends internetAddress {
@Override
private static void checkAddress() throws AddressException {
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12429 次 |
| 最近记录: |