JavaEE-JavaMail 04 接收邮件的API

检查邮件和解析邮件的步骤

  1. 根据Propreties文件创建一个Session

  2. 创建POP3 Store对象并连接POP服务器

  3. 创建Folder对象, 在邮箱中打开对应的文件夹

  4. 得到Message对象

  5. 解析Message对象

  6. 关闭Store对象和Folder对象

javax.mail.Store

用于执行邮件接收任务, 该类对象封装了某种邮件协议的底层细节

Store store = session.getStore("pop3");
store.connect(emailAddress, PasswordUtils.readPassword(emailAddress));

URLName url = new URLName(MailConstants.PROTOCAL_POP3, MailConstants.POP3_HOST_OF_SINA, 
    Integer.parseInt(MailConstants.POP3_PORT_OF_SINA), null, emailAddress, PasswordUtils.readPassword(emailAddress));
store store = session.getStore(url);
store.connect(emailAddress, PasswordUtils.readPassword(emailAddress));

主要方法
connect();连接邮件服务器
connect(String host, String username, String password);
connect(String host, int port, String username, String password)
isConnected();检测客户端和邮件服务器是否连接
getFolder(String folderName); 用于返回指定名称的邮件文件夹

javax.mail.Folder

代表了文件夹抽象类的实例

获得一个Folder
可以从Session获取
可以从Store获取
可以从其他的Folder获取

// 以Store为例, 获得收件箱
Folder folder = store.getFolder("INBOX");
// 以只读权限打开收件箱, 还可以配置为Folder.READ_WRITE
folder.open(Folder.READ_ONLY);

主要方法
1. 基本方法
boolean exists(); 查看Folder是否存在
open(int Mode); 打开一个Folder, 两种模式: READ_ONLY/READ_WRITE
boolean isOpen(); 查看一个Folder是否为打开状态
close(boolean); 关闭一个Folder, true:任何已删除的邮件将彻底从邮件服务器中删除, false:将邮件标记为已删除的
getName(); 返回Folder的名称
getFullName(); 返回Folder的完整名称[存在子文件夹时使用]
getURLName(); 返回Folder的URLName表示
getParent(); 返回当前Folder的父Folder
getType(); 返回Folder的类型, Folder.HOLDS_MESSAGES/Folder.HOLDS_FOLDERS

getMode(); 返回Folder的打开形式, READ_ONLY/READ_WRITE
getSeparator(); 返回Folder路径的分隔符
getStore(); 获得指定Folder的Store对象

2. 管理文件夹
create(int type); 创建Folder, type:
Folder.HOLDS_MESSAGES/Folder.HOLDS_FOLDERS
delete(boolean); 在Folder关闭后删除Folder, true: 递归删除子Folder
renameTo(Folder folder); 在Folder关闭后重命名Folder

3. 管理邮件
appendMessages(Message[]); 将数组中的Message对象附在Folder中
copyMessages(Message[], Folder dest); 将数组中的Messages拷贝到目标Folder中
expunge(); 此方法用于物理删除邮件

message.setFlag(Flags.Flag.DELETED, true); // 把消息标记为已删除


4. 列出文件夹内容
list()/listSubscribed(); 返回一个Folder下所有的子Folder
list(String pattern)/listSubscribed(String pattern);以指定模式列出一个Folder下所有的子Folder

5. 检查邮件
getMessageCount(); 得到指定Folder下Message的记录数
getNewMessageCount(); 得到指定Folder下新Message的记录数
getUnreadMessageCount(); 得到指定Folder下未读Message的记录数<br/
getDeletedMessageCount(); 得到指定Folder下已删除Message的记录数
hasNewMessages(); 查看指定Folder是否有新Message

6. 获取Message
getMessage(int number); 得到指定索引的Message
getMessages(); 返回指定Folder下所有的Message
getMessages(int start, int end); 返回指定索引范围的Message
getMessages(int[] numbers); 返回指定索引的Message
fetch(Message[], FetchProfile fp); 返回指定headers的所有消息

7. 搜索Message
search(SearchTerm term>; 搜索指定条件的Message
search(SearchTerm term, Message[] messages);根据搜索条件查找指定messages里面所有符合条件的Message

8. 更新Message[改变指定的Folder的消息集合的标志]
setFlags(Message[], Flags flag, boolean value);
setFlags(int start, int end, Flags flag, boolean value);
setFlags(int[] numbers, Flags flag, boolean value);
getPermanentFlags();

javax.mail.Flags.Flag

该类内部预定义了各种不同的邮件标记

Flags.Flag.ANSWERED, 标识邮件是否已回复
Flags.Flag.DELETED, 标识邮件是否需要删除
Flags.Flag.DRAFT, 标识邮件是否为草稿
Flags.Flag.FLAGGED, 标识邮件是否为回收站中的邮件
Flags.Flag.RECENT, 标识邮件是否为新邮件
Flags.Flag.SEEN, 标识邮件是否已被阅读
Flags.Flag.USER, 标识邮件是否支持用户自定义标记, 此属性为只读

构造方法
new Flag();
new Flag(Flags flags);
new Flags(Flags.Flag flag);常用
new Flags(String flag);

主要方法
getSystemFlags(); 返回当前Flag对象中所有的系统标记
getUserFlags(); 返回当前Flag对象中所有的用户标记

message.setFlag(Flags.Flag.DELETED, true);


javax.mail.search.SearchTerm

用于实现邮件搜索的API

逻辑组合关系类
javax.mail.search.AndTerm AND条件
javax.mail.search.OrTerm OR条件
javax.mail.search.NotTerm NOT条件
javax.mail.search.ComparisonTerm 比较条件

其他条件搜索类
javax.mail.search.SentDateTerm
javax.mail.search.ReceivedDateTerm
javax.mail.search.BodyTerm
javax.mail.search.FromStringTerm
javax.mail.search.RecipientStringTerm
javax.mail.search.SubjectTerm

你可能感兴趣的:(javaee,javamail)