JAVA实现找回密码的详细功能.docx
《JAVA实现找回密码的详细功能.docx》由会员分享,可在线阅读,更多相关《JAVA实现找回密码的详细功能.docx(18页珍藏版)》请在冰豆网上搜索。
JAVA实现找回密码的详细功能
这里,首先向大家简单介绍一下尚邮绑定邮箱的注意事项:
1、请先确认您的邮箱支持pop3
只要支持pop3或者imap4协议的公众邮箱和企业邮箱都可以使用尚邮。
目前大多数免费公众邮箱都支持pop功能,但是部分需要要手动开启(在本文的后面我们会针对几个常见的公众邮箱开通POP服务以及服务器配置方式进行介绍)。
确认您的邮箱支持pop3或者imap4协议后您就可以绑定邮箱了。
2、绑定邮箱:
在手机客户端和尚邮网站用户中心的“邮箱管理”中都可以进行绑定邮箱的操作。
绑定邮箱有两个步骤:
一,选择公众邮箱或其他邮箱;二,填写邮箱配置信息。
“公众邮箱”指的是常用的免费邮箱(sina、sohu、qq、139、Gmail等),尚邮已对这些常见邮箱进行了配置,因此在绑定时只需填写基础信息即可“绑定,如图所示。
“其他邮箱”指的是除“公众邮箱”列表中列出的邮箱外所有支持pop或imap的邮箱。
对于常见邮箱,服务器可以自动对其进行配置,只要填写基础信息后直接“添加”即可;而对于部分配置较为特殊的企业邮箱或国外邮箱则需要手动配置服务器信息,如果直接添加将会提示“请选择邮件类型”,此时需要将“服务器选项”勾选后再手动填写,如图所示。
补充说明:
邮箱配置信息中最容易出现错误的还有邮箱登录名的填写,多数情况下邮箱登录名就是邮箱地址@前面的部分,但部分企业邮箱和个别公众邮箱使用地址全称做登录名的,如雅虎、126邮箱。
可能出现的问题:
为什么绑定邮箱操作后已出现在邮箱列表中的邮箱消失了?
在手机客户端上绑定邮箱时尚邮要进行两个步骤的工作:
一是,向提交邮箱的配置信息;二是,服务器对提交的信息进行验证。
因此当您填写并提交邮箱信息后手机客户端会提示提交成功,这时邮箱列表中能够看到您提交的邮箱,但前面显示一个####的问号。
服务器接到您提交的信息后会进行验证,如果验证未通过,您邮箱列表中的那个邮箱将会消失;验证成功后,邮箱列表中邮箱前面的####问号将会变成绿色的对勾。
由于目前手机客户端对邮箱绑定的提交和验证是异步的,因此建议您直接在网页用户中心中绑定邮箱,更加直观。
新浪(sina)邮箱配置方法及介绍
新浪邮箱自今年(08年)6月分服务器被攻击后开始对pop取件频率进行了严格限制,同时新注册的用户需要手动才能开通pop功能(老用户不需要)。
手动开通pop的方法:
登录新浪邮箱后点击“邮箱设置”-“帐户”-“pop-smtp设置”勾选“开启”后“保存”,如图所示:
服务器配置方法:
类型:
POP3
接收邮件服务器:
接收端口:
110 SSL否
发送邮件服务器:
发送端口:
25 SSL否
QQ邮箱配置方法及介绍
QQ邮箱需要通过手动的方式开启pop功能,方法如下:
登陆您的QQ邮箱页面后点击页面上方的“设置”-“账号”-“POP3/SMTP服务”勾选“开启POP3/SMTP服务”后“保存修改”,如图所示
服务器配置方法:
类型:
POP3
接收邮件服务器:
接收端口:
110 SSL否
发送邮件服务器:
发送端口:
25 SSL否
同时QQ邮箱可以同时开通Foxmail邮箱,这样邮箱容量更大,功能更全,而使用的实际上是一个邮箱。
Foxmail配置:
类型:
POP3
接收邮件服务器:
接收端口:
110 SSL否
发送邮件服务器:
发送端口:
25 SSL否
用户名:
用户名@F
网易(126\163\)邮箱配置方法及介绍
网易免费邮箱对pop取信频率有严格的限制,因此相对取信速度比较慢。
网易免费邮箱中126和163邮箱06年后注册的以及邮箱07年后的注册用户不再支持pop功能,需要定制其“随身邮服务”方可开通,老用户本身就是支持pop功能的,无需定制。
126邮箱配置方法:
类型:
POP3
接收邮件服务器:
接收端口:
110 SSL否
发送邮件服务器:
发送端口:
25 SSL否
特别说明:
如果您确认您的126邮箱开通了POP功能,但还是不能绑定成功,可以尝试在邮箱用户名处填写126邮箱地址全称,再看是否能绑定成功。
通常,126邮箱无论使用@符号前内容或者用邮箱全称来填写“邮箱用户名”都可以成功绑定。
您可以多尝试下。
163邮箱配置方法:
类型:
POP3
接收邮件服务器:
接收端口:
110 SSL否
发送邮件服务器:
发送端口:
25 SSL否
Y配置方法:
类型:
POP3
接收邮件服务器:
接收端口:
110 SSL否
发送邮件服务器:
smtp.
发送端口:
25 SSL否
雅虎(\)邮箱配置方法及介绍
目前尚邮支持比较好的是雅虎中国邮箱:
和。
雅虎中国邮箱需要定制“来信提醒”的服务方可开通pop功能。
方法如下:
登陆雅虎邮箱后点击“pop+来信提醒”-“关联手机”-“定制”-“设置”完毕后即可开通pop,同时有新邮件时雅虎也会给你发送短信提醒,如图所示:
也有网友提供雅虎免费开通pop功能的方法
配置方法:
类型:
POP3
接收邮件服务器:
接收端口:
995 SSL是
发送邮件服务器:
发送端口:
465 SSL是
Gmail邮箱配置方法及介绍
Gmail邮箱也需要手动配置pop或者imap功能。
配置方法如下:
登录Gmail邮箱后点击“设置”-“转发和pop
smtp”-“pop下载”下勾选“对从现在起所收到的邮件启用pop”或者“IMAP访问”中勾选“启用IMAP”然后“保存更改”
POP3配置方法:
类型:
POP3
接收邮件服务器:
接收端口:
995 SSL是
发送邮件服务器:
发送端口:
465 SSL是
IMAP配置方法:
类型:
IMAP4
接收邮件服务器:
接收端口:
993 SSL是
发送邮件服务器:
发送端口:
465 SSL是
补充说明:
由于Gmail邮箱服务器本身设置的原因,Gmail邮箱邮件只允许邮件客户端软件pop收取一次,因此尚邮取过的邮件,pc客户端如outlook将收不到,反之亦然。
另外,Gmail邮箱是将已发送邮件和收到的邮件存放在一起的,所以使用客户端软件收Gmail的邮件会将已发送的邮件一同收取下来。
Hotmail邮箱配置方法及介绍
Hotmail邮箱目前已全面支持pop功能,无需手动开启。
服务器配置方法如下:
类型:
POP3
接收邮件服务器:
接收端口:
995 SSL是
发送邮件服务器:
发送端口:
25 TLS/SSL是
补充说明:
Hotmail的邮箱用户名一定要填写地址全称,否则无法成功绑定。
具体代码实现过程:
下面是程序步骤:
1.与邮件发送服务器建立器Socket连接(需要端口号和服务器名称)
2.用"HELO"命令注册到服务器上
3.用"AUTHLOGIN"命令,根据已有的邮箱账号和密码登陆到服务器
4.用"MAILFROM<..>"命令设置邮件源地址信息
5.用"MAILTO<..>"命令设置邮件目的地址信息
6.用"DATA","FROM","TO","SUBJECT"命令分别设置发件人昵称,收件人昵称,主题信息和内容,"."+回车结束内容输入
7.最后用"QUIT"命令退出邮件发送服务
——————————————————————————————————————————————————————
下面是程序代码:
定义一个接口,主要是上面步骤方法的声明:
SendMail.java:
packagecom.sunflower.yuan.sendmail;
importjava.io.IOException;
/**
*@authorCaihanyuan
*@time2012-8-31上午10:
27:
22
*/
publicinterfaceSendMail{
/**
*向服务器发送命令
*
*@paramorder
*向服务器发送的命令行
*@return返回服务器状态
**/
publicintsendToServer(Stringorder);
/**
*解析服务器返回的应答信息
*
*@return返回服务器状态
**/
publicintgetResult();
/**与服务器发起会话*/
publicvoidregist()throwsIOException;
/**登录到服务器*/
publicvoidlogin()throwsIOException;
/**设置邮件源地址*/
publicvoidsetMailFrom()throwsIOException;
/**设置邮件目的地址*/
publicvoidsetMailTo()throwsIOException;
/**设置邮件内容*/
publicvoidsetData()throwsIOException;
/**退出邮箱服务*/
publicvoidquit()throwsIOException;
/**发送邮件的主程序*/
publicbooleansendMail()throwsIOException;
}
接口的实现类。
SendMailImp.java:
packagecom.sunflower.yuan.sendmail;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
import.Socket;
import.UnknownHostException;
importjava.util.StringTokenizer;
importsun.misc.BASE64Encoder;
/**
*@authorCaihanyuan
*@time2012-8-31上午11:
05:
20
*/
publicclassSendMailImpimplementsSendMail{
publicstaticfinalintSINA=0;
publicstaticfinalintQQ=1;
publicstaticfinalintFOXMAIL=2;
publicstaticfinalintWANGYI163=3;
publicstaticfinalintWANGYI126=8;
publicstaticfinalintYEAH=4;
publicstaticfinalintHOTMAIL=5;
publicstaticfinalintYAHOO=6;
publicstaticfinalintGMAIL=7;
/**用于向服务器发起连接*/
privateSocketsocket=null;
/**与服务器连接后的输入流*/
privateBufferedReaderinput=null;
/**与服务器连接后的输出流*/
privateBufferedWriteroutput=null;
/**发送邮件服务器名称*/
privateStringserver=null;
/**发送端口号*/
privateintport;
/**邮件信息*/
privateMailMessagemessage;
publicMailMessagegetMessage(){
returnmessage;
}
//设置邮件的信息内容,以方法链的方式实现
publicSendMailImpsetMessage(MailMessagemessage){
this.message=message;
returnthis;
}
publicSocketgetSocket(){
returnsocket;
}
publicvoidsetSocket(Socketsocket){
this.socket=socket;
}
publicBufferedReadergetInput(){
returninput;
}
publicvoidsetInput(BufferedReaderinput){
this.input=input;
}
publicBufferedWritergetOutput(){
returnoutput;
}
publicvoidsetOutput(BufferedWriteroutput){
this.output=output;
}
publicStringgetServer(){
returnserver;
}
publicvoidsetServer(Stringserver){
this.server=server;
}
publicintgetPort(){
returnport;
}
publicvoidsetPort(intport){
this.port=port;
}
/**
*根据邮箱类型,设置发送邮件服务器和端口号
*/
publicstaticSendMailImpgetInstance(intsendMailType){
SendMailImpsendMailImp=newSendMailImp();
switch(sendMailType){
caseSINA:
sendMailImp.setServer("");
sendMailImp.setPort(25);
break;
caseQQ:
caseFOXMAIL:
sendMailImp.setServer("");
sendMailImp.setPort(25);
break;
caseWANGYI126:
sendMailImp.setServer("");
sendMailImp.setPort(25);
break;
caseWANGYI163:
sendMailImp.setServer("");
sendMailImp.setPort(25);
break;
caseYEAH:
sendMailImp.setServer("");
sendMailImp.setPort(25);
break;
caseYAHOO:
sendMailImp.setServer("");
sendMailImp.setPort(465);
break;
caseGMAIL:
sendMailImp.setServer("");
sendMailImp.setPort(465);
break;
caseHOTMAIL:
sendMailImp.setServer("");
sendMailImp.setPort(25);
break;
default:
break;
}
try{
//与发送邮件服务器建立Socket连接,并得到输入输出流
Socketsocket=newSocket(sendMailImp.getServer(),sendMailImp
.getPort());
BufferedReaderinput=newBufferedReader(newInputStreamReader(
socket.getInputStream()));
BufferedWriteroutput=newBufferedWriter(newOutputStreamWriter(
socket.getOutputStream()));
sendMailImp.setSocket(socket);
sendMailImp.setInput(input);
sendMailImp.setOutput(output);
}
catch(UnknownHostExceptione){
e.printStackTrace();
}
catch(IOExceptione){
e.printStackTrace();
}
returnsendMailImp;
}
publicintsendToServer(Stringorder){
try{
this.getOutput().write(order);
this.getOutput().newLine();
this.getOutput().flush();
System.out.println("已发送命令:
"+order);
}
catch(IOExceptione){
e.printStackTrace();
}
returngetResult();
}
publicintgetResult(){
Stringline="";
try{
line=this.getInput().readLine();
System.out.println("服务器返回状态:
"+line);
}
catch(IOExceptione){
e.printStackTrace();
}
//从服务器返回消息中取得状态码,并转换成整数返回
StringTokenizerget=newStringTokenizer(line,"");
returnInteger.parseInt(get.nextToken());
}
publicvoidregist()throwsIOException{
intresult=getResult();
//连接上服务器后,服务器给出220应答
if(result!
=220)
thrownewIOException("连接服务器失败");
result=sendToServer("HELO"+this.getServer());
//HELO命令成功后,服务器返回250应答
if(result!
=250)
thrownewIOException("注册邮件服务器失败");
}
publicvoidlogin()throwsIOException{
BASE64Encoderencode=newBASE64Encoder();
intresult=sendToServer("AUTHLOGIN");
//登陆服务成功,服务器返回334应答
if(result!
=334)
thrownewIOException("登陆服务失败");
//对邮箱用户名进行验证
result=sendToServer(encode.encode(this.message.getUser().getBytes()));
if(result!
=334)
thrownewIOException("用户名错误");
//对邮箱密码进行验证
result=sendToServer(encode.encode(message.getPassword().getBytes()));
if(result!
=235)
thrownewIOException("用户验证错误");
}
publicvoidsetMailFrom()throwsIOException{
intresult=sendToServer("MAILFROM:
<"+this.getMessage().getFrom()
+">");
if(result!
=250)
thrownewIOException("邮件源地址错误");
}
publicvoidsetMailTo()throwsIOException{
intresult=sendToServer("RCPTTO:
<"+this.getMessage().getTo()+">");
if(result!
=250)
thrownewIOException("邮件目的地址错误");
}
publicvoidsetData()throwsIOException{
intresult=sendToServer("DATA");
//输入date回车后,若收到354应答后,继续输入邮件内容
if(result!
=354)
thrownewIOException("不能发送数据");
this.getOutput().write("FROM:
"+this.getMessage().getDatafrom());
this.getOutput().newLine();
this.getOutput().write("TO:
"+this.getMessage().getDatato());
this.getOutput().newLine();
this.getOutput().write("SUBJECT