commons-email && Java mail 邮件发送 附件文件名过长的问题 版本1.5及以上

http://blog.csdn.net/albert0707/article/details/69284700


在使用javamail 1.5版本的时候,如果附件文件名过长,会错误显示为“未命名的附件 00439.dat”

解决方案如下:


一、Javamail jar包退回1.4版本


二、修改参数mail.mime.splitlongparameters为 false


1、添加以下红色代码

messageBodyPart.setFileName(MimeUtility.encodeText(docName));


2、

在new MimeMessage、new MimeMultipart、new MimeBodyPart 之前(一个比较靠前的位置,如果在new MimeMultipart之后添加,有可能无效),添加如下红色代码。

修改完成后记得重启Tomcat

System.getProperties().setProperty("mail.mime.splitlongparameters", "false");



Properties props = new Properties();

[java]  view plain  copy
  1.         try {  
  2.             props.put("mail.smtp.host", host);  
  3.             props.put("mail.smtp.auth""true");  
  4.             props.put("username", from);  
  5.             props.put("password", pwd);  
  6.               
  7. //          System.getProperties().setProperty("mail.mime.encodefilename", "true");  
  8. //          System.getProperties().setProperty("mail.mime.decodefilename", "true");  
  9. //          System.getProperties().setProperty("mail.mime.encodeparameters", "false");  
  10. //          System.getProperties().setProperty("mail.mime.decodeparameters", "false");  
  11.   
  12.   
  13.             System.getProperties().setProperty("mail.mime.splitlongparameters""false");  
  14.               
  15.               
  16.             MailAuthenticatorService auth = new MailAuthenticatorService(from,  
  17.                     pwd);  
  18.             Session session = Session.getInstance(props, auth);  
  19.             session.setDebug(true);  
  20. //          session.setDebug(false);  
  21.             Transport transport = null;  
  22.             MimeMessage message = new MimeMessage(session);  
  23.             message.setFrom(new InternetAddress(from));  
  24.             transport = session.getTransport("smtp");  
  25.             InternetAddress[] addresses = new InternetAddress[receiver.size()];  
  26.             for (int i = 0; i < receiver.size(); i++) {  
  27.                 addresses[i] = new InternetAddress(receiver.get(i)  
  28.                         .getMailAddress());  
  29.                 logger.debug("==>receiver mail address: "  
  30.                         + receiver.get(i).getMailAddress());  
  31.             }  
  32.             message.setRecipients(Message.RecipientType.TO, addresses);  
  33.             message.setSubject(theme);  
  34.             Multipart multipart = new MimeMultipart();  
  35.             BodyPart contentPart = new MimeBodyPart();  
  36.             contentPart.setText(content);  
  37.             multipart.addBodyPart(contentPart);  
  38.             BodyPart messageBodyPart = new MimeBodyPart();  
  39.             DataSource source = new FileDataSource(attachFilePath);  
  40.             messageBodyPart.setDataHandler(new DataHandler(source));  
  41.             docName = "中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文中文.doc";  
  42. //          docName = "asdfghjklpasdfghjklpasdfghjklpasdfghjklpasdfghjklpasdfghjklpasdfghjklpasdfghjklpasdfghjklpasdfghjklpasdfghjklp.doc";  
  43. //          docName = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.doc";  
  44.            
  45. //          messageBodyPart.setFileName(docName);  
  46.             messageBodyPart.setFileName(MimeUtility.encodeText(docName));  
  47.    
  48.               
  49.               
  50.             multipart.addBodyPart(messageBodyPart);  
  51.             message.setContent(multipart);  
  52.             message.saveChanges();  
  53.             transport.connect(host, user, pwd);  
  54.             transport.sendMessage(message, message.getAllRecipients());  
  55.             transport.close();  
  56.             logger.debug("email send finish");  
  57.           
  58.         } catch (Exception e) {  
  59.             e.printStackTrace();  
  60.             logger.error(e.getMessage());  
  61.             logger.error("email send error");  
  62.         }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值