JavaMail混合复杂邮件的编写

上一篇日志我与大家分享了利用JavaMail编写单纯的文字和图片邮件的过程,今天就跟大家分享一下混合并且复杂的邮件编写,准备工作和上一篇日志相同。

那么我们直接来看源码:

Code
    
    
1 import java.io.FileNotFoundException;
2
3   import java.io.FileOutputStream;
4
5   import java.io.IOException;
6
7 import java.util.Properties;
8
9 import javax.activation.DataHandler;
10
11 import javax.activation.FileDataSource;
12
13 import javax.mail.Message;
14
15 import javax.mail.MessagingException;
16
17 import javax.mail.Session;
18
19 import javax.mail.internet.AddressException;
20
21 import javax.mail.internet.InternetAddress;
22
23 import javax.mail.internet.MimeBodyPart;
24
25 import javax.mail.internet.MimeMessage;
26
27 import javax.mail.internet.MimeMultipart;
28
29 import javax.mail.internet.MimeUtility;
30
31
32
33 public class MailAttch {
34
35
36
37 public static void main(String[] args) throws AddressException, MessagingException, FileNotFoundException, IOException {
38
39 // 1.创建邮件
40
41 Properties prop = new Properties();
42
43 // 2.创建session独享
44
45 Session session = Session.getInstance(prop);
46
47 // 创建邮件主体
48
49 MimeMessage message = new MimeMessage(session);
50
51 /* 3.设置邮件的属性 */
52
53 // 设置发件人地址
54
55 message.setFrom( new InternetAddress( " L@l.com " ));
56
57 // 设置收件人地址
58
59 message.setRecipient(Message.RecipientType.TO, new InternetAddress( " Pyl@l.com " ));
60
61 // 设置邮件的主题
62
63 message.setSubject( " 你好!给你推荐一首歌! " );
64
65
66
67 // 4.创建邮件正文
68
69 MimeBodyPart content = new MimeBodyPart();
70
71 content.setContent( " 这是一张图片:<br/><img src='cid:xx.jpg'> " , " text/html;charset=gb2312 " );
72
73
74
75 // 5.设置图片
76
77 MimeBodyPart image = new MimeBodyPart();
78
79 // 将图片加载到DataHandler对象中
80
81 image.setDataHandler( new DataHandler( new FileDataSource( " src\\snow.jpg " )));
82
83 // 设置该图片在正文中的ID,是为了让HTML标签引用
84
85 image.setContentID( " xx.jpg " );
86
87
88
89 // 6.设置音乐
90
91 MimeBodyPart music = new MimeBodyPart();
92
93 // 将音乐加载如DataHandler对象中
94
95 music.setDataHandler( new DataHandler( new FileDataSource( " src\\06.mp3 " )));
96
97 // 防止该附件名字乱码
98
99 music.setFileName(MimeUtility.encodeText( " 你听得到.mp3 " ));
100
101
102
103 // 7.描述关系
104
105 MimeMultipart mm = new MimeMultipart();
106
107 // 装入正文
108
109 mm.addBodyPart(content);
110
111 // 装入图片
112
113 mm.addBodyPart(image);
114
115 // 装入音乐
116
117 mm.addBodyPart(music);
118
119
120
121 // 设置提交类型
122
123 mm.setSubType( " mixed " );
124
125 // 将关系设置到邮件体中
126
127 message.setContent(mm);
128
129 // 保存邮件更改
130
131 message.saveChanges();
132
133 // 在制定位置生成该邮件
134
135 message.writeTo( new FileOutputStream( " G:\\5.eml " ));
136
137 }
138
139 }

       邮件呈现效果为:

 呈现效果

在源码中我们可以看到,大部分使用的类与方法相同,而在描述邮件各部分之间关系的时候我们可以看到关系变为:

mm.setSubType("mixed");

       这种关系模式为混合模式,而关于混合我们可以根据以下图示来进一步理解:

   MimeMultiPart关系描述

在图示中,我们可以看到,当正文Content与图片Pictuer同时存在时关系为related并且作为一个MimeBodyPart来设置描述关系;而当出现其他附件时,将作为单独的附件MimeBodyPart来设置描述关系,所以在源码编写时一定要注意邮件各部分之间的关系,否则生成会失败。

此外,在上面的源码中我们是拿音频文件来做的测试,大家可以使用其他允许格式的文件来进行测试,这里就不再做进一步测试。

希望大家以后多多光临我的博客,我也会即使把自己学到的与大家分享,在互相学习的同时也请老鸟们做指导。

/* 复杂邮件程序完整Java源码,支持添加附件,图片,HTML格式文本,支持远程WebService调用*/ package com.hx.mail; import java.io.File; import java.util.Map; import javax.mail.Message.RecipientType; /** * MailServices 邮件接收发送接口定义类 * * @author 380595305@qq.com * Date 2010-05-11 * @version 1.0 */ public interface HexiangMailService { /** * sendMail 发送邮件函数 * * @param sender 是String类型,邮件发送者信息 * @param password 是String类型,邮件发送者密码 * @param addressee 是String类型,邮件接收者信息 * @param subject 是String类型,传入邮件主题 * @param text 是String类型,传入邮件消息 */ void sendMail(String sender,String password,String addressee,String subject,String text) throws Exception; /** * sendMail 发送邮件函数 * * @param sender 是String类型,邮件发送者信息 * @param password 是String类型,邮件发送者密码 * @param addressee 是String类型,邮件接收者信息 * @param subject 是String类型,传入邮件主题 * @param text 是String类型,传入邮件消息 * @param enclosures Map 邮件附件 * @param copyToSends Map 邮件抄送信息 */ void sendMail(String sender,String password,String addressee,String subject,String text,Map enclosures,Map copyToSends) throws Exception; /** * sendMail 发送邮件函数 * * @param sender 是String类型,邮件发送者信息 * @param password 是String类型,邮件发送者密码 * @param subject 是String类型,传入邮件主题 * @param imgs 是File[]类型,邮件正文中附件的图片信息 * @param htmlContent 是String类型,传入邮件消息正文 * @param enclosures Map 邮件附件 * @param copyToSends Map 邮件抄送信息 */ void sendMail(String sender,String password,String subject,File[] imgs,String htmlContent,Map enclosures,Map copyToSends) throws Exception; } package com.hx.mail; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Proper
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值