使用 javamail 做邮箱验证功能

来源:互联网 发布:韩国女子组合知乎 编辑:程序博客网 时间:2024/06/05 11:32

在自己最近做的一个小项目中使用了注册时邮箱验证激活的功能,第一次接触到了 javaMail,以前只是知道有这个东西,却从来没有用过,这次正好有机会,便去大致的看了一些 demo,完成了自己这个邮箱验证激活的功能,现在只是简单会用,以后还是要深入学习,先在这儿记录一下 javaMail 简单的使用。

javaMail 是 sun 公司提供的实现邮件发送和接收功能的一套标准开发类库,支持常用的邮件协议,如 smtp、pop3、imap,使用 javamail 开发邮件程序无需考虑底层Socket通信的细节,并且支持创建各种复杂 MIME 格式的邮件。

首先需要去下载 javaMail 相关的 jar ,我使用的是 javamail-1.4.7 这个,因为我只用到了简单的发邮件的功能,所以只需要将 mail.jar 这个 jar 加到classpath 下即可。

先简单来认识一下 javaMail 的一些常用类:

Session 定义了一个基本的邮件会话,任何工作都是基于这个Session的。Session 对象需要一个 java.util.Properties 对象来得到类似 邮件服务器,用户名,密码这样的信息。Session 的构造函数是私有的,可以通过 getDefaultInstance() 方法来取得一个单一的可以被共享的默认session。 

一旦创建了 Session 对象,接着就要使用 Message 来发送邮件。

Message 是一个抽象类,在大部分应用中我们可以使用它的子类javax.mail.internet.MimeMessage 。如:

MimeMessage message = new MimeMessage(session);
message.setContent("Email Content. "text/plain"); //设置邮件内容
message.setSubject(" Subject "); //设置主题
这里常用 Session 对象作为构造函数的参数。

Address 当创建了 Session 以及 Message,并且已经为message 填充了内容,那么接下来要做的就是给你的邮件添加一个地址(Address),我们常用的是它的子类 javax.mail.internet.InternetAddress,需要使用 Message 的msg.setFrom(new InternetAddress("你的邮箱")) 识别发送者,使用 setRecipient() 方法识别接收者。这个方法除了address参数之外,还需要一个Message.RecipientType,Message.RecipientType有几个预先定义好的类型

Message.RecipientType.TO  //收件人Message.RecipientType.CC  //抄送Message.RecipientType.BCC  //暗送

如果需要多个收件地址,可以使用 InternetAddress[] addrs = {} 构造多个收件地址。

Authenticator 通过Authenticator设置用户名、密码,我们需要实现这个抽象类,实现getPasswordAuthentication()方法,并返回一个PasswordAuthentication实例,然后在 Session 创建时注册这个Authenticator。

Transport 发送消息的最后一步是使用 Transport,调用它的静态方法 send 来发送邮件,Transport.send(msg);

以下是主要的完整代码:

public class SendMailUtil {public static final String HOST = "smtp.163.com";public static final String PROTOCOL = "smtp";public static final int PORT = 25;public static final String SENDER = "***@163.com";//public static final String SENDERPWD = "******";/** * 获取用于发送邮件的Session * @return */public static Session getSession() {Properties props = new Properties();props.put("mail.smtp.host", HOST);//设置服务器地址        props.put("mail.store.protocol" , PROTOCOL);//设置协议        props.put("mail.smtp.port", PORT);//设置端口        props.put("mail.smtp.auth" , true);                Authenticator authenticator = new Authenticator() {        @Override            protected PasswordAuthentication getPasswordAuthentication() {                return new PasswordAuthentication(SENDER, SENDERPWD);            }};        Session session = Session.getDefaultInstance(props,authenticator);        return session;}/** * 发送邮件 * @param receiver * @param content */public static void send(String receiver, String content) {Session session = getSession();try {System.out.println("-------开始发送-------");Message msg = new MimeMessage(session);//设置message属性msg.setFrom(new InternetAddress(SENDER));InternetAddress[] addrs = {new InternetAddress(receiver)};msg.setRecipients(Message.RecipientType.TO, addrs);msg.setSubject("yechblog-帐号激活");msg.setSentDate(new Date());msg.setContent(content,"text/html;charset=utf-8");//开始发送Transport.send(msg);                        System.out.println("-------发送完成-------");} catch (AddressException e) {e.printStackTrace();} catch (MessagingException e) {e.printStackTrace();}}




0 0
原创粉丝点击