package cn.buy.util; import java.security.GeneralSecurityException; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message.RecipientType; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import com.sun.mail.util.MailSSLSocketFactory; import cn.buy.entity.User; public class Sendmail extends Thread { private User user = null; public Sendmail(User user) { this.user = user; } @Override public void run() { // 跟smtp服务器建立一个连接 Properties p = new Properties(); // 设置邮件服务器主机名 p.setProperty("mail.host", "smtp.qq.com");// 指定邮件服务器,默认端口 25 // 发送服务器需要身份验证 p.setProperty("mail.smtp.auth", "true");// 要采用指定用户名密码的方式去认证 // 发送邮件协议名称 p.setProperty("mail.transport.protocol", "smtp"); // 开启SSL加密,否则会失败 MailSSLSocketFactory sf = null; try { sf = new MailSSLSocketFactory(); } catch (GeneralSecurityException e1) { e1.printStackTrace(); } sf.setTrustAllHosts(true); p.put("mail.smtp.ssl.enable", "true"); p.put("mail.smtp.ssl.socketFactory", sf); // 开启debug调试,以便在控制台查看 // session.setDebug(true);也可以这样设置 // p.setProperty("mail.debug", "true"); // 创建session Session session = Session.getDefaultInstance(p, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { // 用户名可以用QQ账号也可以用邮箱的别名 PasswordAuthentication pa = new PasswordAuthentication( "652459753@qq.com", "mftgsonsmrozbcbh"); // 后面的字符是授权码,用qq密码不行!! return pa; } }); session.setDebug(true);// 设置打开调试状态 try { // 声明一个Message对象(代表一封邮件),从session中创建 MimeMessage msg = new MimeMessage(session); // 邮件信息封装 // 1发件人 msg.setFrom(new InternetAddress("652459753@qq.com")); // 2收件人 msg.setRecipient(RecipientType.TO, new InternetAddress(user.getOB_EMAIL())); // 3邮件内容:主题、内容 msg.setSubject("邮箱注册橙橙网通知:欢迎注册***账号,请点击链接激活账号"); // StringBuilder是线程不安全的,但是速度快,这里因为只会有这个线程来访问,所以可以用这个 StringBuilder sbd = new StringBuilder(); sbd.append("橙橙网:<br/>欢迎!请确认此邮件地址以激活您的账号。<br/>"); sbd.append("<font color='red'><a href='http://192.168.19.62:8080/Orange_buy/home/register.jsp' target='_blank'"); sbd.append(">立即激活</a></font><br/>"); sbd.append("或者点击下面链接:<br/>"); sbd.append("http://192.168.19.62:8080/Orange_buy/home/register.jsp <br/>"); sbd.append("这是一封自动发送的邮件;如果您并未要求但收到这封信件,您不需要进行任何操作。"); msg.setContent(sbd.toString(), "text/html;charset=utf-8");// 发html格式的文本 // 发送动作 Transport.send(msg); System.out.println("给" + user.getOB_EMAIL() + "发送邮件成功。"); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } }
第一步:我们需要在qq邮箱设置授权码:在设置>账户>
然后,servlet
//收集参数 String pwd = request.getParameter("pwd"); String emails = request.getParameter("email"); if(user!=null){ //发送激活邮件 //这里有一个小知识点,必须新开一个线程来发邮件,不能把发邮件的动作写在这里 //如果写在这里,用户的前台显示会等待过长时间,不好! new Sendmail(user).start(); System.out.println("您已经注册成功,请去邮箱激活账号后再进行登录,如果没有收到邮件,请稍等!<br/>"); }else{ System.out.println("很抱歉,服务器繁忙,注册失败,需要重新注册!"); } //添加邮箱 user.setOB_EMAIL(emails); //把MD5加密的放到实体类中去 user.setOB_PASSWORD(md5.getkeyBeanofStr(pwd)); //类型 user.setOB_TYPE(1); try { int emailadd = service.EmailAdd(user); if (emailadd>0) { request.getRequestDispatcher("/home/Loginsuccess.jsp").forward(request, response); } } catch (Exception e) { e.printStackTrace(); } /** *用户的登录 */