最近实现了一个android程序,能从一个gmail帐户中得到收件箱(Inbox)里面邮件信息,如多少未读邮件,邮件总数等。类似的功能,网上有很多例子。
JavaMailInfo.java
实现原理还是用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;
}