javaMail

来源:互联网 发布:江苏瑞中数据 编辑:程序博客网 时间:2024/06/05 21:04
163邮箱地址
http://mail.163.com/js6/main.jsp?sid=tCdrObrSBVLrBJDpSYSSUZjawXWyYGOw#module=options.LinkModule|{%22subModName%22%3A%22smtp%22%2C%22link%22%3A%22option_pop3%22}
点击设置可以开通pop3或者imap或者smtp服务
服务器地址如下:
POP3服务器:pop.163.com
SMTP服务器:smtp.163.com
IMAP服务器:imap.163.com
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
使用javaMail收邮件主要有两种协议,一种是pop3,一种是imap。这两种协议都可以用来收邮件,但是在其中的处理上是有区别的。pop3是不支持判断邮件是否为已读的,也就是说你不能直接从收件箱里面取到未读邮件,这需要自己进行判断,然而imap就提供了这样的功能,使用imap时可以很轻松的判断该邮件是否为已读或未读或其他。

此外收件箱中的每一封邮件都对应着一个MessageNumber,所以可以通过一个MessageNumber拿到对应的那封邮件。如:Message message = folder.getMessage(messageNumber);

pop3和imap主要区别就是能否判断邮件状态的问题,其他的操作都差不多.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
** * <b>使用IMAP协议接收邮件</b><br/> * <p>POP3和IMAP协议的区别:</p> * <b>POP3</b>协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,<br/> * 比如通过客户端收取了邮箱中的3封邮件并移动到其它文件夹,邮箱服务器上的这些邮件是没有同时被移动的。<br/> * <p><b>IMAP</b>协议提供webmail与电子邮件客户端之间的双向通信,客户端的操作都会同步反应到服务器上,对邮件进行的操作,服务 * 上的邮件也会做相应的动作。比如在客户端收取了邮箱中的3封邮件,并将其中一封标记为已读,将另外两封标记为删除,这些操作会 * 即时反馈到服务器上。</p> * <p>两种协议相比,IMAP 整体上为用户带来更为便捷和可靠的体验。POP3更易丢失邮件或多次下载相同的邮件,但IMAP通过邮件客户端 * 与webmail之间的双向同步功能很好地避免了这些问题。</p> */ 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
使用IMAP协议接收邮件,服务器连接,邮件读取都正常,但是运行到messages.setFlag(Flags.Flag.SEEN, true);  这一步时就会报错。错误代码如下:
Exception in thread "main" javax.mail.MessagingException: A6 NO STORE State error;
  nested exception is:
com.sun.mail.iap.CommandFailedException: A6 NO STORE State error
at com.sun.mail.imap.IMAPMessage.setFlags(IMAPMessage.java:858)
at javax.mail.Message.setFlag(Message.java:574)
at com.MailReceive.main(MailReceive.java:59)
Caused by: com.sun.mail.iap.CommandFailedException: A6 NO STORE State error
at com.sun.mail.iap.Protocol.handleResult(Protocol.java:336)
at com.sun.mail.imap.protocol.IMAPProtocol.storeFlags(IMAPProtocol.java:1373)
at com.sun.mail.imap.protocol.IMAPProtocol.storeFlags(IMAPProtocol.java:1358)
at com.sun.mail.imap.IMAPMessage.setFlags(IMAPMessage.java:854)
... 2 more

答案
folder.open(Folder.READ_WRITE);//如果想要改变服务器的状态,必须设置成读写模式
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

0 0