离线 Gmail 桌面应用教程 [第一部分]






4.50/5 (2投票s)
帮助您同步您的 Gmail 邮件,并让您即使在离线状态下也能查看您的邮件。
引言
本系列文章将帮助您创建一个支持离线的 Gmail 应用。它将允许您搜索邮件、查看邮件、在新邮件到达时发出警报等等… 本部分涵盖基础知识。
Using the Code
我们开始逐步进行教程
- 首先,您需要添加三个 jar 文件,它们是:
- mail.jar
- mailapi.jar
- smtp.jar
您可以通过在您的 IDE 中将它们添加到构建路径来完成此操作
- 现在我们导入必要的类
- 为了检查邮件,我们使用 IMAP 协议,所以我们通过以下代码进行设置
- 现在我们创建 session 和 store 对象,它们连接到相应的 Gmail IMAP 服务器
- 现在当我们连接上之后,我们移动到包含我们所有邮件的收件箱文件夹
- 您可以使用以下命令检查消息总数
System.out.println("Total number of messages-->"+inbox.getMessageCount());
- 现在要检查您最近的消息(例如,您的前 10 条消息),请执行以下操作
- 现在,如果我们想查看任何特定邮件的内容,那么首先我们检索该邮件,然后检查其内容类型,以便如果它是 mutipart,则需要进行一些进一步的处理
System.out.println("Lets suppose we retrieve content of message number 1"); Message message=inbox.getMessage(1); String content=null; if(message.getContentType().toLowerCase().contains("text/plain")){ content=(String)message.getContent(); } else if(message.getContentType().toLowerCase().contains("text/html")){ content=(String)message.getContent(); } else { Multipart multipart = (Multipart) message.getContent(); for (int x = 0; x < multipart.getCount(); x++) { BodyPart bodyPart = multipart.getBodyPart(x); content=bodyPart.getContent().toString(); } } content=content.replaceAll("<.*?>",""); System.out.println("Contents of mail are:\n"+content);
说明
现在,当我们提取消息的内容时,我们需要查看该消息的内容类型。如果消息是 multipart,那么它由许多消息组成,我们需要整理出每个消息的正文部分。对于文本和 HTML 内容,不需要任何特殊操作。在 multipart 的情况下,我们计算组件的数量,然后提取正文部分。
content.replaceAll("<.*?>","");-->
这样做是为了删除我们获得的输出的 HTML 标签。 - 现在,如果我们想显示所有可能的邮件,而不是显示一些选定的邮件,那么请执行以下操作(请记住,它以从旧到新的方式显示邮件)
Message[] messages = inbox.getMessages(); for(Message msg:messages) { System.out.println("From:"+msg.getFrom()[0]+"\nSubject:"+msg.getSubject()+"\nDate Receving:"+msg.getReceivedDate()+"\nMessage Number:"+msg.getMessageNumber()); System.out.println("--------------------------------------------------------------"); }
说明
inbox.getMessages()
检索所有消息,这些消息通过 foreach 数组显示。 - 如果您想以从新到旧的方式查看消息,那么只需反转消息数组,然后显示数据
- 要注销,请执行以下操作
inbox.close(true); store.close();
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Store;
Properties props = System.getProperties(); props.setProperty("mail.store.protocol", "imaps");
说明
为了访问邮件,我们有两个协议,分别是 POP3 和 IMAP。在这两个协议中,IMAP 比 POP 协议提供更多的功能。这里我们设置系统属性以使用 IMAP 协议。
Session session = Session.getDefaultInstance(props, null); Store store = session.getStore("imaps"); store.connect("imap.gmail.com", "Your Username here","Your password here");
说明
这里 store 是一个抽象类,它模拟一个消息存储及其访问协议(在本例中为 IMAP),用于存储和检索消息。我们已经将 session 设置为使用上面创建的属性
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_WRITE);
说明
所有消息都存储在 folder 对象中。在这里,我们通过名称 Inbox 检索一个文件夹。要访问该文件夹,我们需要打开它,这通过 inbox.Open(Folder.READ_WRITE) 完成。现在 inbox 包含我们收到的所有邮件,并且这些邮件都是可编辑的。
Message[] messages1 = inbox.getMessages(inbox.getMessageCount()-9,inbox.getMessageCount()); for(Message message:messages1) { System.out.println("From:"+message.getFrom()[0]+"\nSubject:"+message.getSubject()+"\nDate Receving:"+message.getReceivedDate()+"\nMessage Number:"+message.getMessageNumber()); System.out.println("--------------------------------------------------------------"); }
说明
这里 inbox.getMessageCount()
给我们消息的总数。我们使用 inbox.getMessage(from message number,to message number)
,它检索 10 条消息并将它们放入 messages1
中。现在我们使用 foreach 数组来检索信息。
message.getFrom()[0]
-->给出发送消息的人的地址
message.getSubject()
-->提供消息的主题
message.getReceivedDate()
-->给出接收日期
message.getMessageNumber()
-->给出消息编号。如果您想检索任何特定消息,这非常重要
关注点
这仅仅是基础知识,在下一部分中,我们将讨论一些高级内容,例如为离线查看制作缓存、发送邮件、仅查看未读邮件、标记邮件和搜索邮件。
我制作了一个演示(涵盖的内容比这更多,但将在后面的部分中解释),在“下载演示项目(1MB)”中。