美文网首页JavaJava 杂谈Java实战
基于163邮件服务器实现邮件发送

基于163邮件服务器实现邮件发送

作者: 不孤独的字符串 | 来源:发表于2019-04-07 10:13 被阅读1次

    项目中总是会有利用邮箱进行消息的发送和通知,基于163邮件服务器便可实现邮件发送。开发需先打开邮箱的SMTP服务,利用javax中的mail包实现对邮件的操作。

    封装邮件操作工具类MailUtil,该案例基于邮件服务器实现账号验证:

    public class MailUtil {
        public static final String FROM = "*******@163.com"; //发件人的email
        public static final String PWD = "*****"; //发件人密码--邮箱密码
        public static final String URL = "http://****"; //项目主页
        public static final int TIMELIMIT = 1000*60*60*24; //激活邮件过期时间24小时
        public static final String HOST = "smtp.163.com"; //163的smtp服务器
        public static final String SMTP = "smtp";
        //激活账号
        public static UserAuth activateMail(UserAuth user) throws Exception {
            //注册邮箱
            String email  = user.getAccount();
            //当前时间戳
            Long curTime = System.currentTimeMillis();
            //激活的有效时间
            Long activateTime = curTime+TIMELIMIT;
            //激活码--用于激活邮箱账号
            String token = Md5Util.md5(email+curTime);
            user.setToken(token);
            //过期时间
            user.setTimes(activateTime);
            //发送的邮箱内容
            String content = "<p>欢迎使用MINISCENE!<br><br>请在24小时内点击下面的链接激活帐户:"+"<br><a href='"+URL+"/user/activate.html?v=1.0&token="+token+"&email="+email+"'>"+URL+"/user/activate.html?v=1.0&token="+token+"&email="+email+"</a></p>";
            //调用发送邮箱服务
            MailUtil.sendMail(email, "MINISCENE账号激活", content);
            return user;
        }
        //找回密码
        public static int codeMail(String email,String code){
            //发送的邮箱内容
            String content = "<p>答应我,不要轻易告诉别人验证码,并在5分钟内重置密码:<br>请收好您的验证码:"+code+"</p>";
            //调用发送邮箱服务
            try{
                MailUtil.sendMail(email, "密码找回", content);
                return 1;
            }catch (Exception e){
                e.printStackTrace();
                return 0;
            }
        }
        //邮件发送
        public static void sendMail(String email,String title,String content) throws Exception {
     
            Properties props = new Properties(); //加载一个配置文件
            // 使用smtp:简单邮件传输协议
            props.put("mail.smtp.host", HOST);//存储发送邮件服务器的信息
            props.put("mail.smtp.port", 465);//设置端口
            props.put("mail.smtp.auth", "true");//同时通过验证
            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            Session session = Session.getInstance(props);//根据属性新建一个邮件会话
            MimeMessage message = new MimeMessage(session);//由邮件会话新建一个消息对象
            message.setFrom(new InternetAddress(FROM));//设置发件人的地址
            message.setRecipient(Message.RecipientType.CC, new InternetAddress(FROM)); //抄送
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(email));//设置收件人,并设置其接收类型为TO
            message.setSubject(title);//设置标题
            //设置信件内容
            message.setContent(content, "text/html;charset=gbk"); //发送HTML邮件
            message.setSentDate(new Date());//设置发信时间
            message.saveChanges();//存储邮件信息
            //发送邮件
            Transport transport = session.getTransport(SMTP);
            transport.connect(FROM, PWD);
            transport.sendMessage(message, message.getAllRecipients());//发送邮件,其中第二个参数是所有已设好的收件人地址
            transport.close();
        }
    }
    

    其中对于敏感信息使用了MD5进行加密,Md5Util.java:

    public class Md5Util {
        //MD5加密,生成32位md5码
        public static String md5(String inStr){
            MessageDigest StrMD5 = null;
            try{
                StrMD5 = MessageDigest.getInstance("MD5");
            }catch (Exception e){
                e.printStackTrace();  
                return "";  
            }  
            char[] charArray = inStr.toCharArray();  
            byte[] byteArray = new byte[charArray.length];  
            for (int i = 0; i < charArray.length; i++)
                byteArray[i] = (byte) charArray[i];
            byte[] md5Bytes = StrMD5.digest(byteArray);
            StringBuffer hexValue = new StringBuffer();  
            for (int i = 0; i < md5Bytes.length; i++){
                int val = ((int) md5Bytes[i]) & 0xff;
                if (val < 16)
                    hexValue.append("0");
                hexValue.append(Integer.toHexString(val));
            }  
            return hexValue.toString();  
        }
    }
    

    相关文章

      网友评论

        本文标题:基于163邮件服务器实现邮件发送

        本文链接:https://www.haomeiwen.com/subject/ltbjiqtx.html