Java 类javax.mail.UIDFolder 实例源码
项目:openbd-core
文件:cfImapConnection.java
public void changeStatus( String folderName, long mailIDs[], Flags.Flag newFlag, boolean value ){
try{
Folder folderToUse = mailStore.getFolder(folderName);
folderToUse.open( Folder.READ_WRITE );
Flags f = new Flags();
f.add( newFlag );
Message mlist[];
if ( folderToUse instanceof UIDFolder )
mlist = ((UIDFolder)folderToUse).getMessagesByUID( mailIDs );
else
mlist = folderToUse.getMessages( returnToInts(mailIDs) );
for ( int x=0; x < mlist.length; x++ )
mlist[x].setFlags( f, value );
folderToUse.close( true );
setData( "succeeded", cfBooleanData.TRUE );
} catch (Exception E ){
setData( "errortext", new cfStringData( E.getMessage() ) );
setData( "succeeded", cfBooleanData.FALSE );
}
}
项目:yako
文件:SimpleEmailMessageProvider.java
public void markMessagesAsRead(String[] ids, boolean seen) throws NoSuchProviderException, MessagingException, IOException {
IMAPFolder folder = (IMAPFolder)getStore().getFolder("Inbox");
folder.open(Folder.READ_WRITE);
UIDFolder uidFolder = folder;
Message[] msgs;
long[] uids = new long[ids.length];
int i = 0;
for (String s : ids) {
try {
uids[i++] = Long.parseLong(s);
} catch (Exception ex) {
Log.d("rgai", "", ex);
}
}
// TODO: if instance not support UID, then use simple id
msgs = uidFolder.getMessagesByUID(uids);
folder.setFlags(msgs, new Flags(Flags.Flag.SEEN), seen);
folder.close(false);
}
项目:openbd-core
文件:cfMailMessageData.java
public void getMessage( cfImapConnection imapConnection, String rootFolder, long messageID, String _attachURI, String _attachDIR ) throws cfmRunTimeException {
try{
Folder folderToList;
if ( rootFolder == null || rootFolder.length() == 0 )
folderToList = imapConnection.mailStore.getDefaultFolder();
else
folderToList = imapConnection.mailStore.getFolder(rootFolder);
if ( (folderToList.getType() & Folder.HOLDS_MESSAGES) != 0){
if ( !folderToList.isOpen() )
folderToList.open( Folder.READ_ONLY );
boolean bResult = false;
if ( folderToList instanceof UIDFolder )
bResult = extractMessage( ((UIDFolder)folderToList).getMessageByUID( messageID ), messageID, _attachURI, _attachDIR );
else
bResult = extractMessage( folderToList.getMessage( (int)messageID ), messageID, _attachURI, _attachDIR );
if ( !bResult ) imapConnection.setStatus( false, "Message does not exist" );
else imapConnection.setStatus( true, "" );
folderToList.close(false);
}
}catch(Exception E){
imapConnection.setStatus( false, E.getMessage() );
}
}
项目:yako
文件:SimpleEmailMessageProvider.java
private MessageListResult getFlagChangesOfMessages(TreeSet<MessageListElement> loadedMessages) throws MessagingException {
List<MessageListElement> emails = new LinkedList<MessageListElement>();
Store store = getStore(account);
if (store == null || !store.isConnected()) {
return new MessageListResult(emails, MessageListResult.ResultType.ERROR);
}
IMAPFolder imapFolder = (IMAPFolder)store.getFolder(accountFolder.folder);
imapFolder.open(Folder.READ_ONLY);
UIDFolder uidFolder = imapFolder;
long smallestUID = getSmallestUID(loadedMessages);
Message messages[] = imapFolder.getMessagesByUID(smallestUID, UIDFolder.LASTUID);
FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
Message unseenMsgs[] = imapFolder.search(ft, messages);
addMessagesToListAs(uidFolder, emails, unseenMsgs, loadedMessages, false);
// searching for seen messages
List<Message> seenMessages = new ArrayList<Message>(Arrays.asList(messages));
for (int k = 0; k < unseenMsgs.length; k++) {
String unseenUid = Long.toString(uidFolder.getUID(unseenMsgs[k]));
for (int l = 0; l < seenMessages.size(); ) {
String seenUid = Long.toString(uidFolder.getUID(seenMessages.get(l)));
if (seenUid.equals(unseenUid)) {
seenMessages.remove(l);
} else {
l++;
}
}
}
addMessagesToListAs(uidFolder, emails, seenMessages.toArray(new Message[seenMessages.size()]), loadedMessages, true);
imapFolder.close(false);
return new MessageListResult(emails, MessageListResult.ResultType.FLAG_CHANGE);
}
项目:yako
文件:SimpleEmailMessageProvider.java
private void addMessagesToListAs(UIDFolder folder, List<MessageListElement> emails, Message[] messages,
TreeSet<MessageListElement> loadedMessages, boolean seen) throws MessagingException {
for (int i = 0; i < messages.length; i++) {
Message m = messages[i];
if (m != null) {
long uid = folder.getUID(m);
MessageListElement testerElement = new MessageListElement(-1, Long.toString(uid), seen, null, null, account,
Type.EMAIL, true);
MessageListElement loadedMsg = MessageProvider.Helper.isMessageLoaded(loadedMessages, testerElement);
if (loadedMsg != null) {
testerElement.setDate(loadedMsg.getDate());
emails.add(testerElement);
}
}
}
}
项目:yako
文件:SimpleEmailMessageProvider.java
@Override
public void markMessageAsRead(String id, boolean seen) throws NoSuchProviderException, MessagingException, IOException {
IMAPFolder folder = (IMAPFolder)getStore().getFolder("Inbox");
folder.open(Folder.READ_WRITE);
UIDFolder uidFolder = (UIDFolder)folder;
Message ms = uidFolder.getMessageByUID(Long.parseLong(id));
if (ms != null) {
ms.setFlag(Flags.Flag.SEEN, seen);
}
folder.close(false);
}
项目:yako
文件:SimpleEmailMessageProvider.java
@Override
public MessageListResult getUIDListForMerge(String lowestStoredMessageUID) throws MessagingException {
UIDFolder folder = getFolder();
if (folder == null) {
return null;
}
List<MessageListElement> mles = new LinkedList<MessageListElement>();
Message[] messages = folder.getMessagesByUID(Long.parseLong(lowestStoredMessageUID), UIDFolder.LASTUID);
for (int i = 0; i < messages.length; i++) {
Message m = messages[i];
if (m != null) {
long uid = folder.getUID(m);
MessageListElement testerElement = new MessageListElement(Long.toString(uid), account);
mles.add(testerElement);
}
}
return new MessageListResult(mles, MessageListResult.ResultType.MERGE_DELETE);
}
项目:yako
文件:SimpleEmailMessageProvider.java
public void deleteMessage(String id) throws NoSuchProviderException, MessagingException, IOException {
IMAPFolder folder = (IMAPFolder)getStore().getFolder("Inbox");
folder.open(Folder.READ_WRITE);
UIDFolder uidFolder = (UIDFolder)folder;
Message ms = uidFolder.getMessageByUID(Long.parseLong(id));
if (ms != null) {
ms.setFlag(Flags.Flag.DELETED, true);
}
folder.close(true);
}
项目:openbd-core
文件:cfPOP3.java
private void deleteMessagesFromServer( cfSession _Session ) throws cfmRunTimeException {
//--[ Get Message Store
Store popStore = openConnection( _Session );
//--[ Open up the Folder:INBOX and retrieve the headers
Folder popFolder = openFolder( _Session, popStore );
try{
Message[] listOfMessages = popFolder.getMessages();
FetchProfile fProfile = new FetchProfile();
fProfile.add( FetchProfile.Item.ENVELOPE );
if ( containsAttribute( "UID" ) ){
String[] messageUIDList = getMessageUIDList( getDynamic(_Session,"UID").getString() );
fProfile.add(UIDFolder.FetchProfileItem.UID);
popFolder.fetch( listOfMessages, fProfile );
for ( int x=0; x < listOfMessages.length; x++ ){
if ( messageUIDValid( messageUIDList, getMessageUID( popFolder, listOfMessages[x] ) ) ){
listOfMessages[x].setFlag( Flags.Flag.DELETED, true );
}
}
}else if ( containsAttribute( "MESSAGENUMBER" ) ){
int[] messageList = getMessageList( getDynamic(_Session,"MESSAGENUMBER").getString() );
popFolder.fetch( listOfMessages, fProfile );
for ( int x=0; x < listOfMessages.length; x++ ){
if ( messageIDValid(messageList, listOfMessages[x].getMessageNumber() ) ){
listOfMessages[x].setFlag( Flags.Flag.DELETED, true );
}
}
}else{
throw newRunTimeException( "Either MESSAGENUMBER or UID attribute must be specified when ACTION=DELETE" );
}
}catch(Exception ignore){}
//--[ Close off the folder
closeFolder( popFolder );
closeConnection( popStore );
}
项目:openbd-core
文件:cfPOP3.java
private void readMessages( cfSession _Session, Folder popFolder, cfQueryResultData popData, int _start, int _max, boolean GetAll, File attachmentDir ) throws cfmRunTimeException {
try{
int maxRows = _max;
int startRow = _start;
String messageNumber = getDynamic(_Session,"MESSAGENUMBER").getString();
boolean containsUID = containsAttribute( "UID" );
boolean usingMessageNumber = messageNumber.length() > 0;
int msgCount = popFolder.getMessageCount();
// if MAXROWS is not specified, or UID or MESSAGENUMBER is, then we want to get all the messages
if ( _max == -1 || containsUID || usingMessageNumber ){
maxRows = msgCount;
}
if ( containsUID || usingMessageNumber ){
startRow = 1;
}
if ( msgCount != 0 && startRow > msgCount ){
throw newRunTimeException( "The value of STARTROW must not be greater than the total number of messages in the folder, " + popFolder.getMessageCount() + "." );
}
Message[] listOfMessages;
if ( !usingMessageNumber ){
listOfMessages = popFolder.getMessages();
}else{
listOfMessages = popFolder.getMessages( getMessageList( messageNumber ) );
}
FetchProfile fProfile = new FetchProfile();
fProfile.add( FetchProfile.Item.ENVELOPE );
fProfile.add(UIDFolder.FetchProfileItem.UID);
popFolder.fetch( listOfMessages, fProfile );
if ( containsUID ){
String[] messageUIDList = getMessageUIDList( getDynamic(_Session,"UID").getString() );
for ( int x=0; x < listOfMessages.length; x++ ){
if ( messageUIDList.length == 0 || messageUIDValid( messageUIDList, getMessageUID( popFolder, listOfMessages[x] ) ) ){
populateMessage( _Session, listOfMessages[x], popData, GetAll, attachmentDir, popFolder );
}
}
}else{
popFolder.fetch( listOfMessages, fProfile );
int end = startRow -1 + maxRows;
if ( end > listOfMessages.length ){
end = listOfMessages.length;
}
for ( int x=startRow-1; x < end; x++ ){
populateMessage( _Session, listOfMessages[x], popData, GetAll, attachmentDir, popFolder );
}
}
}catch(Exception E){
if ( E.getMessage() != null )
throw newRunTimeException( E.getMessage() );
else
throw newRunTimeException( E.toString() );
}
}
项目:javamail-mock2
文件:MailboxFolder.java
public synchronized Message[] getByIds(final long start, final long end/* final Folder folder*/) {
checkExists();
final List<MockMessage> sms = new ArrayList<MockMessage>();
int num = 0;
MockMessage lastMsg = null;
for (final MockMessage mockMessage : new TreeSet<MockMessage>(messages.values())) {
lastMsg = mockMessage;
if (end == UIDFolder.LASTUID) {
if (getMessageCount() != 1 && mockMessage.getMockid() < start) { // TODO
// check?
continue;
}
} else {
if (mockMessage.getMockid() < start || mockMessage.getMockid() > end) {
continue;
}
}
mockMessage.setMessageNumber(++num);
// mockMessage.setFolder(folder);
sms.add(mockMessage);
}
if (end == UIDFolder.LASTUID && sms.size() == 0) {
lastMsg.setMessageNumber(++num);
// lastMsg.setFolder(folder);
sms.add(lastMsg);
}
logger.debug("getByIds(" + start + "," + end + " for " + getFullName() + " returns " + sms.size());
return sms.toArray(new Message[sms.size()]);
}
项目:yako
文件:SimpleEmailMessageProvider.java
private long getNextUID(IMAPFolder folder, UIDFolder uidImapFolder, int messageCount) throws MessagingException {
if (account.getAccountType().equals(MessageProvider.Type.GMAIL)) {
return folder.getUIDNext();
} else {
int start = Math.max(1, messageCount);
int end = start;
Message messages[] = folder.getMessages(start, end);
return uidImapFolder.getUID(messages[0]) + 1;
}
}
项目:yako
文件:SimpleEmailMessageProvider.java
public byte[] getAttachmentOfMessage(String messageId,
String attachmentId, AttachmentProgressUpdate onProgressUpdate)
throws NoSuchProviderException, MessagingException, IOException {
IMAPFolder folder = (IMAPFolder)getStore().getFolder("Inbox");
UIDFolder uidFolder = (UIDFolder)folder;
folder.open(Folder.READ_ONLY);
Message ms = uidFolder.getMessageByUID(Long.parseLong(messageId));
byte[] data = getMessageAttachment(ms, attachmentId, onProgressUpdate);
folder.close(false);
return data;
}
项目:elasticsearch-imap
文件:ParallelPollingIMAPMailSource.java
private ProcessResult processMessageSlice(final int start, final int end, final String folderName) throws Exception {
logger.debug("processMessageSlice() started with " + start + "/" + end + "/" + folderName);
final long startTime = System.currentTimeMillis();
final Store store = Session.getInstance(props).getStore();
store.connect(user, password);
final Folder folder = store.getFolder(folderName);
final UIDFolder uidfolder = (UIDFolder) folder;
IMAPUtils.open(folder);
try {
final Message[] msgs = folder.getMessages(start, end);
folder.fetch(msgs, IMAPUtils.FETCH_PROFILE_HEAD);
logger.debug("folder fetch done");
long highestUid = 0;
int processedCount = 0;
for (final Message m : msgs) {
try {
IMAPUtils.open(folder);
final long uid = uidfolder.getUID(m);
mailDestination.onMessage(m);
highestUid = Math.max(highestUid, uid);
processedCount++;
if (Thread.currentThread().isInterrupted()) {
break;
}
} catch (final Exception e) {
stateManager.onError("Unable to make indexable message", m, e);
logger.error("Unable to make indexable message due to {}", e, e.toString());
IMAPUtils.open(folder);
}
}
final long endTime = System.currentTimeMillis() + 1;
final ProcessResult pr = new ProcessResult(highestUid, processedCount, endTime - startTime);
logger.debug("processMessageSlice() ended with " + pr);
return pr;
} finally {
IMAPUtils.close(folder);
IMAPUtils.close(store);
}
}
项目:openbd-core
文件:cfMailFolderMessagesData.java
private Map<String, cfData> extractMessage( Message Mess ){
Map<String, cfData> HT = new FastMap<String, cfData>();
try{
HT.put( "subject", new cfStringData( Mess.getSubject() ) );
Folder parentFolder = Mess.getFolder();
if ( parentFolder instanceof UIDFolder )
HT.put( "id", new cfNumberData( ((UIDFolder)parentFolder).getUID( Mess) ) );
else
HT.put( "id", new cfNumberData( Mess.getMessageNumber() ) );
//--[ Get the FROM field
Address[] from = Mess.getFrom();
if ( from != null && from.length > 0 ){
cfStructData sdFrom = new cfStructData();
String name = ((InternetAddress)from[0]).getPersonal();
if ( name != null )
sdFrom.setData( "name", new cfStringData( name ) );
sdFrom.setData( "email", new cfStringData( ((InternetAddress)from[0]).getAddress() ) );
HT.put( "from", sdFrom );
}
//--[ Get the TO/CC/BCC field
cfArrayData AD = extractAddresses( Mess.getRecipients(Message.RecipientType.TO) );
if ( AD != null )
HT.put( "to", AD );
else
HT.put( "to", cfNullData.NULL );
AD = extractAddresses( Mess.getRecipients(Message.RecipientType.CC) );
if ( AD != null )
HT.put( "cc", AD );
else
HT.put( "cc", cfNullData.NULL );
AD = extractAddresses( Mess.getRecipients(Message.RecipientType.BCC) );
if ( AD != null )
HT.put( "bcc", AD );
else
HT.put( "bcc", cfNullData.NULL );
//--[ Set the flags
HT.put( "answered", cfBooleanData.getcfBooleanData( Mess.isSet( Flags.Flag.ANSWERED ) ) );
HT.put( "deleted", cfBooleanData.getcfBooleanData( Mess.isSet( Flags.Flag.DELETED ) ) );
HT.put( "draft", cfBooleanData.getcfBooleanData( Mess.isSet( Flags.Flag.DRAFT ) ) );
HT.put( "flagged", cfBooleanData.getcfBooleanData( Mess.isSet( Flags.Flag.FLAGGED ) ) );
HT.put( "recent", cfBooleanData.getcfBooleanData( Mess.isSet( Flags.Flag.RECENT ) ) );
HT.put( "seen", cfBooleanData.getcfBooleanData( Mess.isSet( Flags.Flag.SEEN ) ) );
HT.put( "size", new cfNumberData( Mess.getSize() ) );
HT.put( "lines", new cfNumberData( Mess.getLineCount() ) );
Date DD = Mess.getReceivedDate();
if ( DD == null )
HT.put( "rxddate", new cfDateData( System.currentTimeMillis() ) );
else
HT.put( "rxddate", new cfDateData( DD.getTime() ) );
DD = Mess.getSentDate();
if ( DD == null )
HT.put( "sentdate", new cfDateData( System.currentTimeMillis() ) );
else
HT.put( "sentdate", new cfDateData( DD.getTime() ) );
}catch(Exception E){
com.nary.Debug.printStackTrace( E );
}
return HT;
}
项目:greenmail
文件:ImapSessionFolder.java
private UIDFolder unwrapUIDFolder() {
if (_folder instanceof UIDFolder) {
return (UIDFolder) _folder;
}
throw new IllegalStateException("No UIDFolder supported by "+_folder.getClass());
}