{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
在一般的网站登录密码找回项目中都有邮箱找回密码的功能,那么如何让代码实现收发邮件呢?
packageit.com.service;importjava.math.biginteger;importjava.security.messagedigest;importjava.security.nosuchalgorithmexception;importjava.util.date;importjava.util.properties;importjavax.mail.messagingexception;importjavax.mail.nosuchproviderexception;importjavax.mail.session;importjavax.mail.transport;importjavax.mail.internet.internetaddress;importjavax.mail.internet.mimemessage;publicclassemailuser{publicstaticstringmyemailaccount="cdefgab1234@126.com";publicstaticstringmyemailpassword="***********";//这里填写的是邮箱的授权码,可以在自己邮箱里进行设置,每个人的不一样,填写邮箱密码也可以(网易邮箱)//publicstaticstringmyemailaccount="279656813@qq.com";//publicstaticstringmyemailpassword="gofbgrxommkxbhaj";//发件人邮箱的smtp服务器地址,必须准确,不同邮件服务器地址不同,一般(只是一般,绝非绝对)格式为:smtp.xxx.com//网易163邮箱的smtp服务器地址为:smtp.163.com//这里改为网易126的邮箱publicstaticstringmyemailsmtphost="smtp.126.com";//收件人邮箱(替换为自己知道的有效邮箱)publicstaticstringreceivemailaccount="291684082@qq.com";publicstringmd5(stringinputstr){bigintegerbiginteger=null;//高精度数据类型try{messagedigestmd=messagedigest.getinstance("md5");//说明加密类型byte[]inputdata=inputstr.getbytes();//字符转换成字节md.update(inputdata);//加密biginteger=newbiginteger(md.digest());//转换成高精度数字类型//system.out.println("md加密后:"+biginteger.tostring());//输出}catch(nosuchalgorithmexceptione){//todoauto-generatedcatchblocke.printstacktrace();}returnbiginteger.tostring();}publicstringactivationcode(){//system.out.println(md5("ab45c9"));return"ab45c9";}stringkey=null;publicstringsmtptoemail(){//1.创建参数配置,用于连接邮件服务器的参数配置propertiesprops=newproperties();//参数配置props.setproperty("mail.transport.protocol","smtp");//使用的协议(javamail规范要求)props.setproperty("mail.smtp.host",myemailsmtphost);//发件人的邮箱的smtp服务器地址props.setproperty("mail.smtp.auth","true");//需要请求认证//ps:某些邮箱服务器要求smtp连接需要使用ssl安全认证(为了提高安全性,邮箱支持ssl连接,也可以自己开启),//如果无法连接邮件服务器,仔细查看控制台打印的log,如果有有类似“连接失败,要求ssl安全连接”等错误,//打开下面/*...*/之间的注释代码,开启ssl安全连接。/*//smtp服务器的端口(非ssl连接的端口一般默认为25,可以不添加,如果开启了ssl连接,//需要改为对应邮箱的smtp服务器的端口,具体可查看对应邮箱服务的帮助,//qq邮箱的smtp(sll)端口为465或587,其他邮箱自行去查看)finalstringsmtpport="465";props.setproperty("mail.smtp.port",smtpport);props.setproperty("mail.smtp.socketfactory.class","javax.net.ssl.sslsocketfactory");props.setproperty("mail.smtp.socketfactory.fallback","false");props.setproperty("mail.smtp.socketfactory.port",smtpport);*///2.根据配置创建会话对象,用于和邮件服务器交互sessionsession=session.getdefaultinstance(props);session.setdebug(true);//设置为debug模式,可以查看详细的发送log//3.创建一封邮件mimemessagemessage=null;try{message=createmimemessage(session,myemailaccount,receivemailaccount);}catch(exceptione){//todoauto-generatedcatchblocke.printstacktrace();}//4.根据session获取邮件传输对象transporttransport=null;try{transport=session.gettransport();}catch(nosuchproviderexceptione){//todoauto-generatedcatchblocke.printstacktrace();}//5.使用邮箱账号和密码连接邮件服务器,这里认证的邮箱必须与message中的发件人邮箱一致,否则报错////ps_01:成败的判断关键在此一句,如果连接服务器失败,都会在控制台输出相应失败原因的log,//仔细查看失败原因,有些邮箱服务器会返回错误码或查看错误类型的链接,根据给出的错误//类型到对应邮件服务器的帮助网站上查看具体失败原因。////ps_02:连接失败的原因通常为以下几点,仔细检查代码://(1)邮箱没有开启smtp服务;//(2)邮箱密码错误,例如某些邮箱开启了独立密码;//(3)邮箱服务器要求必须要使用ssl安全连接;//(4)请求过于频繁或其他原因,被邮件服务器拒绝服务;//(5)如果以上几点都确定无误,到邮件服务器网站查找帮助。////ps_03:仔细看log,认真看log,看懂log,错误原因都在log已说明。try{transport.connect(myemailaccount,myemailpassword);}catch(messagingexceptione){//todoauto-generatedcatchblocke.printstacktrace();}//6.发送邮件,发到所有的收件地址,message.getallrecipients()获取到的是在创建邮件对象时添加的所有收件人,抄送人,密送人try{transport.sendmessage(message,message.getallrecipients());}catch(messagingexceptione){//todoauto-generatedcatchblocke.printstacktrace();}//7.关闭连接try{transport.close();}catch(messagingexceptione){//todoauto-generatedcatchblocke.printstacktrace();}returnkey;}/***创建一封只包含文本的简单邮件**@paramsession和服务器交互的会话*@paramsendmail发件人邮箱*@paramreceivemail收件人邮箱*@return*@throwsexception*/publicmimemessagecreatemimemessage(sessionsession,stringsendmail,stringreceivemail)throwsexception{//1.创建一封邮件mimemessagemessage=newmimemessage(session);//2.from:发件人message.setfrom(newinternetaddress(sendmail,"陕西华信","utf-8"));//3.to:收件人(可以增加多个收件人、抄送、密送)message.setrecipient(mimemessage.recipienttype.to,newinternetaddress(receivemail,"xx用户","utf-8"));//4.subject:邮件主题message.setsubject("打折钜惠","utf-8");//得到激活码key=activationcode();system.out.println("=====1="+key);//5.content:邮件正文(可以使用html标签)message.setcontent("