●MIME协议
1.Multipurpose Internet Mail Extensions 的缩写,多用途网际邮件扩充协议 ,
说明了如何安排消息格式使消息在不同的邮件系统内进行交换。
2.整个message为一个Mime邮件,包含邮件头和邮件体,邮件头包含发送者,接收者,邮件标题,
抄送者信息等
3.邮件体包含许多部分,这些部分的内容是多种多样的,所以会以带ID的-------------分割
然后写明此部分消息的content-type:text/html或者content-type:image/jpeg等MIME类型
4.邮件体的各个部分总体而言有三类,正文类型,引用数据类型和附件类型。正文与附件之间的
关系为fixed,正文和引用数据之间的关系为related。设置了关系后可以清晰的知道哪些内容
是正文,哪些内容是附件,哪些内容是引用数据。还有一个作用就是在正文引用引用数据的时候
可以在正文使用html标签,如<img src="cid:myimg" /> 则在引用数据时指定content-id:myimg
即可。
-------------------=DFGIONGHOAYURE
content-type:text/html BodyPart 1
djafldas
<img src="cid:myimg" />
kjflasdj正文
-------------------=DFGIONGHOAYURE
content-type:image/jpeg BodyPart
content-id:myimg
……%&*……*(&%……图片
-------------------=DFGIONGHOAYURE
content-type:application/..................
a.mp3 附件 BodyPart 3
-------------------=DFGIONGHOAYURE
●javamail
1.导包
jaf-1.1.1中 activation.jar
javamail-1.4.1 mail.jar
2.主要类
MimeMessage类代表一封Mime邮件
构造方法MimeMessage(Session session)
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "localhost");
Session session = Session.getInstance(props);
a.设置往哪发
addRecipients(Message.RecipientType type, java.lang.String addresses)
b.设置标题
setSubject(java.lang.String subject, java.lang.String charset)
c.设置邮件体
setContent(Multipart mp)
MimeMultipart类代表邮件体
a.设置邮件体中的各部分
addBodyPart(BodyPart part)
b.设置邮件体中各部分的类型
setSubType("related"); "mixed"
MimeBodypart类代表邮件体中各部分
a.设置内容
setContent(java.lang.Object o, java.lang.String type)
b.设置内容为一个邮件体
setContent(Multipart mp)
c.设置内容为别的格式
setDataHandler(new DataHandler(new FileDataSource(new File(path))))
Transport类
建立连接 发送邮件
Transport transport = session.getTransport();
transport.connect("lhg", "888888");
transport.send(message);
transport.close();
●例子
package cn.itcast.mail;
import java.io.File;
import java.net.URLDecoder;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
public class JavaMail {
/**
* 发送一封电子邮件
*/
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "localhost");
Session session = Session.getInstance(props); // Connection
//MimeMessage message = makeMessage(session);
// MimeMessage message = makeImageMessage(session);
// MimeMessage message = makeAttachMessage(session);
MimeMessage message = makeImageAttachMessage(session);
// 将邮件写入硬盘
// message.writeTo(new FileOutputStream("d:\\1.eml"));
// 发送邮件
Transport transport = session.getTransport();
transport.connect("lhg", "888888");
transport.send(message);
transport.close();
}
// 制作一封简单邮件
private static MimeMessage makeMessage(Session session)
throws MessagingException, AddressException {
// 1. 创建一个 message对象 表示一封 mime 邮件
MimeMessage message = new MimeMessage(session);
// 2. 设置邮件头
message.setFrom(new InternetAddress("lhg@itcast.cn"));
message.setSubject("this is a javamail!");
message.setRecipient(Message.RecipientType.TO, new InternetAddress("xiaohong@itcast.cn"));
// 3. 设置邮件体
// 创建 multipart
MimeMultipart multipart = new MimeMultipart();
// 创建 bodypart
MimeBodyPart bodyPart = new MimeBodyPart();
// 添加内容
bodyPart.setContent("hello!!!", "text/html");
// 将 bodypart 加入 multipart
multipart.addBodyPart(bodyPart);
// 添加邮件体
message.setContent(multipart);
return message;
}
// 制作一封带图片的邮件
private static MimeMessage makeImageMessage(Session session) throws Exception {
MimeMessage message = new MimeMessage(session);
// 设置邮件头
message.setFrom(new InternetAddress("xiaohong@itcast.cn"));
message.setSubject("this is a javamail!");
message.setRecipient(Message.RecipientType.TO, new InternetAddress("lhg@itcast.cn"));
// 设置邮件体 两部分 正文 图片
// 创建 multipart
MimeMultipart multipart = new MimeMultipart();
// 创建正文
MimeBodyPart text = new MimeBodyPart();
text.setContent("this is my photo<br><img src='cid:myimg' width='400' />", "text/html");
// 创建图片
MimeBodyPart image = new MimeBodyPart();
// 将 普通格式的数据转为 mime 格式 需要 jaf 技术
// 类加载获得文件绝对路径
String path = JavaMail.class.getClassLoader().getResource("b.jpg").getPath();
File file = new File(path);
DataHandler dh = new DataHandler(new FileDataSource(file));
image.setDataHandler(dh);
image.setContentID("myimg");
// 将两个 bodypart 加入 multipart
multipart.addBodyPart(text);
multipart.addBodyPart(image);
// 描述关系
multipart.setSubType("related");
// 设置邮件体
message.setContent(multipart);
return message;
}
// 制作一封带附件的邮件
private static MimeMessage makeAttachMessage(Session session) throws Exception {
MimeMessage message = new MimeMessage(session);
// 设置邮件头
message.setFrom(new InternetAddress("xiaohong@itcast.cn"));
message.setSubject("this is a javamail!");
message.setRecipient(Message.RecipientType.TO, new InternetAddress("lhg@itcast.cn"));
// 创建正文
MimeBodyPart text = new MimeBodyPart();
text.setContent("this is my song!!!", "text/html");
// 创建附件
MimeBodyPart attach = new MimeBodyPart();
String path = JavaMail.class.getClassLoader().getResource("a.mp3").getPath();
attach.setDataHandler(new DataHandler(new FileDataSource(path)));
// 添加到 multipart 描述关系
MimeMultipart multipart = new MimeMultipart();
multipart.addBodyPart(text);
multipart.addBodyPart(attach);
multipart.setSubType("mixed");
// 设置邮件体
message.setContent(multipart);
return message;
}
// 即带图片又带附件的
private static MimeMessage makeImageAttachMessage(Session session)throws Exception {
MimeMessage message = new MimeMessage(session);
// 设置邮件头
message.setFrom(new InternetAddress("lhg@itcast.cn"));
message.setSubject("这是一封电子邮件");
message.setRecipient(Message.RecipientType.TO, new InternetAddress("zhaonan@itcast.cn"));
// 创建正文
MimeBodyPart text = new MimeBodyPart();
text.setContent("这是我的一张图片<br><img src='cid:mygirl' width='400' />", "text/html;charset=utf-8");
URLDecoder decoder = new URLDecoder();
// 创建图片
MimeBodyPart image = new MimeBodyPart();
String path = JavaMail.class.getClassLoader().getResource("美女.jpg").getPath();
image.setDataHandler(new DataHandler(new FileDataSource(decoder.decode(path, "utf-8"))));
image.setContentID("mygirl");
// 创建附件
MimeBodyPart attach = new MimeBodyPart();
path = JavaMail.class.getClassLoader().getResource("一首歌.mp3").getPath();
attach.setDataHandler(new DataHandler(new FileDataSource(decoder.decode(path, "utf-8"))));
String filename = MimeUtility.encodeText("一首歌.mp3");
attach.setFileName(filename);
// 组合成邮件体
MimeMultipart multipart1 = new MimeMultipart();
multipart1.addBodyPart(text);
multipart1.addBodyPart(image);
multipart1.setSubType("related");
// 将 multipart1 封装到一个 BodyPart
MimeBodyPart textimage = new MimeBodyPart();
textimage.setContent(multipart1);
MimeMultipart multipart2 = new MimeMultipart();
multipart2.addBodyPart(textimage);
multipart2.addBodyPart(attach);
multipart2.setSubType("mixed");
// 设置邮件体
message.setContent(multipart2);
return message;
}
}