public class SendMail {
/**
* 发送简单邮件
*
* @param str_from :发件人地址
* @param str_to :收件人地址
* @param str_title :邮件标题
* @param str_content :邮件正文
*/
public static boolean send(String str_from, String str_to, String str_title,
String str_content) {
try {
// 建立邮件会话
Properties props = new Properties(); // 用来在一个文件中存储键-值对的,其中键和值是用等号分隔的,
// 存储发送邮件服务器的信息
props.put("mail.smtp.host", MailConstant.mailServer);
// 同时通过验证֤
props.put("mail.smtp.auth", "true");
// 根据属性新建一个邮件会话
Session s = Session.getInstance(props);
// 有他会打印一些调试信息。
// s.setDebug(true);
// 由邮件会话新建一个消息对象
MimeMessage message = new MimeMessage(s);
// 设置邮件
InternetAddress from = new InternetAddress(str_from);
message.setFrom(from);// 设置发件人的地址ַ
// 设置收件人,并设置其接收类型为TO
InternetAddress to = new InternetAddress(str_to);
message.setRecipient(Message.RecipientType.TO, to);
// 设置标题
message.setSubject(str_title, "UTF-8");
// 设置信件内容
// 发送文本邮件
// message.setText(str_content,"UTF-8");
// 发送HTML邮件
message.setContent(str_content, "text/html;charset=gbk");
// 设置发信时间
message.setSentDate(new Date());
// 设置编码格式
// 存储邮件信息
message.saveChanges();
// 发送邮件
Transport transport = s.getTransport("smtp");
// 以smtp方式登录邮箱,第一个参数是发送邮件用的邮件服务器SMTP地址,第二个参数为用户名,第三个参数为密码
transport.connect(MailConstant.mailServer, MailConstant.mailAddress,
MailConstant.mailPassword);
// 发送邮件,其中第二个参数是所有已设好的收件人地ַ
transport.sendMessage(message, message.getAllRecipients());
transport.close();
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
boolean bool = SendMail.send("from aaaa@163.com", "toxxxx@qq.com", "title邮件标题",
"恭喜你注册成功,请点击链接完成注册"+"http://www.baidu.com");
System.out.println(bool);
}
}
发送邮件需要注意的地方:
进发邮件的账号,要设置开启POP3/SMTP/IMAP服务.
http://blog.csdn.net/tjcyjd/article/details/6886351
思路:
思路就是发送邮件→连接邮件里的URL→修改密码
重点就是如何生成这个url和如何解析这个url.
需要注意的是一个url只能修改一次密码,当同一帐号发送多封邮件,只有最后一封邮件的url
是有效的
随便搞一长串的随机字符auth_key,有意义也好,没意义也好,总之要看(研究)不出来是啥,全局唯一(组合使用uuid、时间、机器特征、随机数等)。
然后在db里有张表,用uid和这个auth_key关联,同时可以有过期时间的字段。
同一个uid,只有一条记录。
甚至可以有一个单独的程序(线程、进程)去扫描此表,过期的记录就删掉。
给用户的url里带回那个auth_key,到db里查查有没有记录,过没过期,然后就可以让用户修改密码了。