【问题标题】:java email attachment being sent as plain text in bodyjava电子邮件附件在正文中作为纯文本发送
【发布时间】:2015-11-12 22:07:22
【问题描述】:

我在使用 java 邮件 (1.4.6) 在 java 中通过电子邮件发送附件时遇到问题。似乎当我附加任何类型的文档并发送它时,收件人会在正文中以纯文本格式获取文件。而不是,你猜对了,像你期望的那样发送整个文件并且正文不会受到干扰。

代码

    try 
    {

        // Create a message
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(username));
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(Compose.to));
        message.setSubject(Compose.subject);
        //message.setText(Compose.body);
        //If there are no CC's then skip it. This if seemed to decrease send time.
        if(Compose.cc != null)
        {
            message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(Compose.cc));
            message.saveChanges();
        }
        else
            message.saveChanges();

        /*
         * For adding the attached file to the email. This time the if
         * statement is used to stop the email attachment process if there
         * is none. Other wise due to the way I've set it up it'll try to
         * send file path and file name as null, and we fail an otherwise valid email.
         */

        if(Compose.filename != null)
        {
            String file = Compose.filepath;
            String fileName = Compose.filename;

            Multipart multipart = new MimeMultipart();
            BodyPart messageBodyPart = new MimeBodyPart();
            DataSource source = new FileDataSource(file);
            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName(fileName);
            multipart.addBodyPart(messageBodyPart);

            BodyPart messageBodyPart2 = new MimeBodyPart();
            messageBodyPart2.setText(Compose.body);
            multipart.addBodyPart(messageBodyPart2);

            message.setContent(multipart);
        }
        else
        {
            message.setText(Compose.body);
            message.saveChanges();
        }

        //Send the message by javax.mail.Transport .            
        Transport tr = session.getTransport("smtp");            // Get Transport object from session        
        tr.connect(smtphost, username, password);               // We need to connect
        tr.sendMessage(message, message.getAllRecipients());    // Send message

        //Notify the user everything functioned fine.
        JOptionPane.showMessageDialog(null, "Your mail has been sent.");

    } 

考虑到这一点,我想起了FileDataSource() 是如何将字符串或文件类型作为参数的重载语句,尝试两者我得到了相同的结果,但我现在将对文件类型进行更多试验。

编辑:经过更多测试后,我注意到有时文件不会与发送时正文中的任何内容一起出现。

【问题讨论】:

    标签: java email jakarta-mail


    【解决方案1】:

    对于每个部分,您必须将 set dispositionPart.INLINE 用于正文,Part.ATTACHMENT 用于附件。 attachFile 方法将为您执行此操作。避免使用 JavaMail 1.4.6 以支持最新版本,或者至少使用 JavaMail 1.4.7,其中包含对 JavaMail 1.4.6 已知问题的修复。

    【讨论】:

      【解决方案2】:

      您将附件设置为第一个正文部分。它必须是第二个身体部位。

      另外,考虑升级到JavaMail 1.5.4 并使用MimeBodyPart.attachFile 方法附加文件。

      【讨论】:

        猜你喜欢
        • 2013-07-26
        • 1970-01-01
        • 2016-04-18
        • 1970-01-01
        • 2023-01-18
        • 2021-02-04
        • 2017-04-23
        • 1970-01-01
        • 2012-06-14
        相关资源
        最近更新 更多