javamail发邮件内容乱码

showerXP 2004-01-12 04:11:37
javamail法送邮件时,主题是中文没有问题,但是内容是中文则收到的就是??。怎么办?getBytes()方法我用了n遍感觉不是这里的问题。
...全文
600 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jokerjava 2004-01-13
  • 打赏
  • 举报
回复
package com.kenfor.tradenet.MailSystem1;

import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.util.*;
/**
*
* <p>Title:肖力菡 </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author 肖力菡
* @version 1.0
*/
class Email_Autherticatorbean
extends Authenticator {
private String m_username = null;
private String m_userpass = null;
/**
* 设置认证用户名
* @param username
*/
public void setUsername(String username) {
m_username = username;
}

public void setUserpass(String userpass) {
m_userpass = userpass;
}

public Email_Autherticatorbean(String username, String userpass) {
super();
setUsername(username);
setUserpass(userpass);

}

public PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(m_username, m_userpass);
}
}

public class SendMail {

public SendMail() {
}

public static void send(String smtpServer, String to, String from,
String subject, String body,String username,String password) {
try {
Properties props = System.getProperties();
// -- Attaching to default Session, or we could start a new one --
props.put("mail.smtp.host", smtpServer);
//props.put("mail.transport.user","showerxp");
//props.put("mail.transport.password","111111");
props.put("mail.smtp.auth", "true");
javax.mail.Session session = Session.getInstance(props, new Email_Autherticatorbean(username,password));
//Session session = Session.getDefaultInstance(props, null);
session.setDebug(true);
//javax.mail.Session session = Session.getInstance(props,null);
// javax.mail.Message msg = new MimeMessage(session);
javax.mail.internet.MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
msg.setSubject(subject);
msg.setText(body,"gb2312");
msg.setHeader("X-Mailer", "KenforMail");
//msg.setDataHandler(new DataHandler(body, "text/html"));
msg.setSentDate(new Date());
javax.mail.Transport.send(msg);
System.out.println("Message sent OK.");
}
catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String args[])
{
send("smtp.163.com", "收信人", "发信人",
"标题", "内容","用户名","密码");
}

}
这样就可以了 看看相关说明吧

这句话有问题 msg.setDataHandler(new DataHandler(body, "text/html"));
注释掉就可以了
showerXP 2004-01-13
  • 打赏
  • 举报
回复
msg.setContent(body,"text/plain")不行。还就得msg.setText没有问题。
还有,我一定是要发送html格式的文件。急用啊。这个可是很严重的问题呢。
Leemaasn 2004-01-13
  • 打赏
  • 举报
回复
我也Up一下

我也Up两下

!!!
^@^
linpeiwen 2004-01-13
  • 打赏
  • 举报
回复
sign
Leemaasn 2004-01-13
  • 打赏
  • 举报
回复
先Up一下,,,


回头再来看。。。
^@^
cdk 2004-01-13
  • 打赏
  • 举报
回复

邮件内容用
msg.setContent(body,"text/plain")
邮件主题用
msg.setSubject(new String(subject.getBytes("ISO8859_1"));
showerXP 2004-01-13
  • 打赏
  • 举报
回复
msg.setDataHandler(new DataHandler(body, "text/html"));
没有这句就不能发送html格式的邮件了。
我的问题解决了,多谢大家。
showerXP 2004-01-12
  • 打赏
  • 举报
回复
自己再up一下

关键问题是这里。msg.setText(body,"gb2312");
msg.setText就只能是文本形式.mime是"text/plain"发送中文是没有问题。但是“text/html”就有上述问题了。大家是怎么解决的阿。
showerXP 2004-01-12
  • 打赏
  • 举报
回复
来来来,下面是我的源代码,大家可以直接用。要先加mail.jar和active.jar两个包。
package com.kenfor.tradenet.MailSystem1;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.util.*;
/**
*
* <p>Title:肖力菡 </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author 肖力菡
* @version 1.0
*/
class Email_Autherticatorbean
extends Authenticator {
private String m_username = null;
private String m_userpass = null;
/**
* 设置认证用户名
* @param username
*/
public void setUsername(String username) {
m_username = username;
}

public void setUserpass(String userpass) {
m_userpass = userpass;
}

public Email_Autherticatorbean(String username, String userpass) {
super();
setUsername(username);
setUserpass(userpass);

}

public PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(m_username, m_userpass);
}
}

public class SendMail {

public SendMail() {
}

public static void send(String smtpServer, String to, String from,
String subject, String body,String username,String password) {
try {
Properties props = System.getProperties();
// -- Attaching to default Session, or we could start a new one --
props.put("mail.smtp.host", smtpServer);
//props.put("mail.transport.user","showerxp");
//props.put("mail.transport.password","111111");
props.put("mail.smtp.auth", "true");
javax.mail.Session session = Session.getInstance(props, new Email_Autherticatorbean(username,password));
//javax.mail.Session session = Session.getInstance(props,null);
// javax.mail.Message msg = new MimeMessage(session);
javax.mail.internet.MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
msg.setSubject(subject);
msg.setText(body,"gb2312");
msg.setHeader("X-Mailer", "KenforMail");
msg.setDataHandler(new DataHandler(body, "text/html"));
msg.setSentDate(new Date());
javax.mail.Transport.send(msg);
System.out.println("Message sent OK.");
}
catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String args[])
{
send("smtp.163.com", "收信人", "发信人",
"标题", "内容","用户名","密码");
}

}

Email_Autherticatorbean可以考虑用内部类实现好一些。

showerXP 2004-01-12
  • 打赏
  • 举报
回复
dodorunning(叮咚

我跟你的正好相反。
stonecsdn 2004-01-12
  • 打赏
  • 举报
回复
学习
showerXP 2004-01-12
  • 打赏
  • 举报
回复
还有,我觉得字符集charset是个误区。根本javamail就是把汉字用“?”替代了。比如我写了三个汉字,他就显示三个???。
showerXP 2004-01-12
  • 打赏
  • 举报
回复
public void setText(java.lang.String text,
java.lang.String charset)
throws MessagingException

用了字符集参数 这样子的。msg.setText(body,"gb2312")
还是不行。
jokerjava(冷血):老大 你到底成功过没有,有没有其他的提示拉。
dodorunning 2004-01-12
  • 打赏
  • 举报
回复
我的程序subject中文显示有问题,但是内容没有问题。
我用一个方法试了一下,还是不行
public static String toChinese(String strvalue){
try{
if(strvalue==null)
return null;
else
{
strvalue = new String(strvalue.getBytes("ISO8859"),"GBK");
return strvalue;
}
}catch(Exception e){
return null;
}
}
jokerjava 2004-01-12
  • 打赏
  • 举报
回复
public void setText(java.lang.String text,
java.lang.String charset)
throws MessagingException

可以设字符集的

81,092

社区成员

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

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