转载地址 : http://blog.csdn.net/t12x3456/article/details/7636701
一 . 电子邮件传输的全过程:
二 . JavaMail 的体系结构与API分类
JavaMail API按其功能划分通常可分为如下三大类:
创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。
发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。
接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。
Session类
Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。
三.JavaMail文件包组成讲解
以上是官网对几个jar包的说明,翻译如下:
javax.mail.jar 这个包里面包含了下面三种协议的提供者 就是如果想在程序使用到所有的协议 只需要导入这一个包
javax.mail-api.jar 这个包只包含了一些基本的类 只适合编译 编译的时候不会不错 没有包含任何一种协议 使用时根据程序使用到的协议按需导入相应的以下三种协议报
mailapi.jar 这个包和上面那个包一样 也是没有包含任何协议,但是和以下三种协议的其中一种合用
smtp.jar 这个是SMTP协议具体的实现者
imap.jar 这个是IMAP协议具体的实现者
pop3.jar 这个是POP3协议具体的实现者
gimap.jar 这个是IMAP协议具体的实现者 同时主要是面向Gmail邮箱 实现Gmail邮箱中一些特殊特性
dsn.jar 这个是对含有推送状态消息的邮件的支持
四. 邮件发送的过程:
四.使用JavaMail发送一封带图片和附件的复杂邮件:
邮件组织结构相关的API:
MimeMessage类表示整封邮件。
MimeBodyPart类表示邮件的一个MIME消息。
MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。
复杂邮件的结构图:
发送邮件步骤;
1. 搭建开发环境:准备发送邮件相关jar包:
mail.jar
activation.jar(JAF):(可选的,如果JDK6.0+,则不需要此包)
2. 编写代码实现,如下:
- package com.itheima;
- import java.io.FileOutputStream;
- import java.util.Properties;
- import javax.activation.DataHandler;
- import javax.activation.FileDataSource;
- 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.MimeBodyPart;
- import javax.mail.internet.MimeMessage;
- import javax.mail.internet.MimeMultipart;
- //实现自己向自己发送一封复杂邮件
- public class SendMessage {
- public static void main(String[] args) throws Exception{
- Properties props = new Properties();//环境变量
- props.setProperty("mail.host", "smtp.163.com");
- props.setProperty("mail.transport.protocol", "smtp");
- props.setProperty("mail.smtp.auth", "true");
- Session session = Session.getInstance(props,new Authenticator() {
- @Override
- public PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication("laotian", "123");
- }
- });
- session.setDebug(true);//开始调试:监控smtp协议
- Transport ts = session.getTransport();
- ts.connect("smtp.163.com", "laotian", "123");//连接邮件发送服务器
- //创建代表邮件的对象MimeMessage
- MimeMessage message = new MimeMessage(session);
- message.setSubject("tttttttt");
- message.setFrom(new InternetAddress("laotian@163.com"));
- message.setRecipient(Message.RecipientType.TO, new InternetAddress("laotian@163.com"));
- //分别创建邮件的每部分内容,设置类型,有id的设置id。MimeBodyPart
- MimeBodyPart part1 = new MimeBodyPart();
- part1.setContent("aaa<img src='cid:mm'/>aaa", "text/html");
- MimeBodyPart part2 = new MimeBodyPart();
- //jaf:DataHandler能自动感知文件的类型 images/jpeg
- DataHandler dh = new DataHandler(new FileDataSource("d:/2.jpg"));
- part2.setDataHandler(dh);
- part2.setContentID("mm");
- //描述各部分之间的关系MimeMultiPart
- MimeMultipart multi = new MimeMultipart();
- multi.addBodyPart(part1);
- multi.addBodyPart(part2);
- multi.setSubType("related");//描述关系
- //加到MimeMessage中
- message.setContent(multi);
- message.saveChanges();
- ts.send(message,message.getAllRecipients());
- }
- }