Java邮件开发(二):使用JMail发送一封图文并茂且包含附件的邮件(下)

在上一篇文章Java邮件开发(二):使用JMail发送一封图文并茂且包含附件的邮件(上) 中,我们大概了解了一封邮件的组成。

下面我们完成发送有以下要求的邮件:

1.正文是一段html代码

2.这段html代码中内嵌一张图片

3.这封邮件包含两个附件

首先根据上篇文章最后的“邮件组织结构API”,分析以下有哪些MimeMultipart对象,有哪些MimeBodyPart对象。

1.有一个MimeMultipart对象msgPart,表示整封邮件的消息体,且消息体的multipart类型为mixed(有附件)。

2.msgPart应该有三个MimeBodyPart对象,分别为body(表示正文),attach1(表示附件1),attach2(表示附件2)

3.有一个MimeMultipart对象contentPart,表示正文的消息体且消息体的multipart类型为related(有图片内嵌资源)。而contentPart对象和body对象有关联

4..contentPart应该有两个MimeBodyPart对象,分别为content(表示正文的html代码),img(表示内嵌资源图片)

分析清楚MimeMultipart对象和MimeBodyPart对象以及他们之间的关系,代码写起来就很轻松了。

代码如下:

package com.zyh.demo;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.Multipart;
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.util.ByteArrayDataSource;

/**
 * 创建一个复杂的邮件,这个邮件包括一段正文和两个附件
 * 其中正文要包含一张图片
 * @author Administrator
 *
 */
public class Demo3 {
	
	public static void main(String[] args) throws Exception {
		Properties props = new Properties();
		props.setProperty("mail.smtp.auth", "true");
		props.setProperty("mail.transport.protocol", "smtp");
		
		Session session = Session.getInstance(props);
		session.setDebug(true);
		
		Message msg = new MimeMessage(session);
		/*邮件消息头设置*/
		msg.setFrom(new InternetAddress("zyh5540@sohu.com"));
		msg.setRecipients(RecipientType.TO, InternetAddress.parse("zyh5540@sohu.com,554077931@qq.com,zyh5540@163.com,zyh5540@sina.com"));
		msg.setSubject("From sohu 这是一封复杂邮件");
		
		/*邮件消息内容设置,包括两个附件和一段正文*/
		Multipart msgPart = new MimeMultipart("mixed");
		msg.setContent(msgPart);		
		
		MimeBodyPart body = new MimeBodyPart();     //表示正文
		MimeBodyPart attach1 = new MimeBodyPart();  //表示附件1
		MimeBodyPart attach2 = new MimeBodyPart();  //表示附件2
		msgPart.addBodyPart(body);
		msgPart.addBodyPart(attach1);
		msgPart.addBodyPart(attach2);
		
		/*以下为设置正文*/
		/*正文是文字和图片混合的*/
		Multipart contentPart = new MimeMultipart("related");
		body.setContent(contentPart);
		MimeBodyPart content = new MimeBodyPart(); //文字
		MimeBodyPart img = new MimeBodyPart();     //图片
		contentPart.addBodyPart(content);
		contentPart.addBodyPart(img);
		
		ByteArrayDataSource fileds = new ByteArrayDataSource(new FileInputStream("D:\\picture\\jpg\\touxiang.jpg"),"application/octet-stream");  
        DataHandler imgDataHandler = new DataHandler(fileds);
//		DataSource imgds = new FileDataSource("D:\\picture\\jpg\\touxiang.jpg");
//		DataHandler imgDataHandler = new DataHandler(imgds);
		img.setDataHandler(imgDataHandler);
		//注意:Content-ID的属性值一定要加上<>,不能是touxiang.jpg
		img.setHeader("Content-ID", "<touxiang.jpg>");
		//为图片设置文件名,有的邮箱会把html内嵌的图片也当成附件
		img.setFileName("touxianga.jpg");
		//设置文字内容
		/**
		 * 注意:在html代码中要想显示刚才的touxiang.jpg
		 * src里不能直接写Content-ID的值,要用cid:这种方式
		 */
		content.setContent("<div style='color:red;font-size:18px;'>从sohu发来的邮件</div>:我这里有一张图片<img src='cid:touxiang.jpg' alt='touxiang' width=\"100px\" height='100px' />,好看吗?", "text/html;charset=utf-8");
		/*正文内容设置结束*/
		
		/*下面为设置附件*/
		attach1.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\firefox.txt")));
		attach1.setFileName("file1.txt");
		attach2.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\java.txt")));
		attach2.setFileName("file2.txt");
		
		msg.saveChanges();
		//把邮件以文件的形式写入到磁盘
		OutputStream os = new FileOutputStream("E:\\others\\demo.eml");
		msg.writeTo(os);
		os.close();
		
		Transport trans = session.getTransport();
		trans.connect("smtp.sohu.com", 25, "zyh5540", "test");
		trans.sendMessage(msg,msg.getAllRecipients());
	}
}

附:

1.JavaMail开发jar包下载地址:http://download.csdn.net/download/zyh5540/6900667

2.参考代码下载地址:http://download.csdn.net/download/zyh5540/6907731
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值