关于java mail中地址中有中文时报地址错误的问题

使用javaMail发邮件时发现一个问题,若是from中含有中文字符,就会报地址错误.

 com.sun.mail.smtp.SMTPSendFailedException: 501 5.1.7 Syntax error in sender address

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1829)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1368)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:886)
    at javax.mail.Transport.send0(Transport.java:191)
    at javax.mail.Transport.send(Transport.java:120)
    at cn.edu.pdsu.service.mail.send.SendMail.sendMail(SendMail.java:200)
    at cn.edu.pdsu.action.user.UserSendMailAction.sendEmail(UserSendMailAction.java:239)
    at cn.edu.pdsu.action.user.UserSendMailAction$$FastClassByCGLIB$$8c38168.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
    at cn.edu.pdsu.utils.LogWriter.doBasicProfiling(LogWriter.java:29)
    at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)

感谢各位解答,我用了一个取巧的方法,就是前台显示的是全部地址,传到后台时进行分割,只处理部分有效信息,如全部地址是"测试"test@163.com.则后
台只处理 test@163.com 这个地址,当查看收件箱时,通过 test@163.com来查询对应的中文名,然后字符串进行拼接,这样就避免了解决中文乱码的问题.

对含有中文的发送地址,使用MimeUtility.decodeTex方法,对其他则把地址从ISO8859_1编码转换成gbk。
参考:javamail常见乱码问题。http://www.wzsky.net/html/Program/jsp/16215.html

将Mail地址进行uriencoding;

需要转码,encoding,decoding