关于使用Java Mail发送附件,网上和书上的资料可谓非常多,其思路都是一致的:使用MulitiPart类,似乎是一件很Trival的事情。但是,我多次验证,发现这样发送出去的附件是不能够被常见的email客户端软件(例如FoxMail,OutLook,以及WebMail)所识别的,它总是进入邮件的正文里,很自然,如果不是纯文本,就会显示为乱码!这当然是不允许的啊,如何解决这个问题呢?我查了很久,都没有找到办法。真头疼....
请高手解答,谢谢!

解决方案 »

  1.   

    你说的是哪一部分是乱码?
    附件的文件名吗?你应该用一个辅助类给中文的文件名进行编码才行!mbp.setFileName(MimeUtility.encodeText(fds.getName(), getCharset(),"B")); // 得到文件名同样至入BodyPart 
      

  2.   

    不是啊,与中文英文无关,而是Foxmail收到javamail邮件之后,无法象普通邮件那样把附件识别出来供用户下载。而是把附件内容也放到了邮件正文里。
      

  3.   

    我不太明白你的意思,我是按照网上和书籍上的标准方案建立的,如下:BodyPart messageBodyPart = new MimeBodyPart();
            // Fill the message
            messageBodyPart.setText("Pardon Ideas");
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(messageBodyPart);
           // Part two is attachment
           messageBodyPart = new MimeBodyPart();    
           DataSource source = new FileDataSource("E:/x1.pdf");
           messageBodyPart.setDataHandler(new DataHandler(source));
           messageBodyPart.setFileName("x1.pdf");    
           multipart.addBodyPart(messageBodyPart);
       // Put parts in message
           message.setContent(multipart);
    上述程序发送正常,但是foxmail无法识别附件。
    你所谓的“反射为附件”是需要还增加什么语句吗?
      

  4.   

    “看邮件的源始内容,   看看是不是符合邮件的规定格式!”不太明白啊。邮件正文只是一行文本,而附件是一个pdf文件(我使用文本文件也试过),有什么格式的问题吗?
    我们在使用FoxMail和OutLook发送附件的时候,似乎也没有限定什么附件格式啊,为什么它们可以正常发送,而JavaMail不行呢?