MIME协议生成邮件
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协议生成邮件的更多相关文章
- MIME协议在邮件中的应用详解
1.定义 全称是多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions),在MIME出台之前,使用RFC 822只能发送基本的ASCII码文本信息, ...
- MIME协议(六) -- MIME实例分析
MIME实例分析 了解MIME协议的基本组织结构后,下面用Outlook Express撰写出一封显示效果如图4所示的电子邮件,然后分析该邮件的源文件,以便读者更加深入地了解MIME协议. 1. 启动 ...
- MIME协议(三) -- MIME邮件的组织结构
一封MIME邮件可以由多个不同类型的MIME消息组合而成,一个MIME消息表示邮件中的一个基本MIME资源或若干基本MIME消息的组合体.每个MIME消息的数据格式与RFC822数据格式相似,也包括头 ...
- MIME协议(一) -- RFC822邮件格式
MIME协议(一) -- RFC822邮件格式 . 如同其他各种电子文档一样,电子邮件内容也必须遵循一定的格式要求,各种邮件处理程序才能从中分析和提取出发件人.收件人.主题和附件等信息.邮件内容的 ...
- 基于公网smtp协议实现邮件服务器
刚开始做邮件服务器开发,一切都是茫然的.在书上网上都很难找到一套完整的邮件服务器开发教程.在个人的摸索中碰到了很多蛋疼得问题.现终于完成了,将我的开发经验分享给大家. 开发环境:vs2012 mfc ...
- MIME协议(四) -- MIME消息的头字段
MIME消息的头字段 4.1 Content-Type 对于表示某个具体资源的MIME消息,它的消息头中需要指定资源的数据类型:对于MIME组合消息,它的消息头中需要指定组合关系.具体资源的数据类型 ...
- MIME协议(二)
MIME协议 RFC822文档定义了邮件内容的主体结构和各种邮件头字段的详细细节,但是,它没有定义邮件体的格式,RFC822文档定义的邮件体部分通常都只能用于表述一段普通的文本,而无法表达出图片.声音 ...
- python开发基于SMTP协议的邮件代发服务
写在这篇文章前照例给大家灌输点名词解释,理论知识,当然已经很熟悉的同学可以往下翻直接看干货 1. 什么是SMTP SMTP即简单传输协议(Simple Mail Transfer Protocol), ...
- 使用 EWS(Exchange Web Service)协议读取邮件、发送邮件
问题: 公司之前可以通过POP3协议收发邮件,因而在SoapUI中用JavaMail可以读取邮件,后来配置了Office 365,POP3协议端口不再开放,邮件全部读取失败,报login timeou ...
随机推荐
- oracle 分区表的维护
1:添加分区: ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01','YYYY-MM-DD')); SAL ...
- windows下nginx和php环境的配置
至于php的配置,与之前博文中使用apache服务器时一样. 对于nginx的配置,来看看如何修改配置文件: #user nobody; worker_processes ; #error_log l ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON color_fuses1
zw版[转发·台湾nvp系列Delphi例程]HALCON color_fuses1 procedure TForm1.Button1Click(Sender: TObject);var w, h : ...
- SqlServer:此数据库处于单用户模式,导致数据库无法删除的处理
此数据库处理单用户模式,尚在连接当中,无法删除(既使将SQLServer停止后再启动也是如此) USE [master] GO /****** Object: StoredProcedure [dbo ...
- 图像处理工具包ImagXpress中如何定义查看器的属性
想要在图像处理控件ImagXpress中查看一个图像,首先需要创建一个查看器,之后你可以按照你自身的需要,来定义查看器的属性. 创建查看器 想要动态的创建一个查看器,需要先定义一个新的mageXVie ...
- simpleBLEPeripheral.c 文件分析
这个配置或者说任务, 让这个蓝牙设备成为了一个简单的BLE外设. 这里定义了外设的广播数据, 以及最重要, char被改变之后的回调, 引出后来的coreHandler里面的, ack 以及写e2pr ...
- Linux/Unix中的#!和!#
是不是在Terminal输入命令的时候,输入了很长的一个路径,然后发现还有在同一条命令中再输一次的时候很恼火,其实Shell是提供了trick的,就是使用!#(和#!不同哦) 习惯写脚本的猿,通常对于 ...
- linux的lsof命令
删除文件,用命令df -h看磁盘空间,但发现没有变化. 这种情况,需要使用命令查看是不是文件被某个进程占用了: /usr/sbin/lsof |grep deleted
- Apache httpd和JBoss构建高可用集群环境
1. 前言 集群是指把不同的服务器集中在一起,组成一个服务器集合,这个集合给客户端提供一个虚拟的平台,使客户端在不知道服务器集合结构的情况下对这一服务器集合进行部署应用.获取服务等操作.集群是企业应用 ...
- ASP.NET MVC3 Dynamically added form fields model binding
Adding new Item to a list of items, inline is a very nice feature you can provide to your user. Thi ...