求救:javamail WebService上调用出现邮件内容(QP编码)没有被解码

sniperwang 2010-06-23 10:18:14
问题是这样的:
我这里有个javamail发送邮件的类,在类中直接运行main方法,是可以发送出去并且在邮箱接收到的邮件显示正常。但是我用webservice的一个方法去调用这个类中的send方法时,发送出去的邮件却显示QP编码之后的内容,我现在怀疑是不是和环境的原因,发布到tomcat上去之后,和那个jar包或者其他某个方面有冲突?
哪位高人帮忙解答一下 谢谢了先。


public class EmaiSender {
private static final String defaultSMTPHost = "smtp.sohu.com";
private static final String defaultMailFromName = "aaa@sohu.com";
private static final String defaultMailFromPassword = "123";

public static int send(String mailTos, String mailSubject, String mailText) {
//check params
if (mailTos == null || mailSubject == null || mailText == null) return 0;

//encoding params
String encoding = "iso-8859-1";
try {
//正文编码
mailText = new String(mailText.getBytes(), encoding);
} catch (UnsupportedEncodingException e) {
System.out.println("Fail to encoding mail text to " + encoding);
}

Properties props = new Properties();
props.put("mail.smtp.host", defaultSMTPHost);//邮件服务器地址
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.user", "CTOPAY");//发送方的发送名;
props.put("mail.smtp.from", defaultMailFromName);//发送邮箱地址;
props.put("mail.debug", "false");//不打印构建发送者信息

//构建发送者
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(defaultMailFromName, defaultMailFromPassword);
}
};

Session session = Session.getInstance(props, auth);
session.setDebug(false);//不打印发送信息

Message msg = new MimeMessage(session);
int sendNum = 0;//发送的数量

for (String mailTo : mailTos.split(",")) {
try {
InternetAddress[] addresses = {new InternetAddress(mailTo)};
msg.setRecipients(Message.RecipientType.TO, addresses);//设置邮件接收地址集
msg.setSentDate(new java.util.Date());//设置邮件发送日期
msg.setSubject(mailSubject);// 设置邮件的标题
// msg.setText(mailText);// 设置邮件的内容(文本)
msg.setContent(mailText, "text/html");// 设置邮件的内容
Transport.send(msg);//发送邮件

sendNum++;//发送记数
System.out.println(mailText);
System.out.println("Success to send email to " + mailTo);
} catch (MessagingException e) {
System.out.println("Fail to send email for:" + e);
}
}
return sendNum;
}

public static void main(String[] args) {
String to = "test@qq.com";
String subject = "测试";
String text = "<table align=center width=100%><tr><td align=left>" +
"王,你好<br>    数据缺失,请核查!" +
"</td></tr></table>";
int i = send(to, subject, text);
System.out.println("i = " + i);

}
}
//下面这个方法去调用send方法:
public void taskCheck(){
String to = "test@qq.com";
String subject = "测试";
String text = "<table align=center width=100%><tr><td align=left>" +
"王,你好<br>    数据缺失,请核查!" +
"</td></tr></table>";
int i = EmailSender.send(to, subject, text);
System.out.println("i = " + i); if(true)
return;
}


邮箱中接收到的内容:
<table align=3Dcenter width=3D100%><tr><td align=3Dleft>=CD=F5=A3=AC=C4=E3=
=BA=C3<br>    =CA=FD=BE=DD=C8=B1=CA=A7=A3=AC=C7=EB=BA=CB=
=B2=E9=A3=A1</td></tr></table>


...全文
217 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sniperwang 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cagersniper 的回复:]
你看看你项目中lib中有一个geronimo-javamail_1.4_spec-1.6.jar包,以前遇到过这种情况 祝顺利!
[/Quote]
就是这个原因,呵呵~~终于可以结贴了!
昨天回复了三次 结不了帖子。
cagersniper 2010-06-29
  • 打赏
  • 举报
回复
你看看你项目中lib中有一个geronimo-javamail_1.4_spec-1.6.jar包,以前遇到过这种情况 祝顺利!
sniperwang 2010-06-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ivorytower 的回复:]
QP编码适用于非ASCII码的文字内容,仅将8位的数据转成7位。没转成功,估计也是哪里对编码做了修改了。
[/Quote]
恩,确实,有个地方和javamail.jar包冲突了!
sniperwang 2010-06-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 foxdave 的回复:]
编码格式问题,找一下代码里哪里用到了编码格式,尝试使用不同的编码格式
[/Quote]
编码格式可是试了个遍,GBK、GB2312、UTF-8等等,都进行了测试
sniperwang 2010-06-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 enet_java 的回复:]
试试设置一下邮件客户端的格式,显示为html,看看可以不?
[/Quote]
这个都设置了,不管用,问题的原因不在这
小湘eeeee 2010-06-25
  • 打赏
  • 举报
回复
关注中.顺面讨点分
Justin-Liu 2010-06-25
  • 打赏
  • 举报
回复
编码格式问题,找一下代码里哪里用到了编码格式,尝试使用不同的编码格式
enet_java 2010-06-25
  • 打赏
  • 举报
回复
试试设置一下邮件客户端的格式,显示为html,看看可以不?
sniperwang 2010-06-25
  • 打赏
  • 举报
回复
也没有一个人回复? 自己顶一下
  • 打赏
  • 举报
回复
QP编码适用于非ASCII码的文字内容,仅将8位的数据转成7位。没转成功,估计也是哪里对编码做了修改了。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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