JavaMail 发送 BitSarver 文件而不是 pdf 文件

Posted

技术标签:

【中文标题】JavaMail 发送 BitSarver 文件而不是 pdf 文件【英文标题】:JavaMail sent BitSarver file and not a pdf file 【发布时间】:2016-10-23 12:13:20 【问题描述】:

我创建了一种使用带有多个文件附件的 java GUI 发送邮件的方法。当该方法发送邮件时,它会将附件文件类型(如 microsoft office 和 pdf)作为 BitSarver 发送到接收邮件。我需要按类型发送文件,以便其他自动系统可以通过读取附件文件并打印它来工作。

这就是方法。

    static public boolean sendMail(String to,String subject,String text_filed)

    Properties props = new Properties();
    props.put("mail.smtp.host","smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port ","465");
    props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth","true");
    props.put("mail.smtp.port","465");
    Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator()
                protected PasswordAuthentication getPasswordAuthentication()
                
                    return new PasswordAuthentication("eamil", pass);
                
            
    );
    try 
    
        Message m = new MimeMessage(session);
        m.setFrom(new InternetAddress(userMAil));

        System.out.println("from "+userMAil);

        m.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));

        System.out.println("to "+to);

        m.setSubject(subject);

        System.out.println("the subject "+subject);

        MimeBodyPart bodypart = new MimeBodyPart();
        bodypart.setText(text_filed);
        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(bodypart);

        System.out.println("the content "+text_filed);
        for(int i = 0;i< main_controller.attachments_path.size();i++)
           
            bodypart = new MimeBodyPart();
            DataSource source = new FileDataSource(main_controller.attachments_path.get(i));
            System.out.println("the file location"+main_controller.attachments_path.get(i));
            bodypart.setDataHandler(new DataHandler(source));
            //bodypart.setFileName(main_controller.filesFrame.getFilename());

            System.out.println("the file name"+main_controller.filesFrame.getFilename());
            multipart.addBodyPart(bodypart);
        


        m.setContent(multipart);
        //m.setText(text_filed);

        Transport.send(m);

        JOptionPane.showMessageDialog(null, "done!");
        return true;
    
    catch(Exception e)
    
        String m = e.getMessage();
        JOptionPane.showMessageDialog(null, e);
        System.out.println(m);
        return false;
    

希望你能帮助我:D

【问题讨论】:

【参考方案1】:

似乎问题可能与此有关:

How to set MimeBodyPart ContentType to "text/html"?

尝试在提交之前调用 MimeMessage.saveChanges() 以从 DataHandlers 中正确填充内容类型。

【讨论】:

我试过了,但我仍然得到相同的结果m.saveChanges(); m.setContent(multipart); Transport.send(m);【参考方案2】:

JavaMail 通过 JavaBeans Activation Framework (JAF) 根据文件扩展名选择 MIME 类型。 “已知”文件扩展名列表相对较小。您可以按照MimetypesFileTypeMap javadocs 中的说明添加它。或者,您可以使用MimeBodyPart.attachFile 方法并直接指定MIME 类型。

哦,你会想要清理这些common JavaMail mistakes。

【讨论】:

我不太明白你的意思我会把文件附加到电子邮件中,可以更具体一点。 您阅读了我提供的所有链接,对吗?哪一部分让你感到困惑?

以上是关于JavaMail 发送 BitSarver 文件而不是 pdf 文件的主要内容,如果未能解决你的问题,请参考以下文章

Spring集成JavaMail并利用线程池发送邮件

javamail: UrlDataSource获取网络文件作为邮件的附件|javamail发送二进制流附件的问题

使用Javamail发送电子邮件

在Outlook的已发送文件夹中找不到使用javamail发送的邮件

无法使用 JavaMail 读取 Outlook 邮件,而 Gmail 可以工作

基于JavaMail的Java邮件发送:简单邮件发送