zoukankan      html  css  js  c++  java
  • java如何实现发送邮箱

    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();
                }
                /**
                 *用户的登录
                 */
  • 相关阅读:
    [转]CTO谈豆瓣网和校内网技术架构变迁
    Hashtable Dictionary[必看]
    DotFuscator 小记
    博客园随笔添加自己的版权信息 [转]
    [转]关于支付宝API开发的一点心得
    .NET下实现分布式缓存系统Memcached
    4.9 利用对应的泛型替换Hashtable[转]
    dllhost.exe 解释
    C#命名规范,SqlServer命名规范
    用XenoCode 2006 加密dll(.NET
  • 原文地址:https://www.cnblogs.com/www-yang-com/p/9633442.html
Copyright © 2011-2022 走看看