java邮件附件名字乱码_使用JavaMail发送的中文附件内容乱码

在使用javamail发送中文附件内容的时候,附件会乱码(不是附件名乱码);代码如下:

public MimeMessage createFileAttachedMail(Session session, String fromAdd, String toAdd, String subject, String content, String fileObjectId, String fileSavePath) throws Exception {

MimeMessage message = new MimeMessage(session);

message.setFrom(new InternetAddress(fromAdd));

message.setRecipient(Message.RecipientType.TO, new InternetAddress(toAdd));

message.setSubject(subject);

// 邮件正文

MimeBodyPart text = new MimeBodyPart();

text.setContent(content, MAIL_CONTENT_FORMAT_CHARSET);

// 附件

MimeBodyPart attach = new MimeBodyPart();

DataHandler handler = new DataHandler(new FileDataSource(this.gridFSService.readFiles(fileObjectId)));

attach.setDataHandler(handler);

// 解决中文附件名乱码问题

attach.setFileName(MimeUtility.encodeText(handler.getName()).replaceAll("\r", "").replaceAll("\n", ""));

// 创建容器描述数据关系

MimeMultipart mp = new MimeMultipart();

mp.addBodyPart(text);

mp.addBodyPart(attach);

mp.setSubType("mixed");

message.setContent(mp);

message.saveChanges();

//将创建的email写入到本地存储

//message.writeTo(new FileOutputStream(fileSavePath));

return message;

}

public File readFiles(String fileObjectId) {

DB db = mongoOperations.getCollection(mongoOperations.getCollectionName(TextBook.class)).getDB();

// query file saved in gridfs

// by file name

//GridFSDBFile gfsFile = new GridFS(db, "fs").findOne("application.properties");

// by objectId

GridFSDBFile gfsFile = new GridFS(db,"fs").findOne(new ObjectId(fileObjectId));

try {

File preparedAttachedFile = new File(gfsFile.getFilename());

gfsFile.writeTo(preparedAttachedFile);

return preparedAttachedFile;

} catch (IOException e) {

e.printStackTrace();

return null;

}

}

在readFile()方法中,

gfsFile.writeTo(preparedAttachedFile);

输出的文件内容并没有乱码;应该是createFileAttachedMail()方法的:

DataHandler handler = new DataHandler(new FileDataSource(this.gridFSService.readFiles(fileObjectId)));

这一句导致的乱码问题吧。是不是应该设置handler的mime类型?请问应该怎么解决呢?

谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值