300打分!javamail进行pop3收信居然不能在服务器端读头???who can help me?(300分)

  • 主题发起人 主题发起人 hellojava
  • 开始时间 开始时间
H

hellojava

Unregistered / Unconfirmed
GUEST, unregistred user!
在调用message[]=folder.getmessages()时好像就已经收信了??
后面对message调用getallheads()根本没有用?
我有一个大邮件,每次调用getmessages()时就要等好久
估计当时就已经在收信了???
问题是我想先在服务器端判断头,如果已经收下来了就不再收信了
如何实现啊?????
请各位大侠指点
 
可以用socket直接去读信的heads
用socket去读pop服务器的110端口,

USER
PASS
STAT
后就可以直接读信的head了。
 
>>在调用message[]=folder.getmessages()时好像就已经收信了??
不是的,这时得到的是关于message的轻量级对象,只有在用getXXX方法之后,才真正
收信。
要收没有收过的信,不用这个方法。
在server上,已经收下来的信被标记为seen,你收信时只要把有seen标记信排除掉就可以了。
或者,在每次收信之后,将其标为delete,下次不用判断,收的当然都是新信。
 
我试过,好像不行的
flag每次取的时候都是新的
无法保存在服务器端
 
>>flag每次取的时候都是新的,无法保存在服务器端
你指的是什么意思,是不能将信delete?还是还能将有seen flag的排除?
 
是这样的如果用
message.setFlag(Flags.Flag.DELETED,true);
然后用
folder.expunge();可以删除
但是如果不用folder.expunge();只用message.setFlag(Flags.Flag.DELETED,true);
下次重新连接后,message.setFlag(Flags.Flag.DELETED,true);
必须重新来一次
也就是说flag的状态不能在服务器上保存,每次连接都是新的了!
 
补充,你用的是什么provider,是自己开发的吗?
可以讲讲如何写provider???
 
对邮件的删除就是这样的,它是一个两阶段过程。你不就是想每次收信都收新信嘛,
这样不就可以实现吗?取的时候将邮件删除!用folder.expunge()不爽吗?
>>你用的是什么provider,是自己开发的吗?
就是Sunr的东东。
>>可以讲讲如何写provider???
这可要花点功夫。看看下面的东东。
The JavaMail API is composed of a set of abstract classes that model the various
pieces of a typical mail system. These classes include,
#Message—Abstract class that represents an electronic mail message.
JavaMail implements the RFC822 and MIME Internet messaging standards. The
MimeMessage class extends Message to represent a MIME-style email message.
#Store—Abstract class that represents a database of messages maintained by a
mail server and grouped by owner. A Store uses a particular access protocol.
#Folder—Abstract class that provides a way of hierarchically organizing
messages. Folders can contain messages and other folders. A mail server
provides each user with a default folder, and users can typically create and fill
subfolders.
#Transport—Abstract class that represents a specific transport protocol. A
Transport object uses a particular transport protocol to send a message.
As a service provider, you implement abstract classes in terms of your specific
protocol or system. For example, an IMAP provider implements the JavaMail API
using the IMAP4 protocol. Clients then
use your implementation to manipulate their
electronic mail.
If you have time and interest,just try it !
 
我用的是一个英国人写的pop3provider,还算可以
每次收信都删除的确很好,但是pop3也应该提供不删除的功能
这种情况下有可能实现在服务器端判断是否收过吗?
通过读head??读message-id??
 
我在前面不是说过吗:
已经收下来的信将被标记为seen,通过读flag,你可以判断是否收过。
你收信时只要把有seen标记信排除掉就可以了
 
问题是每次新收下来的信flag都是无效的啊
要你人为的去设置才可以
 
>>这种情况下有可能实现在服务器端判断是否收过吗?
pop服务器不支持这些.
 
能不能将你的程序贴出来看看
 
我想可能是我的pop3.jar的问题,不知道eguy大侠用的是什么pop3支持包?
 
我正在用jsp做一个项目,但在线收邮件真的不会,请高手能教教我,最好能寄我一个pop3.jar,我将感激不尽!(ezhb@sina.com)
 
to hellojava:
我的pop3支持包用的就是Sun的东东。
由于pop协议的缺陷,javamail prodvider中的很多东西在pop provider里是没有实现的。建议你还是在收信
时将信删除。你想一下,如果不把服务器中的信删除,信量小倒无所谓,信量大怎么办。
如果一定要实现你的想法的话,或者用IMAP服务器,或者用其它方法如你原来
用的方法:读head等.

 
hellojava: 请继续请继续请继续或结束问题
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部