如何具体解析content的操作我就不赘述了,我现在给出如何把修改好的content发送出去的例子。
//对于发送html类型的content,里边包括图片。
for(int i=0;i<_mailContent.getImgHash().size();i++)
{
MimeBodyPart mbp1 = new MimeBodyPart();
//得到图片的数据
FileDataSource fds = new FileDataSource( (String)_mailContent.getImgHash().get("IMG"+i));
//设置到MimeBodyPart中
mbp1.setDataHandler(new DataHandler(fds));
//设置图片附件和html的对应关系
mbp1.setHeader("Content-ID","IMG"+i);
mp.addBodyPart(mbp1);
}
3.邮件的状态
我们在阅读完邮件后可以给邮件设置删除标志,然后在关闭FOLDER的时候用true来清空已经被标志为删除的邮件。邮件的状态是在类FLAGS.FLAG中定义的。包括如下几种:
Flags.Flag.ANSWERED
Flags.Flag.DELETED
Flags.Flag.DRAFT
Flags.Flag.FLAGGED
Flags.Flag.RECENT
Flags.Flag.SEEN
Flags.Flag.USER
我们可以根据不同的需要进行设置,但是需要注意的是,不是所有的服务器都支持这些状态。我们在做操作之前可以用getPermanentFlags方法来得到Message中的状态。参考下面代码
Message m = folder.getMessage(1);
// set the DELETED flag
m.setFlag(Flags.Flag.DELETED, true);
// Check if DELETED flag is set of this message
if (m.isSet(Flags.Flag.DELETED))
System.out.println("DELETED message");
// Examine ALL system flags for this message
Flags flags = m.getFlags();
Flags.Flag[] sf = flags.getSystemFlags();
for (int i = 0; i < sf.length; i++)
{
if (sf[i] == Flags.Flag.DELETED)
System.out.println("DELETED message");
else if (sf[i] == Flags.Flag.SEEN)
System.out.println("SEEN message");
}
用JavaMail发送带附件的Email(3)
时间:2010-12-13
4.接收带附件的邮件
在带有附件的邮件中,消息的内容是Multipart型,这样我们就需要解析它来得到content和附件(它是发送带附件的邮件的逆向过程)。大家在使用outlook、foxmail这些电子邮件客户端的时候会发现,我们的邮件被从服务器上下载下来并且保存到本地硬盘上了,这种方式方便我们离线浏览邮件。在下面的范例中我们也把服务器上的邮件保存到本地。如果有兴趣大家可以编写一个客户端的图形界面来读取保存下来的邮件。
在下面的例子里,我只是向大家介绍如何解析附件。
private void getAttachFile(Part messagePart,BufferedOutputStream writeAttachObj) throws IOException, MessagingException { Object content = messagePart.getContent() ;
try
{
//这种情况下的邮件都是用multi模式发送的,
// 这种模式包括有附件的邮件和用html表示content的邮件
if (content instanceof Multipart)
{
Multipart contentTmp = (Multipart) content ;
//如果是MULTI模式发送的,BodyPart(0).getContent()肯定就是content
System.out.println("content==" + contentTmp.getBodyPart(0).getContent()) ;
//getCount()可以得到content中bodyPart的个数,content就是第一个
//bodyPart,其它的附件按照顺序类推。但是有的时候附件就是另外一个邮件,
//而这个邮件里边可能有其他的附件。下面代码用循环对嵌套情况进行解析。
for (int i = 0 ; i < contentTmp.getCount() ; i++)
{
if (contentTmp.getBodyPart(i).isMimeType("multipart/*"))
{
Multipa
|