JavaMail基本使用
基本概述
JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。
虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail文件。除此以外,你还需要有Sun的JavaBeans Activation Framework (JAF)。JavaBeans Activation Framework的运行很复杂,在这里简单的说就是JavaMail的运行必须得依赖于它的支持。在Windows 2000下使用需要指定这些文件的路径,在其它的操作系统上也类似。
JavaMail是可选包,因此如果需要使用的话你需要首先从java官网上下载。使用JavaMail的时候需要Javabean Activation Framework的支持,因此你也需要下载JAF。安装JavaMail只是需要把他们加入到CLASSPATH中去,如果你不想修改CLASSPATH的话,可以直接把他们的jar包直接copy到JAVA_HOME/lib/ext下。这样JavaMail就安装好了。
JavaMail包中用于处理电子邮件的核心类是:Session,Message,Address,Authenticator,Transport,Store,Folder等。Session定义了一个基本的邮件会话,它需要从Properties中读取类似于邮件服务器,用户名和密码等信息。
另外很好的实现了JavaMail API的框架有James、Spring Mail。
电子邮件
概述
- 电子邮箱:向服务器申请了一块空间(硬盘的地址),存储着你申请的这个邮箱存放的数据。
- 电子邮箱(E-mail地址)的获得需要在邮件服务器上进行申请 ,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个帐户。用户在邮件服务器上申请了一个帐号后,邮件服务器就会为这个帐号分配一定的空间,用户从而可以使用这个帐号以及空间,发送电子邮件和保存别人发送过来的电子邮件。
- 邮件服务器:
- 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己的邮件服务器。
- 这些服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。
- 邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器和接收邮件的服务器。
邮件协议
- SMTP协议-发邮件协议
- 全称为Simple Mail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与SMTP服务器之间、以及两台SMTP服务器之间的通讯规则。
- 端口号:25.
- POP/POP3协议-收邮件协议
- 全称为Post Office Protocol(邮局协议),它定义了邮件客户端软件与POP3服务器的通讯规则。服务器到客户的通讯规则。
- 端口号:110.
JavaMail使用
package com.pc.user.utils;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import com.pc.user.domain.User;
/**
* 邮件工具类
*
* @author Switch
* @data 2016年10月23日
* @version V1.0
*/
public class MailUtils {
/**
* 发送邮件
*
* @param user
* 用户Bean
*/
public static void sendMail(User user) {
// Session对象(会话)
Properties props = new Properties();
// 邮件服务器在本机
props.setProperty("mail.host", "localhost");
// 邮件服务器在外网需要用下面两个配置替代
// props.setProperty("mail.host", "smtp-mail.outlook.com");
// 外网会强制验证
props.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(props, new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
// 邮件服务器在本机
return new PasswordAuthentication("Admin@store.com", "123456");
// 邮件服务器在外网
// return new PasswordAuthentication("*****@163.com","123456");
}
});
// Message对象
Message message = new MimeMessage(session);
try {
// 设置发件人:(最好是与登录名相同)
message.setFrom(new InternetAddress("Admin@store.com"));
// 设置收件人:
message.addRecipient(RecipientType.TO, new InternetAddress(user.getEmail()));
// 设置主题:
message.setSubject("生日快乐");
// 设置内容:
message.setContent("尊敬的用户,祝您生日快乐!", "text/html;charset=UTF-8");
// 3.Transport对象:
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
PS:JavaMail发送邮件案例:GitHub