javamail 不能发送附件

smallplum 2009-12-09 04:58:05
我用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("homlly@qq.com", "java测试邮件", "java测试邮件","D:\\test.xml");

这样调就是正常的,但在web程序中传入同样的值,就是乱码,乱码类似如下,而且也没附件了:

------=_Part_20_21345486.1260347889515
Content-Type: text/html; charset=GBK
Content-Transfer-Encoding: base64

v9q+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


...全文
100 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
junkor 2009-12-09
  • 打赏
  • 举报
回复
学习,帮你顶起来……
老张-AI 2009-12-09
  • 打赏
  • 举报
回复
烟雨鹏城 2009-12-09
  • 打赏
  • 举报
回复
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;
}
smallplum 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 frank3g 的回复:]
设置断点看WEB传递参数和你JUnit设置的是否同类
[/Quote]

是同类的,现在我改用apache的email包,都写死的,JUnit测试就成功,web程序里面就不能连到服务器,郁闷了
代码如下:

SimpleEmail email;
try {
email = new SimpleEmail();
email.setHostName("smtp.foxmail.com");
// email.setSmtpPort(465);
email.setCharset("UTF-8");
email.setFrom("homlly@foxmail.com");
email.setAuthentication("homlly","xxxxxxxx");
email.addTo("5017779@qq.com");
email.setSubject("java测试邮件");
email.setMsg("这是一个java测试邮件");
email.send();

logger.debug("邮件件发送成功。。。");
} catch (EmailException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
howsun_zh 2009-12-09
  • 打赏
  • 举报
回复
附近不是给上文件名就可以吧?而应该是一个InputStream流对象才可以发出去。看看这个现成的例子:
http://howsun.blog.sohu.com/129043957.html
healer_kx 2009-12-09
  • 打赏
  • 举报
回复
可能是编码的问题。
一叶扁舟 2009-12-09
  • 打赏
  • 举报
回复
frank3G 2009-12-09
  • 打赏
  • 举报
回复
设置断点看WEB传递参数和你JUnit设置的是否同类

67,541

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧