把附件中文句称进行 base64 编码一下吧。

解决方案 »

  1.   

    标准JAVA中文编码的问题……
    象下面这样处理一下就OK了……
    String fileName = new String("设计".getBytes("GBK"),"ISO-8859-1");
    messageBodyPart.setFileName(fileName);
      

  2.   

    ender:
    不行,按你这种方法的话,系统会找不到这个文件,因为文件名已经变成了????了.Kiddy:
    按base64如何编码呢?
      

  3.   

    如果在设置文件名字之前就按base64编码的话,会有同样的问题:找不到文件.
    什么时候进行编码呢?
      

  4.   

    在Javamail包中又一个类叫MimeUtility,其中有对字符集进行编码和解码函数,可以用其中的decodeText和encodeText解决这个问题。另外在Sun的javamail的讨论组中有这方面问题的解决办法
      

  5.   

    不管字串在 class 里是以什么形式存放,一味 getBytes("GBK"),是产生 java 中文问题的根源,如果编译时是以 iso8859-1 的话,结果肯定是错的,据我所知,有一些 java 编译器就是以 iso8859-1 这种方式编译的。to simontang(oscar)
    你是发还是收?
      

  6.   

    解决了,只要在设置附件的名称之前编码一次就行了.
    代码如下:
    String filename="测试.pdf";
    MimeBodyPart b2 = new MimeBodyPart();
    FileDataSource fds = new FileDataSource(filename);
    b2.setDataHandler(new DataHandler(fds));
    b2.setFileName(new String(fds.getName().getBytes("gb2312"),"iso8859-1"));对于中英文混合的情况也可同样解决.谢谢各位了.
      

  7.   

    :)
    你先把附件贴上了再写文件名啊……
    给你个例子,看了就知道了……
    package test;import java.util.Properties;
    import javax.mail.*;
    import javax.mail.internet.*;
    import javax.activation.*;public class AttachExample
    {
        public static void main (String[] args) throws Exception
        {
            String host = "smtp.XXX.com";
            String from = "[email protected]";
            String to = "[email protected]";
            String fileAttachment = "E:\\附件.txt";        // Get system properties
            Properties props = System.getProperties();        // Setup mail server
            props.put("mail.smtp.host", host);        // Get session
            Session session = Session.getInstance(props, null);        // Define message
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
            message.setSubject("JavaMail带附件邮件示例!");        // create the message part
            MimeBodyPart messageBodyPart = new MimeBodyPart();        //fill message
            messageBodyPart.setText("Hi");        Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(messageBodyPart);        // Part two is attachment
            messageBodyPart = new MimeBodyPart();
            DataSource source = new FileDataSource(fileAttachment);
            messageBodyPart.setDataHandler(new DataHandler(source));
            String fileName = new String(fileAttachment.getBytes("GBK"),"ISO-8859-1");
            int pos = fileName.lastIndexOf("\\");
            fileName = fileName.substring(pos + 1);
            messageBodyPart.setFileName(fileName);
            multipart.addBodyPart(messageBodyPart);        // Put parts in message
            message.setContent(multipart);        // Send the message
            Transport.send( message );
        }
    }
      

  8.   

    kiddy:
    我是发邮件的时候加上附件的时候碰上这问题的,另我是在JBuilder 5下开发的.
      

  9.   

    ender:
    事实上你的解决方法和我的原理是完全一样的.其实早应该想到这一点了.没有仔细看代码.
      

  10.   

    ender:
    呵呵,留个QQ号如何? 最近我一直在用javamail写邮件的收发程序,还有很多问题呢.
    一块讨论一下吧.
    我的QQ号是68546293
      

  11.   

    :)
    我不怎么上QQ的……
    我也没怎么用JAVAMAIL,这段CODE也是从CSDN的文档中心抄来的,当时找这方面的资料,在文档中心找到这篇文章,用了一下发现附件的中文名不正常,就试着改了一下……今天看到你在问这个问题就顺手贴上来了……见笑……