在发送带有附件的邮件中,遇到了附件中文名乱码的问题,现已解决。只谈解决方法,具体原理解析请参考文章底部链接。
主要遇到的问题有两个:
![]()

- 中文乱码
- 中文过长导致乱码(这个一般是在超过60个字符时会出现的)
解决方案:
1.解决第一个的问题是用MimeUtility.encodeText()进行解码
attach.setName(MimeUtility.encodeText(f.getName()));
2.解决第二个问题设置了一个系统属性(该属性最好是在声明对象前设置,不然有可能无效的)
System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
代码示例:
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.HtmlEmail;
import javax.mail.internet.MimeUtility;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
/**
* Class <code>Object</code> is the root of the class hierarchy.
* Every class has <code>Object</code> as a superclass. All objects,
* including arrays, implement the methods of this class.
*
* @author Administrator
* @version 1.0
* @see
* @since JDK1.7
* <p>
* History
* Created by Administrator on 2018/2/2 0002.
*/
public class MailTest {
public static void main(String[] args) throws IOException {
System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
HtmlEmail email = new HtmlEmail();
email.setHostName("邮箱主机");
email.setAuthentication("发送者邮箱","密码");
email.setCharset("UTF-8");
try {
String[] receivers = new String[]{"接收者邮箱1","接收者邮箱2"};
for (String receiver : receivers) {
email.addTo(receiver.trim());
}
email.setFrom("发送者邮箱","234234324234");
email.setSubject("test");
email.setMsg("<html><div style=\"background:red;\">尼玛嗨</div></html>");
List<String> list = new ArrayList<String>();
list.add("C:\\Users\\Administrator\\Downloads\\1111_滴滴出行发单是对方水在发送附件水电费水电费水电费水电费是的防守打法水电费水电费水电费水电费是的防守打法水电费水电费水电费水电费是的在发送附件水电费水电费水电费水电费是的防守打法水电费水电费水电费水电费是的防守打法水电费水电费水电费水电费是的电费水电费sdfsdfs是的s.pdf");
if (!CollectionUtils.isEmpty(list)) {
for (String attachment : list) {
EmailAttachment attach = new EmailAttachment();
File f = new File(attachment);
attach.setName(f.getName());
attach.setURL(new URL("附件链接"));
email.attach(attach);
}
}
String result = email.send();
}catch (Exception e){
e.printStackTrace();
}
}
}
参考链接:
http://blog.csdn.net/wty19/article/details/50607411
http://blog.csdn.net/albert0707/article/details/69284700
http://blog.csdn.net/fl_zxf/article/details/60126910
来源:oschina
链接:https://my.oschina.net/u/2431191/blog/1617426