解决java mail发送TXT附件被直接显示在正文中的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决java mail发送TXT附件被直接显示在正文中的问题相关的知识,希望对你有一定的参考价值。

这两天遇到一个问题,关于使用java mail发送邮件的问题.

详细是这样子的:我使用java mail发送异常报告邮件,邮件中有一个包含异常日志的附件,和关于设备信息的邮件正文.假设日志为log后缀名,那么在我的qq邮箱中显示正常.可是假设把附件的后缀名改为txt之后,就变成把附件中的内容直接显示在邮件正文中了.而我原来设置的邮件正文则不在了.

我的代码是这样写的:

加入附件:

    public void addAttachment(String filePath, String fileName) throws Exception {
        BodyPart messageBodyPart = new MimeBodyPart();
        ((MimeBodyPart)messageBodyPart).attachFile(filePath);
        multipart.addBodyPart(messageBodyPart);
    }

发送邮件:
 public boolean send() throws MessagingException {
        if (!user.equals("") && !pass.equals("") && !to.equals("") && !from.equals("")) {
            Session session = Session.getDefaultInstance(props, this);
            Log.d("SendUtil", host + "..." + port + ".." + user + "..." + pass);

            MimeMessage msg = new MimeMessage(session);

            msg.setFrom(new InternetAddress(from));

            InternetAddress addressTo = new InternetAddress(to);
            msg.setRecipient(MimeMessage.RecipientType.TO, addressTo);

            msg.setSubject(subject);
            msg.setSentDate(new Date());

            // setup message body
            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText(body);
            
            multipart.addBodyPart(messageBodyPart);

            // Put parts in message
            msg.setContent(multipart);

            // send email
            Transport.send(msg);

            return true;
        } else {
            return false;
        }
    }

后来我试着发给网易邮箱.发现就变成正文是空白的.可是附件却多了一个.第二个附件正是我设置在邮件正文中的内容.

各种百度,谷歌,stackoverflow后均未找到答案.后来我想,用这样的方式发邮件,是不是qq邮箱会把第一个txt附件作为正文显示.于是改动了设置邮件正文的代码例如以下,把正文设为multipart的第一个:

            // setup message body
            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText(body);
            
            multipart.addBodyPart(messageBodyPart, 0);
再发送邮件測试,结果在qq和网易邮件上均显示正常了.

以上是关于解决java mail发送TXT附件被直接显示在正文中的问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 Flask Mail 发送的文本附件是空的?

Java mail发送邮件附件出现.eml文件夹

java发送邮件失败!

Java使用javax.mail.jar发送邮件并同意发送附件

Java Mail 发送带有附件的邮件

使用 Zend_Mail 时添加 PDF 附件