`

收邮件、更改邮件标志 javamai +imap

    博客分类:
  • Java
阅读更多

 

来源:http://blog.csdn.net/superstorm5/archive/2008/03/07/2157022.aspx

网上很多用pop3收邮件的例子,但是用pop3收邮件只能获取收件箱里面所有邮件,邮件是否已读等标记无法获取,使用imap协议则避免了这个尴尬,imap不仅能获得一个邮件的详细信息(比如是否已读,是否回复),它还允许用户更改邮件的标记,但是目前支持imap协议的邮件服务器并不多,我知道的只有21cn和gmail,下面的例子中使用了代理 、SSL认证多个内容,请大家参考。

      代码如下:

package com.yourcompany.mail;

import java.io.*;

import java.security.Security;
import java.text.*;

import java.util.*;

import javax.mail.*;

import javax.mail.internet.*;

public class gmailRead {

    
private MimeMessage mimeMessage = null;

    
private String saveAttachPath = ""// 附件下载后的存放目录

    
private StringBuffer bodytext = new StringBuffer();// 存放邮件内容的StringBuffer对象

    
private String dateformat = "yy-MM-dd HH:mm"// 默认的日前显示格式

    
/**
     * * 構造函数,初始化一个MimeMessage對象
     * 
     
*/


    
public gmailRead() {

    }


    
public gmailRead(MimeMessage mimeMessage) {

        
this.mimeMessage = mimeMessage;

        System.out.println(
"create a PraseMimeMessage object........");

    }


    
/**
     * * 獲取一个MimeMessage對象
     * 
     
*/


    
public void setMimeMessage(MimeMessage mimeMessage) {

        
this.mimeMessage = mimeMessage;

    }


    
/**
     * * 獲得發件人的地址和姓名
     * 
     
*/


    
public String getFrom() throws Exception {

        InternetAddress address[] 
= (InternetAddress[]) mimeMessage.getFrom();

        String from 
= address[0].getAddress();

        
if (from == null)

            from 
= "";

        String personal 
= address[0].getPersonal();

        
if (personal == null)

            personal 
= "";

        String fromaddr 
= personal + "<" + from + ">";

        
return fromaddr;

    }


    
/**
     * 
     * 獲得郵件的收件人,抄送,和密送的地址和姓名,根據所传递的参数的不同如
     * 
     * to 獲得邮件的收件人 cc 獲得邮件的抄送人地址 bcc 獲得邮件的密送人地址
     * 
     
*/


    
public String getMailAddress(String type) throws Exception {

        String mailaddr 
= "";

        String addtype 
= type.toUpperCase();

        InternetAddress[] address 
= null;

        
if (addtype.equals("TO"|| addtype.equals("CC")

        
|| addtype.equals("BCC")) {

            
if (addtype.equals("TO")) {

                address 
= (InternetAddress[]) mimeMessage

                .getRecipients(Message.RecipientType.TO);

            }
 else if (addtype.equals("CC")) {

                address 
= (InternetAddress[]) mimeMessage

                .getRecipients(Message.RecipientType.CC);

            }
 else {

                address 
= (InternetAddress[]) mimeMessage

                .getRecipients(Message.RecipientType.BCC);

            }


            
if (address != null{

                
for (int i = 0; i < address.length; i++{

                    String email 
= address[i].getAddress();

                    
if (email == null)

                        email 
= "";

                    
else {

                        email 
= MimeUtility.decodeText(email);

                    }


                    String personal 
= address[i].getPersonal();

                    
if (personal == null)

                        personal 
= "";

                    
else {

                        personal 
= MimeUtility.decodeText(personal);

                    }


                    String compositeto 
= personal + "<" + email + ">";

                    mailaddr 
+= "," + compositeto;

                }


                mailaddr 
= mailaddr.substring(1);

            }


        }
 else {

            
throw new Exception("Error emailaddr type!");

        }


        
return mailaddr;

    }


    
/**
     * * 獲得郵件主题
     * 
     
*/


    
public String getSubject() throws MessagingException {

        String subject 
= "";

        
try {

            subject 
= MimeUtility.decodeText(mimeMessage.getSubject());

            
if (subject == null)

                subject 
= "";

        }
 catch (Exception exce) {

        }


        
return subject;

    }


    
/**
     * * 獲得郵件的發送日期
     * 
     
*/


    
public String getSentDate() throws Exception {

        Date sentdate 
= mimeMessage.getSentDate();

        SimpleDateFormat format 
= new SimpleDateFormat(dateformat);

        
return format.format(sentdate);

    }


    
/**
     * * 獲得郵件的正文内容
     * 
     
*/


    
public String getBodyText() {

        
return bodytext.toString();

    }


    
/**
     * 
     * 解析郵件,把得到的郵件内容保存到一个StringBuffer对象中,解析邮件 *
     * 
     * 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析
     * 
     
*/


    
public void getMailContent(Part part) throws Exception {

        String contenttype 
= part.getContentType();

        
int nameindex = contenttype.indexOf("name");

        
boolean conname = false;

        
if (nameindex != -1)

            conname 
= true;

        System.out.println(
"CONTENTTYPE: " + contenttype);

        
if (part.isMimeType("text/plain"&& !conname) {

            bodytext.append((String) part.getContent());

        }
 else if (part.isMimeType("text/html"&& !conname) {

            bodytext.append((String) part.getContent());

        }
 else if (part.isMimeType("multipart/*")) {

            Multipart multipart 
= (Multipart) part.getContent();

            
int counts = multipart.getCount();

            
for (int i = 0; i < counts; i++{

                getMailContent(multipart.getBodyPart(i));

            }


        }
 else if (part.isMimeType("message/rfc822")) {

            getMailContent((Part) part.getContent());

        }
 else {

        }


    }


    
/**
     * * 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"
     * 
     
*/


    
public boolean getReplySign() throws MessagingException {

        
boolean replysign = false;

        String needreply[] 
= mimeMessage

        .getHeader(
"Disposition-Notification-To");

        
if (needreply != null{

            replysign 
= true;

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlo
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics