java电子邮件附件在正文中以纯文本形式发送

标签 java email jakarta-mail

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

代码

    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() 是一个以字符串或文件类型作为参数的重载语句,尝试两者我得到了相同的结果,但我会对该文件进行更多实验现在输入。

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

最佳答案

对于每个部分,您必须 set dispositionPart.INLINE对于 body 和Part.ATTACHMENT为附件。 AttachFile 方法将为您完成此操作。避免使用 JavaMail 1.4.6,而使用最新版本,或者至少使用 JavaMail 1.4.7,其中包含 JavaMail 1.4.6 已知问题的修复程序。

关于java电子邮件附件在正文中以纯文本形式发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33682352/

相关文章:

java - 几乎循环类型绑定(bind)的递归类型参数

java - 对于具有可重用内容/行为的 Web 应用程序,哪个 Java Web 框架是一个不错的选择?

email - 在 ElasticSearch 上提取电子邮件附件

java - 似乎 JavaMail 的 MimeBodyPart.setFileName 在电子邮件中插入换行符并导致文件名显示为无效

JavaMail API : NullPointerException When Accessing Outlook

java - 框架/库/api的许可模型

java - 特拉维斯 CI : Error: JAVA_HOME is not defined correctly

c# - 来自 MemoryStream 的电子邮件附件为空

php - 电子邮件 SMTP 问题 - 错误 :The following From address failed:

java - 解析 .p7m 文件时缺少附件