邮箱服务器的基本概念
邮件的客户端:可以只安装在电脑上的也可以是网页形式的
邮件服务器:起到邮件的接受与推送的作用
邮件发送的协议:SMTP (协议:就是数据传输的约束)
接受邮件的协议:POP3 IMAP
邮件的发送过程
javaMail
JavaMail就是一套API,没有特殊的概念。
1.使用javaMail发送邮件
(1)导入jar包: 添加javamail的jar
(2)借助于本机安装的邮箱服务器
@Test
public void testSendMail() throws Exception {
// 使用properties类进行相关配置
Properties props = new Properties();
// 设置发送邮件的协议
props.setProperty("mail.transport.protocol", "SMTP");
// 设置发送邮件的服务器
props.setProperty("mail.host", "localhost");
// 设置进行用户验证
props.setProperty("mail.smtp.auth", "true");
// 创建验证器
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
//
return new PasswordAuthentication("tom", "123123");
}
};
//根据上面的Properties的配置和验证器打开一个session
Session session = Session.getInstance(props, auth);
//创建message对象
Message message = new MimeMessage(session);
//设置邮件标题
message.setSubject("tom发送给jerry的测试邮件");
//设置邮件内容(有多个API,可以满足多各种需求)
message.setText("我就是测试邮件!!!");
//设置发送者地址
message.setFrom(new InternetAddress("tom@igeek.com"));
//这只接受者地址
message.setRecipient(RecipientType.TO, new InternetAddress("jerry@igeek.com"));
//发送
Transport.send(message);
}
2.将发送邮件的过程封装为工具类
public class MailUtil {
//发送者的邮箱地址
private String fromAddress = "tom@igeek.com";
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
//发送者邮箱密码
private String fromPass = "123123";
public void setFromPass(String fromPass) {
this.fromPass = fromPass;
}
public void sendMaill(String title,String content,String toAddress) throws Exception {
// 使用properties类进行相关配置
Properties props = new Properties();
// 设置发送邮件的协议
props.setProperty("mail.transport.protocol", "SMTP");
// 设置发送邮件的服务器
props.setProperty("mail.host", "localhost");
// 设置进行用户验证
props.setProperty("mail.smtp.auth", "true");
// 创建验证器
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
String name = fromAddress.substring(0, fromAddress.indexOf("@"));
return new PasswordAuthentication(name, fromPass);
}
};
//根据上面的Properties的配置和验证器打开一个session
Session session = Session.getInstance(props, auth);
//创建message对象
Message message = new MimeMessage(session);
//设置邮件标题
message.setSubject(title);
//设置邮件内容(有多个API,可以满足多各种需求)
message.setText(content);
//设置发送者地址
message.setFrom(new InternetAddress(fromAddress));
//这只接受者地址
message.setRecipient(RecipientType.TO, new InternetAddress(toAddress));
//发送
Transport.send(message);
}
}
3.使用网易邮箱发送邮件(从网易邮箱发送邮件到QQ邮箱)
(1)分别注册网易邮箱和QQ邮箱,开始网易和QQ邮箱进行相关的配置:
@Test
public void testSendMail1() throws Exception {
// 使用properties类进行相关配置
Properties props = new Properties();
// 设置发送邮件的协议
props.setProperty("mail.transport.protocol", "SMTP");
// 设置发送邮件的服务器
props.setProperty("mail.host", "smtp.163.com");
// 设置进行用户验证
props.setProperty("mail.smtp.auth", "true");
// 创建验证器
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
//你的163邮箱的账号和密码
return new PasswordAuthentication("11111111111@163.com", "123456");
}
};
//根据上面的Properties的配置和验证器打开一个session
Session session = Session.getInstance(props, auth);
//创建message对象
Message message = new MimeMessage(session);
//设置邮件标题
message.setSubject("研发会议通知");
//设置邮件内容(有多个API,可以满足多各种需求)
message.setContent("明天上午10点整大会议室开会,准备好会议资料。","text/plain;charset=utf-8");
//设置发送者地址
message.setFrom(new InternetAddress("15852508901@163.com"));
//这只接受者地址
message.setRecipient(RecipientType.TO, new InternetAddress("2780004063@qq.com"));
//发送
Transport.send(message);
}
//发不出去,163邮箱服务器会默认这是一条垃圾邮件,不会发出去的
4.邮箱验证业务
业务:用户输入邮箱注册,服务器发送邮件给邮箱,在邮箱中点击链接再次请求服务器验证。链接中必须携带唯一标识符。
//大致过程(语文能力差,应该能读懂我的意思)
用户在页面输入自己的邮箱,后台在servlet获取到用户的邮箱,传到service,在service层调用uuid为用户生成随机的唯一标识码,并且发送邮件给注册的这个邮箱,携带刚随机生成的唯一标识符,然后将这个用户的邮箱激活状态默认设置为0,这个注册的人的邮箱收到携带唯一标识码的邮件后,点击这个链接,后台servlet写一个根据用户的唯一标识符(code)修改用户邮箱的激活状态,这样这个用户的邮箱就激活了。
具体部分代码:(借助于本机安装的邮箱服务器)
(1)数据库创建一个表,存储用户页面填写的信息:(必须包含字段用户邮箱,唯一标识符,邮箱状态)
create table igeek_user(
id int primary key auto_increment,
Email varchar(20) not null,
checked int default '0',
code varchar(50)
);
(2)在dao层书写方法,保存用户注册的信息,和根据用户唯一标识符修改邮箱状态
public class IgeekDAOImpl implements IIgeekDAO {
private QueryRunner qr = new QueryRunner(JDBCUtils.getDateSource());
@Override
public int reg(IgeekUser iu) {
String sql = "insert into igeek_user(email,checked,code) values(?,default,?)";
try {
return qr.update(sql,iu.getEmail(),iu.getCode());
} catch (SQLException e) {
e.printStackTrace();
}
return -1;
}
@Override
public int checked(String code) {
String sql = "update igee_user set checked = 1 where code = ?";
try {
return qr.update(sql,code);
} catch (SQLException e) {
e.printStackTrace();
}
return -1;
}
}
(3)Service层
public int reg(IgeekUser iu) {
//生成唯一标识符
String code = UUID.randomUUID().toString().replaceAll("-", "");
iu.setCode(code);
//发送验证的邮件
MailUtil mu = new MailUtil();
mu.setFromAddress("tom@igeek.com");
mu.setFromPass("123123");
StringBuffer sb = new StringBuffer();
sb.append("这里是邮箱验证,请点击");
sb.append("[<a href='http://127.0.0.1:8888/ day12_demo1/igeekUser?op=check&code="+code+"'></a>]进行验证");
sb.append("<br/>如果点击之后没有反应,请将下面的连接复制到浏览器中验证.<br/>");
sb.append("http://127.0.0.1:8888/ day12_demo1/igeekUser?op=check&code="+code);
sb.append("祝您验证成功!");
try {
mu.sendMaill("邮箱验证", sb.toString(), iu.getEmail());
} catch (Exception e) {
e.printStackTrace();
}
return igeekDAO.reg(iu);
}
(4)servlet里面:
@WebServlet("/igeekUser")
public class IgeekUserServlet extends BaseServlet {
private IIgeekUserService igeekUserService = (IIgeekUserService) BeansFactory.getBean("igeekUserService");
public void reg(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求参数
String email = request.getParameter("email");
IgeekUser user = new IgeekUser();
user.setEmail(email);
igeekUserService.reg(user);
response.setCharacterEncoding("utf-8");
response.getWriter().write("请进入邮箱验证");
}
public void check(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String code = request.getParameter("code");
int result = igeekUserService.checked(code);
response.setCharacterEncoding("utf-8");
if(result == 1) {
response.getWriter().write("验证通过");
}else {
response.getWriter().write("验证失败");
}
}
}
(5)可以写一个简单的测试页面进行测试:
<body>
<form action="igeekUser" method="post">
邮箱:<input type="emial" name="email"/>
<input type="submit" value="走你"/>
</form>
</body>
转载:https://blog.csdn.net/qq_39182939/article/details/104593929