• 发送激活邮件

电子邮箱:邮件服务器上的一块空间;

    邮件服务器:类比于web服务器(tomcat),有相应的服务器软件;

    邮件协议:大公司发送和接收服务器分开,也可以都用一个服务器。

                           SMTP:简单的邮件发送协议;
                           POP3:接收邮件的一个协议;

    邮件发送的全过程:理论上需要联网,但是通过搭建在本地的服务器,可以在本地进行邮件的发送。

  • 搭建邮箱服务器:

    • 安装邮箱服务器(易邮邮箱服务器,就按默认的安装在C盘)
    • 打开该服务器,修改域名:工具-->服务器设置-->单域名改为自定义,例如:shop.com。
    • 注册几个内部账号:账号-->新建账号。密码设为55555
    • 注册一个自定义的官方账号:service    密码:55555
  • 安装邮件客户端软件(可以接发邮件):避免了网页版session的过期离线问题。
    • 流行的有软件有:outlook(微软收费)、foxmail(免费,选用foxmail)
    • 配置
                    * 配置发送邮件服务器:localhost
                    * 配置接收邮件服务器:localhost
  • 编码实现邮件发送(见MailUtils.java)
  • 用户激活

    • 在邮箱客户端中点击激活链接:

      • 根据链接中传递的激活码进行查询                         
      • 如果用户不为空:修改用户状态:0  -->  1,向前台传递激活成功消息。
      • 如果用户为空:激活码失效或被篡改,向前台传递激活失败消息。
 代码如下:
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
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;
/**
 * 发送邮件工具类
 */
public class MailUtils {
    /**
     * 发送邮件的方法
     * @param to 收件人
     * @param code 激活码
     */
    public static void sendMail(String to, String code){
        /**
         * 1.获得一个session对象
         * 2.创建一个代表邮件的对象的Message
         * 3.发送邮件Transport
         */
        //1.获得一个session对象
        Properties props = new Properties();
        props.setProperty("mail.host", "localhost");//指定发送邮件的主机是谁:localhost
        Session session = Session.getInstance(props, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("service@XXX.com", "55555");
            }
        });
        //2.创建一个代表邮件的对象的Message
        Message message = new MimeMessage(session);
        try {
            //2.1:设置发件人
            message.setFrom(new InternetAddress("service@shop.com"));
            //2.2:设置收件人
            /*抄送:CC ; 密送:BCC*/
            message.addRecipient(RecipientType.TO, new InternetAddress(to));
            //2.3:设置邮件标题
            message.setSubject("官方账号激活邮件!");
            //2.4:设置邮件正文
            message.setContent("<h2>欢迎您XXXX,这是官方发送的账号激活邮件正文,请勿泄露<br/>此邮件,以免给用户带来损失!请点击后面的链接完成账户激活操作。</h2><h3><a href='http://127.0.0.1:8080/XXXX/user_active.action?code="+code+"'>http://127.0.0.1:8080/XXX/user_active.action/code="+code+"</a></h3>", "text/html;charset=UTF-8");
            //3.发送邮件
            Transport.send(message);
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
     public static void main(String[] args){
        sendMail("aaa@XXX.com", "55555");
    }
}



用户激活的action方法:
     /**
      * 用户激活的方法
      */
     public String active() {
          // 根据激活码查询用户:
          User existUser = userService.findByCode(user.getCode());
          // 判断
          if (existUser == null) {
              // 激活码错误的
              this.addActionMessage("激活失败:激活码错误!");
          } else {
              // 激活成功
              // 修改用户的状态
);
              existUser.setCode(null);
              userService.update(existUser);
              this.addActionMessage("激活成功:请去登录!");
          }
          return "msg";
     }

SSH实战 · JAVA发送邮件相关的更多相关文章

  1. SSH实战OA 11:BBS模块

    <SSH实战OA>系列博客的系统管理.权限管理等内容后面再补上吧,先继续第三个模块:网上交流模块.网上交流主要做两个需求:论坛管理和论坛. BBS的一些基本术语: 板块:也叫做" ...

  2. 【实战Java高并发程序设计 7】让线程之间互相帮助--SynchronousQueue的实现

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  3. 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容

    第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...

  4. 第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理

    温馨提示: 这篇文章是依赖前几篇的文章的. 第一篇:微信公众平台开发实战之了解微信公众平台基础知识以及资料准备 第二篇 :微信公众平台开发实战之开启开发者模式,接入微信公众平台开发 第三篇 :微信公众 ...

  5. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备

    相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...

  6. 《实战java高并发程序设计》源码整理及读书笔记

    日常啰嗦 不要被标题吓到,虽然书籍是<实战java高并发程序设计>,但是这篇文章不会讲高并发.线程安全.锁啊这些比较恼人的知识点,甚至都不会谈相关的技术,只是写一写本人的一点读书感受,顺便 ...

  7. redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐

    redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐 1.Redis 官方网站下载: http://redis.io/dow ...

  8. Java发送邮件示例

    利用Java发送邮件示例: 1.发送QQ邮件 import java.util.Properties; import javax.mail.Message; import javax.mail.Mes ...

  9. 实战 Java 16 值类型 Record - 2. Record 的基本用法

    在上一篇文章实战 Java 16 值类型 Record - 1. Record 的默认方法使用以及基于预编译生成相关字节码的底层实现中,我们详细分析了 Record 自带的属性以及方法和底层字节码与实 ...

随机推荐

  1. 【转】Asp.net关闭弹出窗口刷新父窗口

    通常情况下,关闭窗口时不需要对父窗口做任何操作,但如果子窗口是某一对象的修改画面,这时,当关闭子窗体时就需要对父窗口刷新,刷新可以通过三种方式来实现:1,采用window.opener.locatio ...

  2. 转:WaitForSingleObject()函数、WaitForMultipleObject()函数

    http://blog.csdn.net/xiaobai1593/article/details/6672193 在多线程下面,有时候我们会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以 ...

  3. 基于dubbo构建分布式项目与服务模块

      关于分布式服务架构的背景和需求可查阅http://dubbo.io/.不同于传统的单工程项目,本文主要学习如何通过maven和dubbo将构建分布项目以及服务模块,下面直接开始. 创建项目以及模块 ...

  4. Linux 利用lsof命令恢复删除的文件

    lsof命令 lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需 ...

  5. JQUERY UI Datepicker Demo

    datepicker_demo.htm <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &quo ...

  6. UVALive-4839 HDU-3686 Traffic Real Time Query System 题解

    题目大意: 有一张无向连通图,问从一条边走到另一条边必定要经过的点有几个. 思路: 先用tarjan将双连通分量都并起来,剩下的再将割点独立出来,建成一棵树,之后记录每个点到根有几个割点,再用RMQ求 ...

  7. 一站式解决,Android 拍照 图库的各种问题.

    在android开发中, 在一些编辑个人信息的时候,经常会有头像这么一个东西,就两个方面,调用系统相机拍照,调用系统图库获取图片.但是往往会遇到各种问题: 1.oom 2.图片方向不对 3.activ ...

  8. 干掉命令行窗口下MySql乱码

    晚上重温dos窗口操作mysql的时候,遇到了一个巨蛋疼的问题------>中文验证码  -->_-->,所以找了找资料弄懂了怎么解决乱码问题,,小记一下. 新建一个表 create ...

  9. HDU 2202 计算几何

    最大三角形 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  10. Django数据导入

    从网上下载的一些数据,excel表格,xml文件,txt文件等有时候我们想把它导入数据库,应该如何操作呢? 以下操作符合 Django版本为 1.6 ,兼顾 Django 1.7, Django 1. ...