java邮件第五篇--复杂邮件

    前面已经对邮件的发送和接收有了一定的认识,也对邮件的发送接收原理有了了解;

    下面就来详细讲解邮件本身;

    首先:复杂邮件的结构图:

   (图片来源于http://blog.csdn.net/t12x3456/article/details/7636701)

1338945237_3992.jpg

附:MIME协议用于定义复杂邮件的格式,它可以表达多段平行的文本内容和非文本内容。

Content-Type具体资源的数据类型和组合消息的组合关系,都是通过消息头中的Content-Tpe头字段来指定的。其内容以“主类型/子类型”的形式出现,主类型有:text,image,audio,video,application,multipart,message等。每个主类型下面都有很多个子类型,比如text下面就有plain,htmlm,xml,css等子类型。Multipart主类型用于表示MIME组合关系,它是MIME协议中最重要的一种类型。


一封MIME邮件中的MIME消息可以有三种组合关系:混合,关联,选择。对应的MIMe类型如下:


Multipart/mixed:表示消息体中的内容是混合组合类型,可以是文本,声音和附件等不同邮件内容的混合体。


Multipart/related:表示消息体中的内容是关联(依赖)组合类型,表示消息体中的某些内容,依赖另外的资源。

Multipart/alternative:选择组合类型。

其他头字段:

Content-Transfer-Encoding:用于指定编码方式。

Content-Disposition:用于指定邮件阅读程序处理数据内容的方式。

Content-ID:用于组合消息中的内迁资源制定的一个唯一表示号。

Content-Location:用来为内迁资源设置一个URI地址。

Content-Base:用来为内迁资源设置一个基准路径。

――――――

以上便是一份完整复杂邮件的组成部分;对邮件这个对象有了大致的了解之后;就可以针对邮件的特点和和属性利用javamail来编写复杂的邮件;并将其发送以及接受……;当然还是离不开java提供的API;与邮件组织相关的API如图:

邮件组织结构相关的API:

(图片来源于http://blog.csdn.net/t12x3456/article/details/7636701)

1338945170_6810.png


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


有了这些知识就可以编写代码了

import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
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;
import javax.mail.internet.MimeUtility;
public class SendFileMail {
    public static void main(String[] args) throws Exception{
          // TODO Auto-generated method stub
          Properties properties = new Properties();
          properties.setProperty("mail.debug", "true");//debug
          properties.setProperty("mail.transport.protocol", "smtp");
                                                                                    
          Session session=Session.getInstance(properties);
                                                                                      
          MimeMessage msg=new MimeMessage(session);
          msg.setFrom(new InternetAddress("[email protected]"));
          msg.setSubject("复杂邮件……");
                                                                                    
          //邮件内容----内容类型MimeMultipart
          MimeMultipart msgMultipart=new MimeMultipart("mixed");
          msg.setContent(msgMultipart);
                                                                                      
          //附件
          MimeBodyPart attch1=new MimeBodyPart();
          DataSource ds1=new FileDataSource("f:/ww的.txt");
          DataHandler dh1=new DataHandler(ds1);//JAF提供
          attch1.setDataHandler(dh1);
          attch1.setFileName(MimeUtility.encodeText("说的的.txt"));
                                                                                     
          MimeBodyPart attch2=new MimeBodyPart();
          DataSource ds2=new FileDataSource("F:/2.jpg");
          DataHandler dh2=new DataHandler(ds2);
          attch2.setDataHandler(dh2);
          attch2.setFileName("we.jpg");
                                                                                     
          //正文!!!!MimeMultipart的重要组成部分--MimeBodyPart
          MimeBodyPart content=new MimeBodyPart();
                                                                                      
          MimeMultipart bodyMultipart=new MimeMultipart("related");
          content.setContent(bodyMultipart);
                                                                                      
          MimeBodyPart htmlPart=new MimeBodyPart();
          htmlPart.setContent("你好!<img src='F:/2.jpg'>","text/html;charset=gbk");
                                                                                     
          MimeBodyPart gifPart=new MimeBodyPart();
          DataSource gifds=new FileDataSource("F:/2.jpg");
          DataHandler gifdh=new DataHandler(gifds);
          gifPart.setDataHandler(gifdh);
          gifPart.setHeader("Content-Location", "F:/2.jpg");
                                                                                      
          bodyMultipart.addBodyPart(htmlPart);
          bodyMultipart.addBodyPart(gifPart);
                                                                                      
          msgMultipart.addBodyPart(attch1);
          msgMultipart.addBodyPart(attch2);
          msgMultipart.addBodyPart(content);
                                                                                      
          msg.saveChanges();
                                                                                      
          //邮件的发送
         Transport transport=session.getTransport();
         transport.connect("smtp.sina.com", 25,"junxiuxiao", "xxx");//服务器  端口   用户名  密码
                                                                                        
        //3、发送邮件
        transport.sendMessage(msg, new Address[]{new InternetAddress("[email protected]")});
        transport.close();
         }
                                                                                     
        }


然后,到邮箱查看是否有新邮件:如下:

191433899.jpg

注:javamail的邮件发送,其中的Session对象;不仅可以自己创建;也可以利用tomcat服务器的JNDI创建,只需要在tomcat中配置好相关的信息;在将JNDI容器中就会有所需要的Session对象;JNDI的原理类似于数据源;JNDI是一个容器,根据你的配置信息,创建的对象存放在JDNI容器中,等到使用的时候,通过一定类提供的方法就能取的所需的对象……JNDI的配置在tomcat的帮助文档中有说明!

你可能感兴趣的:(java)