首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Outlook中的Javax邮件无标题附件

Outlook中的Javax邮件无标题附件
EN

Stack Overflow用户
提问于 2016-11-16 16:04:59
回答 1查看 1.3K关注 0票数 0

我尝试制作一个.docx邮件发送应用程序,但是当我添加一个java附件时,Outlook显示:"Untitled xxxx.docx“我的代码:

代码语言:javascript
复制
MimeMessage message = new MimeMessage(session); // Message
message.setHeader("Content-Type", "text/html; charset=UTF-8");
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, address);
message.setSubject(subject, "UTF-8");
Multipart multipart = new MimeMultipart(); // body
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(body, "text/html; charset=utf-8"); //html body text
multipart.addBodyPart(messageBodyPart); // body add html text
if(file != null) {
    for (File f : file) {
        MimeBodyPart attachPart = new MimeBodyPart();
        attachPart.attachFile(f.getAbsolutePath(), MimeTypeUtils.getContentTypeByFileName(f.getName()), "base64");
//                attachPart.setFileName(f.getName());
        multipart.addBodyPart(attachPart); // body add attachment
    }
}
message.setContent(multipart); // message add body content
Transport.send(message);

只有一小部分.docx文件有问题,但这很烦人。有人能帮我吗?和"getContentTypeByFileName":

代码语言:javascript
复制
public class MimeTypeUtils {
    private static final Map<String, String> fileExtensionMap;
    static {
        fileExtensionMap = new HashMap<>();
        fileExtensionMap.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
    }
    public static String getContentTypeByFileName(String fileName) {
        FileNameMap mimeTypes = URLConnection.getFileNameMap();
        String contentType = "";
        contentType = mimeTypes.getContentTypeFor(fileName);
        if (contentType == null || contentType.isEmpty()) {
            String extension = FilenameUtils.getExtension(fileName);
            contentType = fileExtensionMap.get(extension);
        }
        return contentType;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-17 04:12:49

我在封装MimeMesage时遇到了一个问题。我以前的解决方案是:

代码语言:javascript
复制
MimeMessage { // the whole message
    Multipart{
        BodyPart // here is the body
        MimeBodyPart //this is the attachment
    }
}

但正确的方法是:

代码语言:javascript
复制
MimeMessage {
    Multipart {
        MimeBodyPart {
            MimeBodyPart // plain text of body
            MimeBodyPart // html text of body
        }
        MimeBodyPart // attachment
        MimeBodyPart // attachment2 ...
    }
}

代码示例:

代码语言:javascript
复制
MimeMessage message = new MimeMessage(session);
message.addHeader("Content-Type", "multipart/mixed; charset=UTF-8");

Multipart multipart = new MimeMultipart("alternative");

MimeBodyPart messageBodyPartPlain = new MimeBodyPart();
messageBodyPartPlain.setContent("Plain body text", "text/plain; charset=utf-8");
multipart.addBodyPart(messageBodyPartPlain);

MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent("Html body text", "text/html; charset=utf-8");
multipart.addBodyPart(messageBodyPart);

MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(multipart);

Multipart mp2 = new MimeMultipart("mixed");
mp2.addBodyPart(mbp);

for (Attachment a : attachments) {
    if (a != null && a.getFile() != null) {
        MimeBodyPart mbp2 = new MimeBodyPart();
        FileDataSource fds = new FileDataSource(a.getFile()) {
            public String getContentType() {
                return MimeTypeUtils.getContentTypeByFileName(a.getName());
            }
        };
        mbp2.setDataHandler(new DataHandler(fds));
        mbp2.setFileName(a.getName());
        mp2.addBodyPart(mbp2);
    }
}

message.setContent(mp2);

在此更改之后,一切都会正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40626870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档