现在的位置: 首页 > 综合 > 正文

Android 检查gmail Inbox邮件

2013年12月07日 ⁄ 综合 ⁄ 共 1975字 ⁄ 字号 评论关闭

最近实现了一个android程序,能从一个gmail帐户中得到收件箱(Inbox)里面邮件信息,如多少未读邮件,邮件总数等。类似的功能,网上有很多例子。

实现原理还是用java提供的一些类,先看一看界面效果:


图一:输入email地址和密码,只能是gmail的,别的邮件目前没做



图二:连接服务器过程中。



图三:结果,我只实现了一些简单的功能,别的没有实现。


下面说一下怎么实现的:

最重要的是需要三个包,也就是.jar,分别是:mail.jar, additional.jar, activation.jar。我当时就想,为什么sun不把这几个包放在它标准的SDK里,像什么xml解析,加密等都放到标准SDK里了,怎么这个不呢?后来我想了一下,可能是因为这个是跟应用密切相关的东西,所以他们认为不适合放到SDK里。也只是我的猜想。

这个三个包可以从sun官网上下载,也可以下到source,开源的。
把三个包下载后,放在android工程目录的lib文件内,如果没有就新建一个,然后加入到工程中。

同时,一定要在AndroidManifest.xml中作如下声明:

    <!-- mail.jar  -->
    <uses-library android:name="javax.mail" />
    <!-- activation.jar  -->
    <uses-library android:name="javax.activation" />
    <!-- additional.jar  -->
    <uses-library android:name="org.apache.harmony.awt" />

实现代码如下:

JavaMailUtil.java

import java.util.Properties;

import javax.mail.Folder;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;

import com.lee.demo.javamail.model.JavaMailInfo;

public class JavaMailUtil
{
    private static final String FOLDERTYPE_INBOX = "INBOX";
   
    public static boolean getInboxMailsInfo(JavaMailInfo outInfo)
    {
        boolean retVal = false;

        try
        {
            final String email = outInfo.email;
            final String password = outInfo.password;
           
            Properties props = System.getProperties();
            props.setProperty("mail.store.protocol", "imaps");
            Session session = Session.getDefaultInstance(props, null);
            Store store = session.getStore("imaps");
            store.connect("imap.gmail.com", email, password);
           
            Folder inbox = store.getFolder(FOLDERTYPE_INBOX);
            inbox.open(Folder.READ_ONLY);
           
            outInfo.allMailsCount = inbox.getMessageCount();
            outInfo.unreadMailsCount = inbox.getUnreadMessageCount();
            outInfo.newMailsCount = inbox.getNewMessageCount();
            outInfo.isSuccessful = true;
           
            inbox.close(false);
            store.close();
            retVal = true;
        }
        catch (NoSuchProviderException e)
        {
            e.printStackTrace();
        }
        catch (MessagingException e)
        {
            e.printStackTrace();
        }
       
        return retVal;
    }
}

JavaMailInfo.java

public class JavaMailInfo
{   
    public int      folderType;
    public int      unreadMailsCount;
    public int      allMailsCount;
    public int      newMailsCount;
    public boolean  isSuccessful;
    public String   email;
    public String   password;
}

抱歉!评论已关闭.