MIME协议生成一封复杂的邮件

MIME协议是对RFC822文档的升级和补充,用MIME协议能生成一封有文字、图片和附件的复杂邮件。首先要导入activation.jar和mail.jar。Mail.jar的下载地址是:

http://www.Oracle.com/technetwork/Java/index-138643.html,activation.jar的下载地址是:http://www.oracle.com/technetwork/java/jaf102-139581.html

分析生成过程:

// 1、创建邮件MimeMessage的对象

<1>第一种方法:

Properties props=new Properties();

Session session=Session.getInstance(props);

MimeMessage mm=new MimeMessage(session);

<2>第二种方法:

MimeMessage mm2=new MimeMessage(Session.getInstance(System.getProperties()));

<3>第三种方法:

MimeMessage mm3=new MimeMessage(Session.getInstance(newProperties()));

// 2、设置MimeMessage的属性

//发件人的邮件地址

mm.setFrom(new InternetAddress("guoqianfang@163.om"));

//发件人的邮件地址

mm.setRecipients(Message.RecipientType.TO, "hongmeikai@sina.com");

//邮件的主题

mm.setSubject("下午好");

// 3、写邮件的正文,用到的是MimeBodyPart类

//写文字

MimeBodyPart mp=new MimeBodyPart();

mp.setContent("hongmeikai  nihao !<br>你好<br><img src='cid:1.jpg'><br><img src='cid:2.jpg'>", "text/html;charset=gb2312");

//写第一个图片

MimeBodyPart mp2=new MimeBodyPart();

mp2.setDataHandler(new DataHandler(new FileDataSource("src//_009.jpg")));

mp2.setContentID("1.jpg");

//写第二个图片

MimeBodyPart mp3=new MimeBodyPart();

mp3.setDataHandler(new DataHandler(new FileDataSource("src//_2.jpg"))); mp3.setContentID("2.jpg");

// 4、创建关系,把图片的文字联系起来,用到的类是MimeMultiPart

MimeMultipart mmp=new MimeMultipart();

mmp.addBodyPart(mp);

mmp.addBodyPart(mp2);

mmp.addBodyPart(mp3);

mmp.setSubType("related");//related是表示关联关系

// 5、再把上面的关系放到MimeBodyPart中

MimeBodyPart mp4=new MimeBodyPart();

mp4.setContent(mmp);

// 6、设置附件,用到的是MimeBodyPart类

MimeBodyPart mp5=new MimeBodyPart();

//消除歌名是中文时的乱码问题

DataHandler dh=new DataHandler(new FileDataSource("src//改变自己.mp3"));

mp5.setDataHandler(dh);

String filename=dh.getName();

mp5.setFileName(MimeUtility.encodeText(filename));

// 7、再创建关系

MimeMultipart mmp2=new MimeMultipart();

mmp2.addBodyPart(mp4);

mmp2.addBodyPart(mp5);

mmp2.setSubType("mixed");

// 8、把连接好的加载到邮件(MimeMessage)中

mm.setContent(mmp2);

mm.saveChanges();

// 9、在D盘生成一个邮件

mm.writeTo(new FileOutputStream("D://1.eml"));

原文件

import Java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

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.internet.AddressException;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility;

public class MimeTest {

/**

* @param args

* @throws MessagingException

* @throws AddressException

* @throws IOException

* @throws FileNotFoundException

*/

public static void main(String[] args) throws AddressException, MessagingException, FileNotFoundException, IOException {

// TODO Auto-generated method stub

// 创建邮件MimeMessage

Properties props=new Properties();

Session session=Session.getInstance(props);

MimeMessage mm=new MimeMessage(session);

// 设置属性

mm.setFrom(new InternetAddress("guoqianfang@guo.com"));

mm.setRecipients(Message.RecipientType.TO, "hongmeikai@hong.com");

mm.setSubject("下午好");

// 正文

MimeBodyPart mp=new MimeBodyPart();

mp.setContent("hongmeikai  nihao !<br>你好<br><img src='cid:1.jpg'><br><img src='cid:2.jpg'>", "text/html;charset=gb2312");

// 设置第一个图片

MimeBodyPart mp2=new MimeBodyPart();

mp2.setDataHandler(new DataHandler(new FileDataSource("src//_009.jpg")));

mp2.setContentID("1.jpg");

// 设置第二个图片

MimeBodyPart mp3=new MimeBodyPart();

mp3.setDataHandler(new DataHandler(new FileDataSource("src//_2.jpg")));

mp3.setContentID("2.jpg");

// 创建关系,把正文和头联系起来

MimeMultipart mmp=new MimeMultipart();

mmp.addBodyPart(mp);

mmp.addBodyPart(mp2);

mmp.addBodyPart(mp3);

mmp.setSubType("related");

MimeBodyPart mp4=new MimeBodyPart();

mp4.setContent(mmp);

// 设置附件

MimeBodyPart mp5=new MimeBodyPart();

// 消除乱码

DataHandler dh=new DataHandler(new FileDataSource("src//改变自己.mp3"));

mp5.setDataHandler(dh);

String filename=dh.getName();

mp5.setFileName(MimeUtility.encodeText(filename));

MimeMultipart mmp2=new MimeMultipart();

mmp2.addBodyPart(mp4);

mmp2.addBodyPart(mp5);

mmp2.setSubType("mixed");

mm.setContent(mmp2);

mm.saveChanges();

mm.writeTo(new FileOutputStream("D://1.eml"));

}

}

发送方法

下面看看怎样发送这个邮件吧!

源码如下:

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;

public class SendImageMail {

private static final String HOST = "smtp.sohu.com";

private static final String SMTP = "smtp";

private static final String AUTH = "true";

public static void main(String[] args) throws MessagingException {

Properties props = new Properties();

// 设置发送邮件的主机服务名称

props.setProperty("mail.host", HOST);

// 设置发送邮件的协议

props.setProperty("mail.transport.protocol", SMTP);

// 设置登录验证

props.setProperty("mail.smtp.auth", AUTH);

// 根据属性文件获取发送接收邮件环境对象

Session session = Session.getDefaultInstance(props);

// 根据环境对象创建一份邮件

Message message = createMessage(session);

// 根据环境对象获取发送邮件的对象

Transport tsp = session.getTransport();

// 调用发送邮件对象的登录连接验证的方法

tsp.connect("redarmycsdn", "redarmycsdn");

// 调用发送邮件对象的发送邮件的方法 发送邮件

tsp.sendMessage(message, message.getAllRecipients());

// 关闭

tsp.close();

}

public static Message createMessage(Session session) {

MimeMessage message = new MimeMessage(session);

try {

// 设置邮件头

message.setFrom(new InternetAddress("aa@sohu.com"));

message.setRecipient(Message.RecipientType.TO, new InternetAddress(

"bb@qq.com"));

message.setSubject("测试带有图片的");

// 设置邮件体

MimeBodyPart part = new MimeBodyPart();

part.setContent("中国....<br/><img src='cid:xx.jpg'>",

"text/html;charset=utf8");

MimeBodyPart image = new MimeBodyPart();

image.setDataHandler(new DataHandler(new FileDataSource(

"src//1.jpg")));

image.setContentID("xx.jpg");

// 设置描述关系

MimeMultipart mp = new MimeMultipart();

mp.addBodyPart(part);

mp.addBodyPart(image);

mp.setSubType("related");

message.setContent(mp);

//带有附件的自己完成.

message.saveChanges();

} catch (AddressException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (MessagingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return message;

}

}

 
 
 
 

MIME协议生成邮件的更多相关文章

  1. MIME协议在邮件中的应用详解

    1.定义 全称是多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions),在MIME出台之前,使用RFC 822只能发送基本的ASCII码文本信息, ...

  2. MIME协议(六) -- MIME实例分析

    MIME实例分析 了解MIME协议的基本组织结构后,下面用Outlook Express撰写出一封显示效果如图4所示的电子邮件,然后分析该邮件的源文件,以便读者更加深入地了解MIME协议. 1. 启动 ...

  3. MIME协议(三) -- MIME邮件的组织结构

    一封MIME邮件可以由多个不同类型的MIME消息组合而成,一个MIME消息表示邮件中的一个基本MIME资源或若干基本MIME消息的组合体.每个MIME消息的数据格式与RFC822数据格式相似,也包括头 ...

  4. MIME协议(一) -- RFC822邮件格式

    MIME协议(一) -- RFC822邮件格式 .   如同其他各种电子文档一样,电子邮件内容也必须遵循一定的格式要求,各种邮件处理程序才能从中分析和提取出发件人.收件人.主题和附件等信息.邮件内容的 ...

  5. 基于公网smtp协议实现邮件服务器

    刚开始做邮件服务器开发,一切都是茫然的.在书上网上都很难找到一套完整的邮件服务器开发教程.在个人的摸索中碰到了很多蛋疼得问题.现终于完成了,将我的开发经验分享给大家. 开发环境:vs2012 mfc ...

  6. MIME协议(四) -- MIME消息的头字段

    MIME消息的头字段 4.1  Content-Type 对于表示某个具体资源的MIME消息,它的消息头中需要指定资源的数据类型:对于MIME组合消息,它的消息头中需要指定组合关系.具体资源的数据类型 ...

  7. MIME协议(二)

    MIME协议 RFC822文档定义了邮件内容的主体结构和各种邮件头字段的详细细节,但是,它没有定义邮件体的格式,RFC822文档定义的邮件体部分通常都只能用于表述一段普通的文本,而无法表达出图片.声音 ...

  8. python开发基于SMTP协议的邮件代发服务

    写在这篇文章前照例给大家灌输点名词解释,理论知识,当然已经很熟悉的同学可以往下翻直接看干货 1. 什么是SMTP SMTP即简单传输协议(Simple Mail Transfer Protocol), ...

  9. 使用 EWS(Exchange Web Service)协议读取邮件、发送邮件

    问题: 公司之前可以通过POP3协议收发邮件,因而在SoapUI中用JavaMail可以读取邮件,后来配置了Office 365,POP3协议端口不再开放,邮件全部读取失败,报login timeou ...

随机推荐

  1. ADIv5.2

    ADI:ARM Debug Interface,出到现在共有五代: 1)version1 and version 2:只针对ARM7TDMI和ARM9的processor: 2)version 3:只 ...

  2. DDR3命令状态(二)

    DDR3中的状态机Diagram,详见相册. ACT:Activate,表示输出行地址,和是否自动precharge控制位. PRE:Precharge,在读写后,可以根据A10来判断是否自己进行pr ...

  3. Vim篇

    Vim编辑器中的一些常用命令: 1:shift+* , 选取光标所在处的整个字符,并查找.(十分方便),快捷键gd 2:set nu , 显示各行行号,使得基于行的命令更方便. 3:shift+% , ...

  4. getResource().getPath()返回的路径空格变成了 %20

    this.getClass().getResource(“/”).getPath()使用者方法查看文件在服务器上的地址,但是地址中的空格会被转化为%20. 解决办法1: URI uri = new U ...

  5. yii2顶部导航使用

    yii2中使用顶部导航的具体方法: 1.视图中调用两个类: use yii\bootstrap\Nav;use yii\bootstrap\NavBar; 2. <?php            ...

  6. Windows7(x64)下Oracle10g安装

    安装环境:Windows7 (64位版本) + Oracle10g 问题描述1:无法启动安装程序,程序提示“程序异常终止.发生内部错误....” 解决过程:按网上说法加6.1版本参数,按xp兼容模式启 ...

  7. 【海岛帝国系列赛】No.3 海岛帝国:运输资源

    海岛帝国:运输资源 [试题描述] YSF考虑到“药师傅”帝国现在资源极度不平均,于是,商讨启用南水北调工程.YZM为首席工程师.现在,YSF由于工作紧张,准备军用物资和民用物资.但他要时时关注运输工程 ...

  8. Atom 和 Sublime Text 相比哪个好?

    好像截止到今天还分不出来,Sublime确实会快一点.

  9. Android扫描文件

    扫描文件及文件夹 package com.bwie.demo; import java.io.File; import java.io.FileFilter; import java.util.Arr ...

  10. webpack笔记_(1)_webpack 安装

    webpack不仅可以解析jsx,也可以将es6转换为es5语法.最终,它把这些代码都打包成一个叫bundle.js的文件,我们在html文件中只引入这么一个js文件就可以了! 打包后,引用的语法im ...