JavaMail简介

Contents

  1. 1. JavaMail
    1. 1.1. 简介
    2. 1.2. 示例

JavaMail

简介

虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail文件。除此以外,你还需要有Sun的JavaBeans Activation Framework (JAF)。JavaBeans Activation Framework的运行很复杂,在这里简单的说就是JavaMail的运行必须得依赖于它的支持。JAF在Java6之后已经合并到JDK中,而JDK5之前需要另外下载JAF的类库。使用JavaMail,我们可以实现类似OutLook的软件。

压缩包的主要内容

  • README.txt:整体介绍JavaMail,需要看一下
  • docs/javadocs:The JavaMail API javadocs
  • mail.jar:包括JavaMail API和提供所有服务,大部分用户只需要该jar包
  • lib/mailapi.jar:只有JavaMail API 不提供其他服务
  • lib/imap.jar:The IMAP service provider
  • lib/smtp.jar:The SMTP service provider
  • lib/pop3.jar:The POP3 service provider
  • lib/dsn.jar:multipart/report DSN message support
  • lib/imap.jar:Google IMAP provider
  • demo:demo示例,简单了解,有需要再看

JavaMail包含两部分内容,一部分是JavaMail API,定义了一组平台无关、独立于通讯协议的邮件程序框架,该部分称为应用级接口,也就是供我们调用的部分,另一部分是service provider,该部分使用特定的协议语言来实现第一部分定义的抽象类和接口,这些协议包括:SMTP、NNTP、POP3、IMAP,如果让JavaMail与邮件服务器通信,就需要相应的协议支持,该部分称为服务提供者接口,也就是JavaMail自身需要的协议支持。大多数情况下只需要使用mail.jar就可以了。

示例

一个发送文本的简单示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Properties props = new Properties();
// 开启debug调试
props.setProperty("mail.debug", "true");
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
// 设置邮件服务器主机名
props.setProperty("mail.smtp.host", "smtp.163.com");
// 设置邮件服务端口号
props.setProperty("mail.smtp.port", "25");
Session session = Session.getInstance(props);

try {
// 创建邮件对象
Message msg = new MimeMessage(session);
msg.setSubject("JavaMail hello world example");
// 设置邮件内容
msg.setText("Hello, world!\n");
// 设置发件人
msg.setFrom(new InternetAddress("me@163.com"));
msg.setRecipients(Message.RecipientType.TO, "you@example.com");
msg.setSentDate(new Date());

Transport transport = session.getTransport();
// 发送邮件
Transport.send(msg, "me@163.com", "my-password");
// 关闭连接
transport.close();
} catch (MessagingException mex) {
System.out.println("send failed, exception: " + mex);
}

代码中的me@163.commy-passwordyou@example.com要进行替换。
163新注册的邮箱不能发邮件,否则会抛出javax.mail.MessagingException

  • java.util.Properties:属性对象
  • javax.mail.Session:上下文环境信息,如服务器的主机名、端口号、协议名称等
  • javax.mail.Message:邮件模型,发送邮件和接收邮件的媒介,封装了邮件的信息,如发件人、收件人、邮件标题、邮件内容等,一般用的是子类MimeMessage
  • javax.mail.Transport:连接邮件SMTP服务器,发送邮件
  • javax.mail.Address:地址类,这个地址类主要是表示邮件发送人和邮件接收人的地址,一般主要用的是InternetAddress。
  • javax.mail.Store:连接邮件POP3、IMAP服务器,收取邮件
  • javax.mail.Folder:文件夹类,该文件夹就是消息的具体所在文件夹,默认的邮件均在INBOX文件中。

国内常见的几个免费邮件服务器名如下:

  • 网易免费邮箱:发送服务器:smtp.163.com 接收服务器:pop.163.com
  • 新浪免费邮箱:发送服务器:smtp.sina.com.cn 接收服务器:pop3.sina.com.cn
  • 搜狐邮箱:发送服务器:smtp.sohu.com 接收服务器:pop3.sohu.com

参考
Java Mail(二):JavaMail介绍及发送一封简单邮件
javamail发送邮件的简单实例
Java网络编程之JavaMail发送邮件和接受邮件