您的位置:首页 > 编程语言 > Java开发

JavaMail深入体验开发二: JavaMail的体系结构及发送复杂邮件

2012-06-06 09:14 351 查看
一 . 电子邮件传输的全过程:




二 . JavaMail 的体系结构与API分类



JavaMail API按其功能划分通常可分为如下三大类:

创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。

发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。

接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。

Session类

Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。

三. 邮件发送的过程:



四.使用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());
	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: