JavaMail简单实践

来源:互联网 发布:家庭理财记账软件 编辑:程序博客网 时间:2024/05/22 03:17

JavaMail是一种处理电子邮件的编程接口,它是Sun发布的用来处理email的API,通俗地讲,

就是帮助我们用java代码实现邮件的发送和接收。


javamail在web开发中的应用
1.用户注册后,网站发送一封激活邮件验证
2.用户过生日,系统发送生日祝福邮件
3.将最新活动和优惠以邮件的形式告知会员
...

邮件开发中的基本术语
1.电子邮箱

电子邮箱(E-mail address)是用户在某个邮箱服务器上申请的一个帐号,用户使用邮箱服务器分配

的帐号和内存空间,进行邮件的发送和保存。


2.邮箱服务器

就像安装了tomcat的电脑能充当web服务器一样,安装了邮件服务器软件的电脑就称为

邮箱服务器,当然,用来作为服务器的主机,其硬件配置比普通电脑要好很多。网络上

有很多提供邮件服务的厂商,他们有拥有专门的邮箱服务器,比如新浪、网易、搜狐等。

这些服务器类似于现实生活中的邮局,负责接收用户投递过来的邮件,并把邮件投递到

邮件接收者的电子邮箱中。


3.邮件收发协议

SMTP(simple mail transfer protocol),SMTP协议定义了通讯规则,它属于TCP/IP协议

簇,帮助每台计算机在发送或中转信件时找到下一个目的地。通常把处理用户SMTP

请求(邮件发送请求)的邮件服务器称之为SMTP服务器。

默认端口:25

POP3(Post Office Protocol - Version3)即“邮局协议版本3”,此协议主要用于支持

客户端远程管理位于服务器上的邮件。服务器通过POP3把保存在服务器上的邮件

发送到个人终端上。通常把处理用户POP3请求(邮件接收请求)的邮件服务器

称之POP3服务器。

默认端口:110




我们可以使用邮箱服务器软件,比如易邮邮件服务器,搭建自己的服务器,接着我们可以在

此服务器上申请邮箱,进行邮件收发。我们还可以使用foxmail、outlook等客户端软件来管理

我们的邮箱,这样我们就无需打开QQ邮箱,网易邮箱等网页了。使用foxmail等客户端软件

需要配置一下与邮箱对应的提供商的smtp服务器和pop3服务器。


JavaMail的简单使用
1.导入mail.jar
2.使用java代码实现激活邮件的发送

代码如下:

package com.bbs.utils;import java.util.Properties;import java.util.UUID;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.Message.RecipientType;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import com.sun.mail.util.MailSSLSocketFactory;/** * 发送注册激活邮件的工具类 *  * @author holien * @create_Time 2017年5月31日 下午8:24:08 */public class MailUtil {/** * @param toAddr:接收方邮箱 * @param code:使用UUID产生的随机激活码 */public static void sendEmail(String toAddr, String code) throws Exception {String fromAddr = "707680958@qq.com"; // 发送方邮箱String licenseCode = "menfeesxhkyebdgd"; // QQ邮箱的授权码// 1.创建属性对象,本质就是属性文件的key-valueProperties properties = new Properties();properties.put("mail.smtp.host", "smtp.qq.com"); // 设置邮件服务器properties.put("mail.smtp.auth", "true"); // 打开认证// QQ邮箱需要下面这段代码,使用SSL加密MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);properties.put("mail.smtp.ssl.enable", "true");properties.put("mail.smtp.ssl.socketFactory", sf);// 2.由发送者发起会话,并创建认证(发送者邮箱的帐号密码)Session session = Session.getDefaultInstance(properties, new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(fromAddr, licenseCode);}});// 3.创建邮件消息Message message = new MimeMessage(session);message.setFrom(new InternetAddress(fromAddr));message.addRecipient(RecipientType.TO, new InternetAddress(toAddr));message.setSubject("来自XXX网站的帐号激活");String content = "<h1>帐号激活</h1><h3>请点击此链接完成帐号激活<a href='http://localhost:8080/miniBBS/activeUser?code=" + code+ "'>http://localhost:8080/miniBBS/activeUser?code=" + code + "</a></h3>";message.setContent(content, "text/html;charset=UTF-8");//message.setText("https://www.baidu.com"); // 纯字符串文本// 4.发送邮件Transport.send(message);}/** * @return UUID生成的随机32位激活码 */public static String getCode() {return UUID.randomUUID().toString().replace("-", "");}public static void main(String[] args) throws Exception {// System.out.println(UUID.randomUUID().toString().replace("-", ""));sendEmail("18969492@qq.com", getCode());}}


用户注册时生成激活码并存进用户数据表,然后发送激活邮件给用户,
用户点击激活链接后,在后台对用户发送的url中的code参数与数据库对比,
若一致,则把用户帐号设置为可用,并把激活码清空,防止多次激活。
用户登录时不仅检查帐号密码,还检查激活状态,未激活的帐号不可用。

注意:
1.运行此java application例子,需要联网,因为我们需要连接比如QQ邮箱的smtp服务器

2.若使用QQ邮箱,则发送方需要到QQ邮箱网页开启SMTP服务器,通过验证后获取授权码

比如menfeesxhkyebdgd,不再需要邮箱本身的密码