注册网站账号的时候,都需要发送激活邮件,然后让注册的用户点击激活链接方可完成注册,不过话说回来,为什么注册的时候需要发送邮件呢?为什么不注册的时候直接激活呢?一定要收一封激活帐号的邮件?网站这样做的好处是什么?又或者说这样做的目的又是什么呢?小编想到了几点,不是很完整,还请小伙伴多多指教,首先确保注册的用户使用了正确的邮箱;第二,用户密码丢失的时候,通过邮箱找回或者忘记密码的时候重置密码比较安全;第三,通过有效邮箱建立用户数据库,对流失用户可以展开二次营销。在最近的项目中,遇到这样的需求,注册的时候,需要向发送邮件,今天这篇博客,小编就简单的来总结一下,如何实现邮件发送这个功能,希望对有需要的小伙伴有一定的帮助,还请各位大牛们多多指教。

首先第一步,我们需要搭建邮箱服务器,安装邮箱服务器,小编已经上传,点击下载,安装服邮箱服务器,注册账号,如下图所示:

第二步、我们需要安装客户端软件,最常用的outlook和foxmail都可以,需要注意的是,一定要进行配置哦,比如小编在服务器上新建了一个帐号aaa@shop.com,我们就需要在foxmail里面进行配置,如下图所示:

接着我们来编写代码实现邮件发送,是不是有点点小激动nie`(*∩_∩*)′,要想实现邮件发送的功能,首先我们需要把mail.jar包和activation.jar包复制到lib文件下,这两个jar包是管邮件发送的,小编已经上传,点击下载。jar包已经导入好,接着我们就可以编写代码了,首先我们在utils包下面建立一个类MailUitls,具体代码如下所示:

package cn.itcast.shop.utils;

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;

/**
 * 邮件发送工具类
 * @author 丁国华
 *
 */
public class MailUitls {
	/**
	 * 发送邮件的方法
	 * @param to	:收件人
	 * @param code	:激活码
	 */
	public static void sendMail(String to,String code){
		/**
		 * 1.获得一个Session对象.
		 * 2.创建一个代表邮件的对象Message.
		 * 3.发送邮件Transport
		 */
		// 1.获得连接对象
		Properties props = new Properties();
		props.setProperty("mail.host", "localhost");
		Session session = Session.getInstance(props, new Authenticator() {

			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("service@shop.com", "111");
			}

		});
		// 2.创建邮件对象:
		Message message = new MimeMessage(session);
		// 设置发件人:
		try {
			message.setFrom(new InternetAddress("service@shop.com"));
			// 设置收件人:
			message.addRecipient(RecipientType.TO, new InternetAddress(to));
			// 抄送 CC   密送BCC
			// 设置标题
			message.setSubject("来自网上商城的官方激活邮件");
			// 设置邮件正文:
			message.setContent("<h1>网上商城官方激活邮件!点下面链接完成激活操作!</h1><h3><a href='http://192.168.36.103:8080/shop/user_active.action?code="+code+"'>http://192.168.21.242:8080/shop/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@shop.com","11111111111111");
	}
}

接着我们需要在UserService.java中发送激活邮件,代码如下所示:

package cn.itcast.shop.user.service;

import org.springframework.transaction.annotation.Transactional;

import cn.itcast.shop.user.dao.UserDao;
import cn.itcast.shop.user.vo.User;
import cn.itcast.shop.utils.MailUitls;
import cn.itcast.shop.utils.UUIDUtils;

/**
 * 用户模块业务层代码
 * @author 丁国华
 */

@Transactional

public class UserService {

	//注入UserDao
	private UserDao userDao;

	public void setUserDao(UserDao userDao){
		this.userDao =userDao;

	}

	//按用户名查询用户的方法
	public User findByUsername (String username){
		return userDao.findByUsername(username);
	}

	//业务层完成用户注册代码
	public void save(User user) {
		//将数据存入到数据库
		user.setState(0); //0代表用户激活  1代表用户已经激活
		String code = UUIDUtils.getUUID()+UUIDUtils.getUUID();
		user.setCode(code);
		userDao.save(user);

		//发送激活邮件
		MailUitls.sendMail(user.getEmail(), code);

	}

}

最关键的代码就是后面的一句,发送激活邮件,至此,我们的代码部分已经编写完毕,我们来注册一个帐号,如下图所示:

来看看小编的邮箱,有没有收到邮件呢?效果图如下所示:

我们来看一下我们的数据库,如下图所示:

                    如上图,我们所看见的,数据可以插入到数据库里面,但是出现了中文乱码问题,怎么解决呢?我们可以对JDBC进行如下设置,具体代码如下所示:

jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql:///shop?characterEncoding=UTF-8
jdbc.user = root
jdbc.password =123456

我们再来重新注册一次,如下图所示:

接着,我们来看一下数据库里面,会有怎么样的奇迹nie?如下图所示:

小编寄语:这篇博客小编主要简单的介绍了用户注册的时候发送激活邮件,总的来说分为三步,第一步用户注册以及为什么注册的时候需要发送激活邮件;第二步发送激活邮件,包括搭建邮箱服务器,安装客户端软件等等;第三步、编码实现发送邮件,在实现这个功能的时候,小编犯了一个错误,那就是在foxmail里面没有配置账号,导致收不到邮件,所以说一定要信息啊,在下一篇博客中,小编将继续介绍SSH网上商城的相关知识,精彩未完待续`(*∩_∩*)′!

SSH网上商城---邮件发送的更多相关文章

  1. SSH网上商城---用户激活

    在前面的博客中,小编主要结合SSH网上商城这个项目,简单的介绍了如何实现邮件发送的这个功能,邮件发送了,接下来就是激活了,为什么呢?现在大多网站都要通过对账号进行激活,然后才能注册成功,这是防止恶性注 ...

  2. SSH网上商城---需求分析+表关系分析

    SSH---小编初次接触的时候傻傻的以为这个跟SHE有什么关系呢?又是哪路明星歌手,后来才知道小编又土鳖了,原来SSH是这个样子滴,百度百科对她这样阐述,SSH即 Spring + Struts +H ...

  3. 《SSH网上商城》-视频目录--代码可以跑起来

    本课程是2015年2月份的,就是14年底的. 课程第一天的代码-添加 jsp-api.jar   servlet-api.jar就可以跑起来,环境 JDK1.7 和tomcat8, SSH网上商城\S ...

  4. SSH网上商城一

    Java高级项目之SSH网上商城项目实战: 1.采用目前最主流的三大框架开发即Struts2+Spring+Hibernate框架整合开发.2.通过AJAX技术提供良好的用户体验.3.提供了邮箱激活的 ...

  5. SSH网上商城---使用ajax完成用户名是否存在异步校验

    小伙伴在上网的时候,需要下载或者观看某些视频资料,更或者是在逛淘宝的时候,我们都需要注册一个用户,当我们填写好各种信息,点击确定的时候,提示用户名已经存在,小编就想,为什么当我们填写完用户名的时候,她 ...

  6. [Java]ssh网上商城总结 标签: hibernatessh 2016-05-15 21:03 1099人阅读 评论(32)

    前几日敲完了ssh网上商城,虽然现在已经敲完了整个系统,却发现自己对于ssh,了解的一点都不多,什么是struts2,什么是spring,什么是hibernate,自己都是稀里糊涂,然后看了一下后面的 ...

  7. 【SSH网上商城项目实战30】项目总结

      转自:https://blog.csdn.net/eson_15/article/details/51479994 0. 写在前面 项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了 ...

  8. 【SSH网上商城项目实战30】项目总结(附源码下载地址)

    项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了,积少成多,写博客的过程是固化思路的一个过程,对自己很有用,同时也能帮助别人.顺便说个题外话,在学习的过程中肯定会遇到很多异常出现,我们 ...

  9. SSH网上商城---商品详情页的制作

    在前面的博文中,小编分别简单的介绍了邮件的发送以及邮件的激活,逛淘宝的小伙伴都有这样的体会,比如在搜索框中输入连衣裙这个商品的时候,会出现多种多样各种款式的连衣裙,连衣裙的信息包括价格,多少人购买,商 ...

随机推荐

  1. [HNOI 2018]道路

    Description 题库链接 给出一棵含有 \(n\) 个叶子节点的二叉树,对于每个非叶子节点的节点,其与左儿子相连的边为公路,其与右儿子相连的边为铁路.对于每个节点,选择一条与其儿子相连的铁路或 ...

  2. [HNOI 2016]最小公倍数

    Description 题库链接 给定一张 \(N\) 个顶点 \(M\) 条边的无向图(顶点编号为 \(1,2,\cdots,n\) ),每条边上带有权值.所有权值都可以分解成 \(2^a\time ...

  3. codeforces868D Huge Strings

    You are given n strings s1, s2, ..., sn consisting of characters 0 and 1. m operations are performed ...

  4. ●POJ 3378 Crazy Thairs

    题链: http://poj.org/problem?id=3378 题解: 树状数组维护,高精度. 依次考虑以每个位置结尾可以造成的贡献. 假设当前位置为i,为了达到5个元素的要求,我们需要求出,在 ...

  5. [bzoj4625][BeiJing2016]水晶

    来自FallDream的博客,未经允许,请勿转载,谢谢. 不用惊慌,今天的题都不是小强出的.——融入了无数心血的作品,现在却不得不亲手毁掉,难以体会他的心情啊 .——那也是没有办法的事情,能量共振不消 ...

  6. [Noi2016]网格

    来自FallDream的博客,未经允许,请勿转载,谢谢.   跳蚤国王和蛐蛐国王在玩一个游戏. 他们在一个 n 行 m 列的网格上排兵布阵.其中的 c 个格子中 (0≤c≤nm),每个格子有一只蛐蛐, ...

  7. BZOJ4589 Hard Nim(快速沃尔什变换模板)

    终于抽出时间来学了学,比FFT不知道好写到哪里去. #include <cstdio> typedef long long ll; ,p=1e9+; int k,m,n,a[N],pi[N ...

  8. Linux配置服务器的一点总结

    一.Linux初始化服务 首先搞清楚四个概念: 进程:正在运行的程序,有自己独立的内存空间. 线程:是进程的下属单位,开销较进程小,没有自己独立的内存空间. 作业:由一系列进程组成,来完成某一项任务. ...

  9. Modern Algebra 读书笔记

    Modern Algebra 读书笔记 Introduction 本文是Introduction to Modern Algebra(David Joyce, Clark University)的读书 ...

  10. WPF TextBlock 判断 isTextTrimmed 文本是否超出

    WPF TextBlock 设置TextTrimming情况下 判断 isTextTrimmed(Text 文本是否超出 是否出现了省略号) private bool HasTextTrimmed(T ...