急,请教javamail中身份验证的问题,在线等待!!

redfox33 2006-07-07 03:44:29
问题1:
发送email的时候,出现javax.mail.AuthenticationFailedException异常,
我已经 props.put("mail.smtp.auth","true")了阿,虽然出现异常,但有时候也能发送成功,有时候则失败,很不稳定。请大家给我看看代码哪里有问题
javamail.jar (1.4)
activation.jar

package com.kysoft.common;


import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Date;
import javax.activation.*;
import java.io.*;



public final class sendMail
{

private boolean isDebug = false; //发送mail时是否需要输出调试信息

private Properties props; //系统属性

private Session mailSession; //邮件会话对象
private MimeMessage mimeMsg; //MIME邮件对象
private boolean needAuth = false; //smtp是否需要认证

private String username = ""; //smtp认证用户名和密码
private String password = "";

private String mailContentType = null;
private String mailCharset = null;

private Multipart mp; //Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象


public sendMail()
{
props = new Properties(); //获得系统属性对象
}


public void setDebug(boolean isDebug)
{
this.isDebug = isDebug ;
}


private void setNeedAuth(boolean need)
{
if(need)
{
props.put("mail.smtp.auth","true");
}else{
props.put("mail.smtp.auth","false");
}
}


private void setSmtpHost(String hostName)
{
props.put("mail.smtp.host",hostName); //设置SMTP主机
}



private boolean createMimeMessage()
{
try
{
System.out.println("准备获取邮件会话对象!");
mailSession = Session.getInstance(props); //获得邮件会话对象
mailSession.setDebug(isDebug);

}
catch(Exception e)
{
System.err.println("获取邮件会话对象时发生错误!"+e);
return false;
}


System.out.println("准备创建MIME邮件对象!");
try
{
mimeMsg = new MimeMessage(mailSession); //创建MIME邮件对象

return true;
}
catch(Exception e)
{
System.err.println("创建MIME邮件对象失败!"+e);
return false;
}
}


private void setNamePass(String name,String pass)
{
this.username = name;
this.password = pass;
}



//======================================================


private boolean setFrom(String mailFrom)
{
System.out.println("设置发信人!");
if(mailFrom == null) return false;
try
{
//InternetAddress from=new InternetAddress(mailFrom);
//mimeMsg.setFrom(mailFrom);

mimeMsg.setFrom(new InternetAddress(mailFrom)); //设置发信人
return true;
}
catch(Exception e)
{
return false;
}
}



private boolean setTo(String mailTo)
{
System.out.println("设置收信人!");
if(mailTo == null) return false;
try
{

InternetAddress to=new InternetAddress(mailTo);
mimeMsg.setRecipient(Message.RecipientType.TO,to);

//mimeMsg.setRecipient(Message.RecipientType.TO,new InternetAddress(mailTo));
return true;
}
catch(Exception e)
{
return false;
}

}


private boolean setSubject(String mailSubject)
{
System.out.println("设置邮件主题!");
if(mailSubject == null) return false;
try
{
mimeMsg.setSubject(mailSubject);
//System.out.println(mailSubject);
return true;
}
catch(Exception e)
{
System.err.println("设置邮件主题发生错误!");
return false;
}
}



private boolean setSentDate()
{
System.out.println("设置邮件发送日期!");

try
{
mimeMsg.setSentDate(new Date());
return true;
}
catch(Exception e)
{
System.err.println("设置邮件发送日期发生错误!");
return false;
}
}


private boolean setBody(String mailBody)
{
try
{

BodyPart mdp=new MimeBodyPart();//新建一个存放信件内容的BodyPart对象
mdp.setContent(mailBody,this.mailContentType + ";charset=" + this.mailCharset);//***************
mp=new MimeMultipart();//新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)
mp.addBodyPart(mdp);//将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)


return true;
}
catch(Exception e)
{
System.err.println("设置邮件正文时发生错误!"+e);
return false;
}
}


//邮件发送前的信息准备工作
private boolean mailSendReady()
{

try
{
this.setSmtpHost("smtp.163.com");
this.setNeedAuth(true);

if(!this.createMimeMessage()) return false;

this.username = "service@163.com"; //换成你自己测试用的163邮箱
this.password = "123456";

this.mailContentType = "text/html";
this.mailCharset = "gb2312";

if(!this.setFrom("service@163.com")) return false;
if(!this.setTo("coustomer@163.com")) return false;
if(!this.setSubject("hello,this is a test javamail!")) return false;
if(!this.setSentDate()) return false;
if(!this.setBody("邮件发送测试!")) return false;

return true;

}
catch(Exception e)
{
System.err.println("邮件发送准备时发生错误!"+e);
return false;
}

}



public boolean sendMail()
{
try
{
if(!mailSendReady()) return false;

mimeMsg.setContent(mp); //把mp作为消息对象的内容
mimeMsg.saveChanges();
System.out.println("正在发送邮件....");


Transport transport = mailSession.getTransport("smtp");

transport.connect((String)props.get("mail.smtp.host"),username,password);

transport.sendMessage(mimeMsg,mimeMsg.getAllRecipients());

transport.send(mimeMsg);

System.out.println("发送邮件成功!");
transport.close();

return true;
}
catch(Exception e)
{
System.err.println("邮件发送失败!"+e);
return false;
}
}



public static void main(String[] args)
{

sendMail themail = new sendMail();
boolean flag=themail.sendMail();
System.out.println("email sent "+flag);

}
}


//----------------------运行结果
准备获取邮件会话对象!
准备创建MIME邮件对象!
设置发信人!
设置收信人!
设置邮件主题!
设置邮件发送日期!
正在发送邮件....
邮件发送失败!javax.mail.AuthenticationFailedException
email sent false
Press any key to continue...

问题2:
smtp.host/送邮箱/送账号/密码 等信息变化不大,所以我就存在数据库表中,如果在网站一运行(或者信息修改变动后)的时候,从数据库中取出,存到Properties中,这样以后再发送邮件就不需要访问数据库,直接从Properties取出,这部份代码应该怎么写才能保证每次取出的Properties都是同一个?
万分感激,问题解决后马上送分
...全文
216 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoqt 2006-07-13
  • 打赏
  • 举报
回复
既然解决了,就把解决方法写出来啊,这样别人也不会错了。
zhuangyan2004 2006-07-12
  • 打赏
  • 举报
回复
“邮件正发送往 xxxx@xxx.com”是写在一个<div>中的。具体的我再看看。
redfox33 2006-07-12
  • 打赏
  • 举报
回复
to redhairboy:
不是这个错误。
redhairboy 2006-07-12
  • 打赏
  • 举报
回复
this.username = "service@163.com"; 错了
this.username = "service"
redfox33 2006-07-11
  • 打赏
  • 举报
回复
前两个问题都是我自己解决的,问最后一个问题,登录163网站信箱发送邮件的时候,会出现一个像层似的东西,漂浮在耶面上,提示“邮件正发送往 xxxx@xxx.com”,邮件发送完毕后,这个就消失了,这是怎么做的?给个思路或者是代码实例,谢谢阿
wmzsl 2006-07-10
  • 打赏
  • 举报
回复
顶一下哈哈!
redfox33 2006-07-10
  • 打赏
  • 举报
回复
问题2我也解决了。这里人气也太不旺了。散分了
redfox33 2006-07-08
  • 打赏
  • 举报
回复
问题1我已经解决了。大家帮看看问题2,最好能给出代码
redfox33 2006-07-08
  • 打赏
  • 举报
回复
没有人做过javamail吗?我很着急阿
XQ2008 2006-07-07
  • 打赏
  • 举报
回复
晕,看不懂,太长的代码了,没有工具,怎么调试
空心兜兜 2006-07-07
  • 打赏
  • 举报
回复
帮顶下!
redfox33 2006-07-07
  • 打赏
  • 举报
回复
ding ding
redfox33 2006-07-07
  • 打赏
  • 举报
回复
有人在吗?
kevinliuu 2006-07-07
  • 打赏
  • 举报
回复
写一个servlet拉起来啊
redfox33 2006-07-07
  • 打赏
  • 举报
回复
如何在网站一运行(或者信息修改变动后)的时候,从数据库中取出最新的信息,报存到Properties中??

81,091

社区成员

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

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