zoukankan      html  css  js  c++  java
  • JavaMail开发3

    创建邮件——RFC822文档

    •RFC822文档规定了如何编写一封简单邮件
    •邮件头和邮件体,两者使用空行分隔
    •邮件头
    •from字段
    •to字段
    •subject字段
    •cc、bcc字段
    •邮件体
    •邮件内容
    •缺点:RFC822文档漏洞能发送假冒邮件,现在不用了

    创建邮件—— MIME协议 

          MIME协议是对RFC822文档的升级和补充,它描述了如何生成一封复杂邮件。通常我们把MIME协议描述的邮件称之为MIME邮件,MIME协议描述的数据称之为MIME消息

      对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。

      (查看outlook邮件源文件)复杂邮件:文本+图片+附件

      1)简单邮件-文本

    import java.io.FileOutputStream;
    import java.util.Properties;
    import javax.mail.Session;
    import javax.mail.Message.RecipientType;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    //基于MIME协议创建简单邮件
    public class Demo1 {
    	public static void main(String[] args) throws Exception {
    		//创建一封邮件
    		MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
    		//设置From属性
    		message.setFrom(new InternetAddress("aaa@hacket.cn"));
    		//设置To属性
    		message.setRecipient(RecipientType.TO,new InternetAddress("bbb@qq.cn"));
    		//设置Subject属性
    		message.setSubject("test");
    		//设置Content属性
    		message.setContent("Today is fine day","text/html;charset=ISO8859-1");
    		//将该邮件保存的硬盘
    		message.writeTo(new FileOutputStream("d:\\demo1.eml"));
    	}
    }
    1 /*
    2 MimeMessage:表示一个符合MIME协议的邮件
    3 InternetAddress:表示电子邮件地址
    4 RecipientType.TO:表示发送邮件的类型:例如TO(目标),CC(明抄送),BCC(密送)
    5 简单邮件只含有文本
    6 Content-Type:文本类型
    7 
    8 */

    对于非Web应用,包冲突问题-JavaEE1.4-只针对于非Web应用,不用系统自带的jar包,自己加进去

    |--mail.jar

    |--activation.jar

    MIME协议常用头字段

       1、Content-type:字段

       数据类型

        •以“主类型/子类型”的形式出现,主类型有text、image、audio、video、application、message等,分别表示文本、图片、音频、视频、应用程序、组合结构、消息等。
          每个主类型下面都有多个子类型,例如text主类型包含plain、html、xml、css等子类型。 
      数据的关系
    •multipart/related图片、 multipart/mixed(附件)、
    •multipart/form-data(上传文件)

       2、Content-Disposition头字段

         Content-Disposition头字段用于指定邮件阅读程序处理数据内容的方式,有inline和attachment两种标准方式,inline表示直接处理,而attachment表示当作附件处理。

         如果将Content-Disposition设置为attachment,在其后还可以指定filename属性,如下所示:
         Content-Disposition: attachment; filename=“1.bmp”
         上面的MIME头字段表示MIME消息体的内容为邮件附件,附件名“1.bmp

       3、Content-ID头字段

        Content-ID头字段用于为“multipart/related”组合消息中的内嵌资源指定一个唯一标识号,在HTML格式的正文中可以使用这个唯一标识号来引用该内嵌资源

          例如,假设将一个表示内嵌图片的MIME消息的Content-ID头字段设置为如下形式:

    Content-ID: it315logo_gif
    那么,在HTML正文中就需要使用如下HTML语句来引用该图片资源:
      <img src="cid:itcastlogo_gif">
    注意,在引用Content-ID头字段标识的内嵌资源时,要在资源的唯一标识号前面加上“cid:”,以说明要采用唯一标识号对资源进行引用。

     邮件组织结构相关的API

    MimeMessage类表示整封邮件。
    MimeBodyPart类表示邮件的一个MIME消息。
    MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。

       

       2)基于MIME协议创建复杂邮件(文本+图片)

    import java.io.FileOutputStream;
    import java.util.Properties;
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.Session;
    import javax.mail.Message.RecipientType;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    
    //基于MIME协议创建复杂邮件(文本+图片)
    public class Demo2 {
    	public static void main(String[] args) throws Exception {
    		
    		//创建一封邮件
    		MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
    		
    		//设置From属性
    		message.setFrom(new InternetAddress("aaa@zhaojun.com"));
    		
    		//设置To属性
    		message.setRecipient(RecipientType.TO,new InternetAddress("bbb@qq.com"));
    		
    		//设置Subject属性
    		message.setSubject("text+image");
    		
    		//文本
    		MimeBodyPart text = new MimeBodyPart();
    		text.setContent("this is a <br/><img src='cid:imageID'/><br/>picture<br/>","text/html;charset=ISO8859-1");
    		
    		//图片
    		MimeBodyPart image = new MimeBodyPart();
    		//读取cc.JPG图片
    		DataHandler dh = new DataHandler(new FileDataSource("src/cn/itcast/web/mail/config/cc.jpg"));
    		//设置MimeBodyPart和DataHandler的关联
    		image.setDataHandler(dh);
    		//为图片设置一个唯一编号
    		image.setContentID("imageID");
    		
    		//设置文本和图片的关系
    		MimeMultipart mm = new MimeMultipart();
    		mm.addBodyPart(text);
    		mm.addBodyPart(image);
    		mm.setSubType("related");
    		
    		//设置整个邮件的关系
    		message.setContent(mm);
    		
    		//将该邮件保存的硬盘
    		message.writeTo(new FileOutputStream("d:\\demo2.eml"));
    		
    	}
    }
    1 /*
    2 MimeBodyPart:表示复杂邮件的一个组成部分,它可以表示文本,附件,图片
    3 DataHandler:表示可以读取图片或附件
    4 MimeMultipart:表示二个邮件组成部分的关系,文本和图片的关系是"related"关系
    5 Content-ID:表示图片的编号
    6 
    7 */

    03)文本+附件

    import java.io.FileOutputStream;
    import java.util.Properties;
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.Session;
    import javax.mail.Message.RecipientType;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    
    //基于MIME协议创建复杂邮件(文本+)附件
    public class Demo3 {
    	public static void main(String[] args) throws Exception {
    		
    		//创建一封邮件
    		MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
    		
    		//设置From属性
    		message.setFrom(new InternetAddress("aaa@zhaojun.com"));
    		
    		//设置To属性
    		message.setRecipient(RecipientType.TO,new InternetAddress("bbb@qq.com"));
    		
    		//设置Subject属性
    		message.setSubject("text+append");
    		
    		//文本
    		MimeBodyPart text = new MimeBodyPart();
    		text.setContent("this is a append<br/>","text/html;charset=ISO8859-1");
    		
    		//附件1
    		MimeBodyPart append1 = new MimeBodyPart();
    		DataHandler dh = new DataHandler(new FileDataSource("src/cn/itcast/web/mail/config/apache-tomcat-7.0.12.zip"));
    		append1.setDataHandler(dh);
    		//设置附件的名字
    		append1.setFileName(dh.getName());
    
    		/*附件2
    		MimeBodyPart append2 = new MimeBodyPart();
    		dh = new DataHandler(new FileDataSource("src/cn/itcast/web/mail/config/apache-tomcat-6.0.29.zip"));
    		append2.setDataHandler(dh);
    		//设置附件的名字
    		append2.setFileName(dh.getName());
    		*/
    		
    		//设置文本和附件的关系
    		MimeMultipart mm = new MimeMultipart();
    		mm.addBodyPart(text);
    		mm.addBodyPart(append1);
    		//mm.addBodyPart(append2);
    		mm.setSubType("mixed");
    
    		//设置整个邮件的关系
    		message.setContent(mm);
    		
    		//将该邮件保存的硬盘
    		message.writeTo(new FileOutputStream("d:\\demo3.eml"));
    		
    	}
    }
    1 MimeMultipart:表示二个邮件组成部分的关系,文本和附件的关系是"mixed"关系,即默认
    2         MimeMultipart加入的顺利与邮件显示附件的顺序无关

     04)文本+图片+附件

    import java.io.FileOutputStream;
    import java.util.Properties;
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.Session;
    import javax.mail.Message.RecipientType;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    
    //基于MIME协议创建复杂邮件(1文本+1图片+1附件)
    public class Demo4 {
    	
    	public static void main(String[] args) throws Exception {
    		
    		//创建一封邮件
    		MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
    		
    		//设置From属性
    		message.setFrom(new InternetAddress("aaa@zhaojun.com"));
    		
    		//设置To属性
    		message.setRecipient(RecipientType.TO,new InternetAddress("bbb@qq.com"));
    		
    		//设置Subject属性
    		message.setSubject("text+image+append");
    		
    		//文本
    		MimeBodyPart text = new MimeBodyPart();
    		text.setContent("this is a<br/><img src='cid:imageID'/><br/>image<br/>","text/html;charset=ISO8859-1");
    		
    		//图片
    		MimeBodyPart image = new MimeBodyPart();
    		DataHandler dh = new DataHandler(new FileDataSource("src/cn/itcast/web/mail/config/cc.jpg"));
    		image.setDataHandler(dh);
    		image.setContentID("imageID");
    		
    		//附件
    		MimeBodyPart append = new MimeBodyPart();
    		dh = new DataHandler(new FileDataSource("src/cn/itcast/web/mail/config/abc.txt"));
    		append.setDataHandler(dh);
    		append.setFileName(dh.getName());
    		
    		//文本+图片
    		MimeMultipart mm1 = new MimeMultipart();
    		mm1.addBodyPart(text);
    		mm1.addBodyPart(image);
    		mm1.setSubType("related");
    
    		//将文本+图片封装成邮件的组成部分,即将关系看作成一个部分
    		MimeBodyPart temp = new MimeBodyPart();
    		temp.setContent(mm1);
    		
    		//设置和附件的关系
    		MimeMultipart mm = new MimeMultipart();
    		mm.addBodyPart(temp);
    		mm.addBodyPart(append);
    		mm.setSubType("mixed");
    		
    		//设置整个邮件的关系
    		message.setContent(mm);
    		
    		//将该邮件保存的硬盘
    		message.writeTo(new FileOutputStream("d:\\demo4.eml"));
    		
    	}
    }
    1 //对于,复杂类型的邮件,位置关系特别注意和加入的顺利要一致
  • 相关阅读:
    yii2中的url美化
    一级域名301重定向到www二级域名
    使用meta来控制浏览器的渲染方式
    同一页面不同编码的提交处理
    Yii2.0 UrlManager
    sqlsever连接两个不同服务器上的数据库进行查询
    php 实现传入参数的传出
    xcode如何修改项目名称
    ios如何实现应用之间的跳转
    ios程序如何实现系统自带的分享
  • 原文地址:https://www.cnblogs.com/hacket/p/3044103.html
Copyright © 2011-2022 走看看