使用 javamail 做邮箱验证功能

本文介绍了如何使用 JavaMail 库实现邮箱验证功能。在项目中,作者首次接触并应用了 JavaMail,实现了简单的邮件发送。JavaMail 是一套支持 SMTP、POP3、IMAP 协议的开发类库,简化了邮件程序的开发。文章提到了关键类如 Session、Message、Address 和 Transport,以及使用 Authenticator 设置用户名和密码的过程。提供了创建和发送邮件的基本步骤。
摘要由CSDN通过智能技术生成

在自己最近做的一个小项目中使用了注册时邮箱验证激活的功能,第一次接触到了 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();
		}
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值