我用javamail发送还附件的邮件,写好之后,用JUnit测都是正常的,但是web程序运行起来,页面调用之后,发出去的,都是没有附件的乱码邮件。设置附件部分代码         //设置信件的附件
          mdp=new MimeBodyPart();
          FileDataSource fds=new FileDataSource(URI);
          DataHandler dh=new DataHandler(fds);
          mdp.setFileName((MimeUtility.encodeText("javamail本地文件附件.xls", "GBK", "B")));
          mdp.setDataHandler(dh);
          mm.addBodyPart(mdp);
          
          message.setContent(mm);
JUnit测试代码 MailUtil.sendMail("[email protected]", "java测试邮件", "java测试邮件","D:\\test.xml");这样调就是正常的,但在web程序中传入同样的值,就是乱码,乱码类似如下,而且也没附件了:------=_Part_20_21345486.1260347889515
Content-Type: text/html; charset=GBK
Content-Transfer-Encoding: base64v9q+trHkuPzQxc+i
------=_Part_20_21345486.1260347889515
Content-Type: application/octet-stream; name="=?GBK?B?amF2YW1haWyxvrXYzsS8/ri9vP4ueGxz?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment; 
 filename="=?GBK?B?amF2YW1haWyxvrXYzsS8/ri9vP4ueGxz?="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA
EAAABgAAAAEAAAD+////AAAAAAcAAAD/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////9S

解决方案 »

  1.   

    设置断点看WEB传递参数和你JUnit设置的是否同类
      

  2.   

    附近不是给上文件名就可以吧?而应该是一个InputStream流对象才可以发出去。看看这个现成的例子:
    http://howsun.blog.sohu.com/129043957.html
      

  3.   


    是同类的,现在我改用apache的email包,都写死的,JUnit测试就成功,web程序里面就不能连到服务器,郁闷了
    代码如下: SimpleEmail email;
    try {
    email = new SimpleEmail();
    email.setHostName("smtp.foxmail.com");
    // email.setSmtpPort(465);
    email.setCharset("UTF-8");
    email.setFrom("[email protected]");
    email.setAuthentication("homlly","xxxxxxxx");
    email.addTo("[email protected]");
    email.setSubject("java测试邮件");
    email.setMsg("这是一个java测试邮件");
    email.send();

    logger.debug("邮件件发送成功");
    } catch (EmailException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
      

  4.   

    0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA 
    EAAABgAAAAEAAAD+////AAAAAAcAAAD///////////////////////////////////////////// 
    //////////////////////////////////////////////////////////////////////////// 
    //////////////////////////////////////////////////////////////////////////// 
    //////////////////////////////////////////////////////////////////////////// 
    //////////////////////////////////////////////////////////////////////////// 
    //////////////////////////////////////////////////////////////////////////// 
    //////////////////////////////////////////////////////////////////////////// 
    //////////////////////////////////////////////////////////////////////////9S ?
    这些乱码??可以肯定的告诉你不是,这些是被BASE64Decoder 处理过D:\\test.xml的文件内容
    你可以随便找个word,xls文件测试一下BASE64Decoder decoder = new BASE64Decoder(); public String ioToBase64(String strPath) throws IOException {
    String fileName = strPath; // 源文件
    String strBase64 = null;
    try {
    InputStream in = new FileInputStream(fileName);
    // in.available()返回文件的字节长度
    byte[] bytes = new byte[in.available()];
    // 将文件中的内容读入到数组中
    in.read(bytes);
    strBase64 = new BASE64Encoder().encode(bytes); // 将字节流数组转换为字符串
    in.close();
    } catch (FileNotFoundException fe) {
    fe.printStackTrace();
    } catch (IOException ioe) {
    ioe.printStackTrace();
    }
    System.out.println("str:"+strBase64);
    return strBase64;
    }
      

  5.   

    看看我blog的这篇http://blog.csdn.net/zl3450341/archive/2009/11/18/4826053.aspx