首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

以邮件形式找回密码(VM模板)

2012-12-22 
以邮件方式找回密码(VM模板)???? 每个网站都有安全中心,而安全中心又都有找回密码,找回密码又必然会出现

以邮件方式找回密码(VM模板)

???? 每个网站都有安全中心,而安全中心又都有找回密码,找回密码又必然会出现 以邮件方式找回。

?

???? 分析: 当用户以邮件方式找回密码时,分为3步骤:

?????????????? 1:验证用户名是否存在,

???????????????2:验证用户所填写的邮箱是否与用户的用户名匹配,

?????????????? 3:生成一个被加密后的超链接,此链接最好设上有效期,这个链接也采用行之有效的算法。

???????????????4:把生成后的链接发到用户邮箱上

?????????????? 5:当用户收到邮件并点此链接时,直接跳到修改密码的页面。

?

????? 在此,我给大家贴一个找回邮件的详细代码,发送邮件的模板引擎为 vm。

?

???? 长话短说,下面我说具体代码步骤.

1:

/** * 读取邮件模板 * @param data * @return */private static String emailTemplate(Map<String, String> data,String filePath) {String result = null;try {VelocityEngine velocity = new VelocityEngine();Properties properties = new Properties();properties.setProperty("resource.loader", "class");properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");velocity.init(properties);Template t = velocity.getTemplate(filePath, "utf-8");VelocityContext context = new VelocityContext();for (Map.Entry<String, String> entry : data.entrySet()) {context.put(entry.getKey(), entry.getValue());}StringWriter writer = new StringWriter();t.merge(context, writer);result = writer.toString();writer.close();} catch (Exception e1) {e1.printStackTrace();}return result;}

?

2:

    /** * 发送密码到邮箱 * @param user * 用户对象 * @param password * 新密码 * @param email * 收密码的邮箱号码 */public static void sendEmail(UserDTO userDTO,String password,String email){InputStream in = null;try { in = WebUtil.class.getResourceAsStream("/mail.properties");Properties p = new Properties();if (in != null) {p.load(in);}String authuser=p.getProperty("mail.username");  //发送人用户名String authpwd= p.getProperty("mail.password");  //邮箱密码String host = p.getProperty("mail.host");        //smtp服务器名字String port = p.getProperty("mail.port"); //端口号String from = p.getProperty("mail.from");        //来自哪里String title = p.getProperty("uc.title");   //邮件标题,替换发送的邮箱名字String url = p.getProperty("uc.url");       //链接地址Properties sessionPro = new Properties();sessionPro.put("mail.smtp.host", host);sessionPro.put("mail.smtp.port",port);sessionPro.put("mail.smtp.auth","true");// 根据邮件会话属性和密码验证器构造一个发送邮件的session Session sendMailSession = Session.getDefaultInstance(sessionPro,new MyAuthenticator(authuser,authpwd));// 根据session创建一个邮件消息    Message mailMessage = new MimeMessage(sendMailSession);// 创建邮件发送者地址    Address fromAddress = new InternetAddress(from);// 创建邮件的接收者地址,并设置到邮件消息中    Address toAddress = new InternetAddress(email);// 设置邮件消息的发送者 mailMessage.setFrom(fromAddress);mailMessage.setFileName(title);mailMessage.setDescription(title);//指定邮件优先级 1:紧急 !表示 3:普通 5:缓慢  向下的箭头表示mailMessage.setHeader("X-Priority","1");mailMessage.setRecipient(Message.RecipientType.TO,toAddress);// 设置邮件消息发送的时间    mailMessage.setSentDate(new Date()); mailMessage.setSubject("找回密码");// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象    Multipart mainPart = new MimeMultipart();// 创建一个包含HTML内容的MimeBodyPart    BodyPart html = new MimeBodyPart();//设置邮件内容Map<String,String> props=new HashMap<String,String>();props.put("title", title);props.put("url", url);props.put("userName",userDTO.getUserName());props.put("password",password);//读取邮件内容String result=emailTemplate(props,"mail/findpwd_mail.vm");;            html.setContent(result,"text/html;charset=utf-8");mainPart.addBodyPart(html); // 将MiniMultipart对象设置为邮件内容    mailMessage.setContent(mainPart);     //保存要发送的邮件    mailMessage.saveChanges();            //发送邮件Transport.send(mailMessage);StringBuilder sb = new StringBuilder();sb.append("我们已向您的");sb.append(email.substring(email.indexOf("@")+1,email.length())+"'");sb.append("邮箱发送了一封密码找回邮件,请您注意");sb.append("<font color='red'><a target='_blank' href='http://mail.");sb.append(email.substring(email.indexOf("@")+1,email.length())+"'");sb.append(">");sb.append("接收邮件");sb.append("</a></font>");sb.append("!");addError(sb.toString(),"success_msg");} catch (Exception ex) {System.out.println(ex.getMessage());addError("网络连接失败!检查您的网络是否正常!");}finally{IOUtils.closeQuietly(in);}}

?

3: 添加系统邮箱的配置文件,放到类路径下,取名为:mail.properties

uc.title=xxxx用户中心uc.url=http://www.xxxx.commail.host=mail.transnal.commail.username=renwgmail.password=xxxxmail.from=renwg@xxx.commail.port=25

?

?4:添加发送邮箱的模板引擎,放到类路径下的 mail 文件夹下 取名为:findpwd_mail.vm

<html><body><div id="contentDiv" style="font-size:14px;height:auto;padding:15px 0 10px 15px;*padding:15px 0 0 15px;overflow:visible;line-height:170%;min-height:100px;_height:100px;" ><table id="" width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top" style="font-size:14px;padding:0;height:auto;min-height:auto;font-family: 'lucida Grande',Verdana;" class='font_blue12'>这里</a> 重新获取修复密码邮件。   <span class='fant_hui12'><br/>(如果不能点击该链接地址,请复制并粘贴到浏览器的地址输入框)</span></td>                                  </tr>                                                                      <tr>                                    <td height='40' align='center' valign='middle'><span class='font_gray14'>                                      <a href='$!{password.substring(0,$start)}login?service=$!{password.substring(0,$start)}passport/default.action' target='_blank'><img src='http://uc.cun365.com/images/cun365/but-1.gif' width='203' height='24' border=0//></a>                                    </span></td>                                  </tr>                                                                    <tr>                                    <td height='13' align='left' valign='top'></td>                                  </tr>                                  <tr>                                    <td height='13' align='left' valign='top' background='http://uc.cun365.com/images/cun365/reg_line.jpg'></td>                                  </tr>                                  <tr>                                    <td align='left' valign='top'><div id="mailContentContainer">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;如果您有任何问题,请查看<a href="#">隐私权保护规则</a><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;服务热线:0351-2284924   电子邮箱:<a href="mailto:renwg@transna.com">renwg@transnal.com</a></div>                            <p> 此邮件为系统所发,请勿直接回复。&nbsp; &nbsp; <br/><br/></p>                                    </td>                                  </tr>                                  <tr>                                    <td align='left' valign='top'>&nbsp;</td>                                  </tr>                                </table>                            </td>                          </tr>                        </table></div></td><td width="170">&nbsp;</td></tr></table></div></body></html>

?

?

?

?? 5:此是发送邮件的 Action 。也给大家贴出来供参考一下。

/** * 把密码发到邮箱 * @return */  public String sendEmail(){if(StringUtils.isEmpty(userName)){WebUtil.addError("用户名不能为空");return INPUT;}if (StringUtils.isEmpty(email)) {WebUtil.addError("用户邮件地址不能为空");return INPUT;}if (!EmailValidator.getInstance().isValid(email)) {WebUtil.addError("用户邮件地址格式不正确");return INPUT;}if (!WebUtil.checkVerifycode(verifycode)) {WebUtil.addError("验证码输入错误!");return INPUT;}UserDTO user = WebUtil.getUserByUserName(userName);if (user == null) {WebUtil.addError("找不到此用户");return INPUT;}if(!user.getEmail().equals(email)){WebUtil.addError("用户名和邮箱地址不匹配");return INPUT;}//产生出来的新密码String emailUrl = "";try {//这里看情况而定,你可以采用更好的算法emailUrl = WebUtil.getBasePath(ServletActionContext.getRequest())+"resetpwd?sid="+DESPlus.encrypt(userName)+"&type="+user.getPassword();} catch (Exception e1) {}try {WebUtil.sendEmail(user, emailUrl,email);user = null;} catch (Exception e) {return INPUT;}return SUCCESS;}

?

?

??? 具体页面,我想就不用我在贴出来了吧。

热点排行