javamail例子

 
javamail收邮件示例: 
需要包javamail.jar,activation.jar 

列子: 
package com.acestek.lbs.terminal; 
import java.io.*; 
import java.text.*; 
import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.*; 

import org.apache.log4j.Logger; 


public class CheckMail { 

/** 
* Logger for this class 
*/ 
private static final Logger logger = Logger 
.getLogger(CheckMail.class); 

    private MimeMessage mimeMessage = null; 
    private String saveAttachPath = "d:\\";          //附件下载后的存放目录 
    private StringBuffer bodytext = new StringBuffer(); //存放邮件内容的StringBuffer对象 
    private String dateformat = "yy-MM-dd HH:mm";       //默认的日前显示格式 
    
    /** 
     * 构造函数,初始化一个MimeMessage对象 
     */ 
    public CheckMail(){} 
    public CheckMail(MimeMessage mimeMessage){ 
        this.mimeMessage = mimeMessage; 
        System.out.println("create a PraseMimeMessage object........"); 
    } 

    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; 
        } 
        return replysign; 
    } 

    /** 
     * 获得此邮件的Message-ID 
     */ 
    public String getMessageId()throws MessagingException{ 
        return mimeMessage.getMessageID(); 
    } 
     
    /** 
     * 【判断此邮件是否已读,如果未读返回返回false,反之返回true】 
     */ 
    public boolean isNew()throws MessagingException{ 
        boolean isnew = false; 
        Flags flags = ((Message)mimeMessage).getFlags(); 
        Flags.Flag []flag = flags.getSystemFlags(); 
        System.out.println("flags's length: "+flag.length); 
        for(int i=0;i<flag.length;i++){ 
            if(flag[i] == Flags.Flag.SEEN){ 
                isnew=true; 
                System.out.println("seen Message......."); 
                break; 
            } 
        } 
        return isnew; 
    } 
     
    /** 
     * 判断此邮件是否包含附件 
     */ 
    public boolean isContainAttach(Part part)throws Exception{ 
        boolean attachflag = false; 
        String contentType = part.getContentType(); 
        if(part.isMimeType("multipart/*")){ 
            Multipart mp = (Multipart)part.getContent(); 
            for(int i=0;i<mp.getCount();i++){ 
                BodyPart mpart = mp.getBodyPart(i); 
                String disposition = mpart.getDisposition(); 
                if((disposition != null) &&((disposition.equals(Part.ATTACHMENT)) ||(disposition.equals(Part.INLINE)))) 
                    attachflag = true; 
                else if(mpart.isMimeType("multipart/*")){ 
                    attachflag = isContainAttach((Part)mpart); 
                }else{ 
                    String contype = mpart.getContentType(); 
                    if(contype.toLowerCase().indexOf("application") != -1) attachflag=true; 
                    if(contype.toLowerCase().indexOf("name") != -1) attachflag=true; 
                } 
            } 
        }else if(part.isMimeType("message/rfc822")){ 
            attachflag = isContainAttach((Part)part.getContent()); 
        } 
        return attachflag; 
    } 
    /** 
     * 【保存附件】 
     */ 
    public void saveAttachMent(Part part)throws Exception{ 
        String fileName = ""; 
        if(part.isMimeType("multipart/*")){ 
            Multipart mp = (Multipart)part.getContent(); 
            for(int i=0;i<mp.getCount();i++){ 
                BodyPart mpart = mp.getBodyPart(i); 
                String disposition = mpart.getDisposition(); 
                if((disposition != null) &&((disposition.equals(Part.ATTACHMENT)) ||(disposition.equals(Part.INLINE)))){ 
                    fileName = mpart.getFileName(); 
                    if(fileName.toLowerCase().indexOf("gb2312") != -1){ 
                        fileName = MimeUtility.decodeText(fileName); 
                    } 
                                        saveFile(fileName,mpart.getInputStream()); 
                }else if(mpart.isMimeType("multipart/*")){ 
                    saveAttachMent(mpart); 
                }else{ 
                    fileName = mpart.getFileName(); 
                    if((fileName != null) && (fileName.toLowerCase().indexOf("GB2312") != -1)){ 
                        fileName=MimeUtility.decodeText(fileName); 
                        saveFile(fileName,mpart.getInputStream()); 
                    } 
                } 
            } 
        }else if(part.isMimeType("message/rfc822")){ 
            saveAttachMent((Part)part.getContent()); 
        } 
    } 
     
    /** 
     * 【设置附件存放路径】 
     */ 
    public void setAttachPath(String attachpath){ 
        this.saveAttachPath = attachpath; 
    } 
     
    /** 
     * 【设置日期显示格式】 
     */ 
    public void setDateFormat(String format)throws Exception{ 
        this.dateformat = format; 
    } 
     
    /** 
     * 【获得附件存放路径】 
     */ 
    public String getAttachPath(){ 
        return saveAttachPath; 
    } 
     
    /** 
     * 【真正的保存附件到指定目录里】 
     */ 
    private void saveFile(String fileName,InputStream in)throws Exception{ 
        String osName = System.getProperty("os.name"); 
        String storedir = getAttachPath(); 
        String separator = ""; 
        if(osName == null) osName=""; 
        if(osName.toLowerCase().indexOf("win") != -1){ 
            separator = "\\"; 
            if(storedir == null || storedir.equals("")) storedir="d:\\"; 
        }else{ 
            separator = "/"; 
            storedir = "/mail"; 
        } 
        File storefile = new File(storedir+separator+fileName); 
        System.out.println("storefile's path: "+storefile.toString()); 
        //for(int i=0;storefile.exists();i++){ 
            //storefile = new File(storedir+separator+fileName+i); 
        //} 
        BufferedOutputStream bos = null; 
        BufferedInputStream  bis = null; 
        try{ 
            bos = new BufferedOutputStream(new FileOutputStream(storefile)); 
            bis = new BufferedInputStream(in); 
            int c; 
            while((c=bis.read()) != -1){ 
                bos.write(c); 
                bos.flush(); 
            } 
            logger.info("附件已保存到"+storedir); 
        }catch(Exception exception){ 
            exception.printStackTrace(); 
            throw new Exception("文件保存失败!"); 
        }finally{ 
            bos.close(); 
            bis.close(); 
        } 
    } 

  /** 

     * delete mail 

     */ 

    public static void deleteMail() 
    { 
        String host = "pop3.sina.com"; 
        String userName = "xingui5624"; 
        String passWord = "******"; 

        Properties props = new Properties(); 
        //Properties props = System.getProperties();这种方法创建 Porperties 同上 

        Session session = Session.getDefaultInstance(props); 
        session.setDebug(true); 
        try { 
            System.out.println("begin delete ..........."); 
            Store store = session.getStore("pop3"); 
            store.connect(host, userName, passWord);//验证邮箱 
            Folder folder = store.getFolder("INBOX"); 
            folder.open(Folder.READ_WRITE);//设置我读写方式打开 
            int countOfAll = folder.getMessageCount();//取得邮件个数 
            int unReadCount = folder.getUnreadMessageCount();//已读个数 
            int newOfCount = folder.getNewMessageCount();//未读个数 
            System.out.println("总个数:" +countOfAll); 
            System.out.println("已读个数:" +unReadCount); 
            System.out.println("未读个数:" +newOfCount); 
            for(int i=1; i<=countOfAll; i++) 
            { 
                Message message = folder.getMessage(i); 
                message.setFlag(Flags.Flag.DELETED, true);//设置已删除状态为true 
                if(message.isSet(Flags.Flag.DELETED)) 
                    System.out.println("已经删除第"+i+"邮件。。。。。。。。。"); 
            } 
            folder.close(true); 
            store.close(); 
            System.out.println("delete ok................................."); 
        } catch (NoSuchProviderException e) { 
            e.printStackTrace(); 
        } catch (MessagingException e) { 
            e.printStackTrace(); 
        } 
    } 


} 


调用示例: 
  public static void main(String args[])throws Exception{ 
        String host = "主机名/ip";     //【pop.mail.yahoo.com.cn】 
        String username ="用户名";     //【wwp_1124】 
        String password ="密码";       //【........】 

        Properties props = new Properties(); 
        Session session = Session.getDefaultInstance(props, null); 
        Store store = session.getStore("pop3"); 
        store.connect(host, username, password); 

        Folder folder = store.getFolder("INBOX"); 
        folder.open(Folder.READ_ONLY); 
        Message message[] = folder.getMessages(); 
        System.out.println("Messages's length: "+message.length); 
        PraseMimeMessage pmm = null; 
        for(int i=0;i<message.length;i++){ 
            pmm = new PraseMimeMessage((MimeMessage)message[i]); 
            System.out.println("Message "+i+" subject: "+pmm.getSubject()); 
            System.out.println("Message "+i+" sentdate: "+pmm.getSentDate()); 
            System.out.println("Message "+i+" replysign: "+pmm.getReplySign()); 
            System.out.println("Message "+i+" hasRead: "+pmm.isNew()); 
            System.out.println("Message "+i+" containAttachment: "+pmm.isContainAttach((Part)message[i])); 
            System.out.println("Message "+i+" form: "+pmm.getFrom()); 
            System.out.println("Message "+i+" to: "+pmm.getMailAddress("to")); 
            System.out.println("Message "+i+" cc: "+pmm.getMailAddress("cc")); 
            System.out.println("Message "+i+" bcc: "+pmm.getMailAddress("bcc")); 
            pmm.setDateFormat("yy年MM月dd日 HH:mm"); 
            System.out.println("Message "+i+" sentdate: "+pmm.getSentDate()); 
            System.out.println("Message "+i+" Message-ID: "+pmm.getMessageId()); 
            pmm.getMailContent((Part)message[i]); 
            System.out.println("Message "+i+" bodycontent: \r\n"+pmm.getBodyText()); 
            pmm.setAttachPath("c:\\tmp\\coffeecat1124"); 
            pmm.saveAttachMent((Part)message[i]); 
        } 
    } 
} 
/***************************/ 
public boolean  getMail() 
{ 
boolean hasAttach =false; 
try{ 

Properties props = new Properties(); 
        Session session = Session.getDefaultInstance(props, null); 
        Store store = session.getStore("pop3"); 
        store.connect(host, username, password); 

        Folder folder = store.getFolder("INBOX"); 
        folder.open(Folder.READ_ONLY); 
        Message message[] = folder.getMessages(); 
        System.out.println("共有: "+message.length+"封邮件"); 
        CheckMail pmm = null; 
        for(int i=0;i<message.length;i++){ 
        if(i==(message.length-1)) 
        { 
            pmm = new CheckMail((MimeMessage)message[i]); 
            System.out.println("Message "+i+" 主题: "+pmm.getSubject()); 
            System.out.println("Message "+i+" 发送日期: "+pmm.getSentDate()); 
           // System.out.println("Message "+i+" 是否需要回执: "+pmm.getReplySign()); 
           // System.out.println("Message "+i+" 是否已读: "+pmm.isNew()); 
            System.out.println("Message "+i+" 是否有附件: "+pmm.isContainAttach((Part)message[i])); 
            System.out.println("Message "+i+" 发件人: "+pmm.getFrom()); 
            //System.out.println("Message "+i+" 收件人: "+pmm.getMailAddress("to")); 
            //System.out.println("Message "+i+" cc: "+pmm.getMailAddress("cc")); 
            //System.out.println("Message "+i+" bcc: "+pmm.getMailAddress("bcc")); 
            pmm.setDateFormat("yy年MM月dd日 HH:mm"); 
            System.out.println("Message "+i+" 发送日期: "+pmm.getSentDate()); 
            //System.out.println("Message "+i+" Message-ID: "+pmm.getMessageId()); 
           // pmm.getMailContent((Part)message[i]); 
           // System.out.println("Message "+i+" 正文: \r\n"+pmm.getBodyText()); 
            pmm.setAttachPath("d:\\"); 
            pmm.saveAttachMent((Part)message[i]); 
            if(pmm.isContainAttach((Part)message[i])) 
            { 
            hasAttach=true; 
            } 
        } 
        } 
        return hasAttach; 
} 
catch(Exception e) 
{ 
return false; 
} 
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值