实现原理还是用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; } }
public class JavaMailInfo { public int folderType; public int unreadMailsCount; public int allMailsCount; public int newMailsCount; public boolean isSuccessful; public String email; public String password; }