您的位置:首页 > 编程语言 > Java开发

编写JavaMai遇到的一些问题l

2011-04-11 08:19 288 查看
首先粘贴下javamail的一个实例,大家参考下:
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class SeconMail {

public void sendMail(){

Properties property = System.getProperties();

property.setProperty("mail.smtp.host ", "smtp.163.com");
property.setProperty("mail.smtp.port ", "80");
property.setProperty("mail.smtp.auth", "true");

Authenticator aut = new Myauth("****@163.com","*******");

Session session = Session.getDefaultInstance(property,aut);
MimeMessage message = new MimeMessage(session);
try {

Address fromAddress = new InternetAddress("***@163.com");
Address toAddress = new InternetAddress("***@163.com");

message.setFrom(fromAddress);
message.setRecipient(Message.RecipientType.TO, toAddress);

message.setSubject("测试javamil");
//message.setText("你好,测试javamail成功!");

//message.saveChanges();

// 设置邮件消息发送的时间
message.setSentDate(new Date());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart body = new MimeBodyPart();
// 设置HTML内容
body.setContent("jkljklj", "text/html; charset=utf-8");
mainPart.addBodyPart(body);
// 将MiniMultipart对象设置为邮件内容
message.setContent(mainPart);
message.saveChanges();
Transport trans = session.getTransport("smtp");
trans.connect("smtp.163.com", "", "");
trans.sendMessage(message, message.getAllRecipients());
// 发送邮件
// Transport.send(message);
trans.close();

} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public class Myauth extends Authenticator{

private String user;
private String password;
public Myauth(String user,String password){
this.user = user;
this.password = password;
}

public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(user, password);
}

}
public static void main(String args[]){

SeconMail testMail = new SeconMail();
testMail.sendMail();
}
}


将修改邮箱服务器地址,再将用户名和密码的信息换为你自己的邮箱,如下代码片段中的红色字体。

property.setProperty("mail.smtp.host ", "smtp.163.com");
property.setProperty("mail.smtp.auth", "true");

Authenticator aut = new Myauth("****@163.com","*******");

在编写javamail过程中遇到的问题:

1.java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream问题

该问题的解决引自:http://blog.csdn.net/liuyxit/archive/2010/01/15/5193802.aspx

2.Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

方法一:

这个问题是由于Javaee5中的mail还存在一些问题,和原来的mail.jar和activition.jar存在冲突。
如果你用myEclipse进行开发的话,运行时可能会出现以下的错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
原因是jar包版本不统一,解决方法如下:

删除Java EE 5 Libraries/javaee.jar/mail里的包有东西,如果还是不行把activition也删了。

具体方法如下:
用rar打开X:/Program Files/MyEclipse 6.0/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/data/libraryset/EE_5/javaee.jar
,然后删除mail,一接着把以前的mail.jar和activition.jar导入即可。

(具体是谁的blog我找不到原文了,这个应该和原文是一致的)

方法二:
JavaEE版本和JavaMail的版本不一致,请将sun公司上下载最新版本.
例如:javaMail 1.3以下的如果在javaEE5上就会出现上面的错误,
但如果在javaEE1.4下就正常.(但本人试过,javaEE5+javaMail1.4还是有一样的问题)
因为javaEE5中包含有javaMail的类但是却不全面,所以出本身的JavaMail
包冲突(引自:flatfish2000的http://flatfish2000.iteye.com/blog/437698

3.Could not connect to SMTP host: localhost, port: 25;nested exception is:

这个问题一般是由于你的smtp服务器的配置错误引起的,比如我的问题是在

property.setProperty("mail.smtp.host ", "smtp.163.com");这句中的"mail.smtp.host "中多加了一个空格导致的问题,去掉后就好了。就是这个问题困绕了我一天。

4.javax.mail.AuthenticationFailedException

很明显是验证失败的问题,

1.就是你使用的邮件服务器是否支持smtp,比如qq的邮箱需要进行开通。

2.你用户名和密码是否正确。

最后给大家说下,就是在使用javamail时最好打开调试功能,这样就能更清楚的看到是哪个环节出了问题。

具体是加如下语句:session.setDebug(true);

解决:
在MyEclipse目录下,找javaee.jar包,用WinRar打包,删除里面的mail目录,然后加入mail.jar和activition.jar
具体下载位置请到网上搜下。

原因:

MyEclipse6.5的javaee.jar中的mail包与JavaMail包有冲突
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: