Java 类javax.mail.search.SearchTerm 实例源码

项目:product-ei    文件:GreenMailServer.java   
/**
 * Check mail folder for an email using subject.
 *
 * @param emailSubject Email subject
 * @param folder       mail folder to check for an email
 * @param protocol     protocol used to connect to the server
 * @return whether mail received or not
 * @throws MessagingException if we're unable to connect to the store
 */
private static boolean isMailReceivedBySubject(String emailSubject, String folder, String protocol,
        GreenMailUser user) throws MessagingException {
    boolean emailReceived = false;
    Folder mailFolder;
    Store store = getConnection(user, protocol);
    try {
        mailFolder = store.getFolder(folder);
        mailFolder.open(Folder.READ_WRITE);
        SearchTerm searchTerm = new AndTerm(new SubjectTerm(emailSubject), new BodyTerm(emailSubject));
        Message[] messages = mailFolder.search(searchTerm);
        for (Message message : messages) {
            if (message.getSubject().contains(emailSubject)) {
                log.info("Found the Email with Subject : " + emailSubject);
                emailReceived = true;
                break;
            }
        }
    } finally {
        if (store != null) {
            store.close();
        }
    }
    return emailReceived;
}
项目:alfresco-repository    文件:AlfrescoImapFolder.java   
@Override
protected long[] searchInternal(SearchTerm searchTerm)
{
    List<SimpleStoredMessage> messages = getMessages();
    long[] result = new long[messages.size()];
    int i = 0;

    for (SimpleStoredMessage message : messages)
    {
        if (searchTerm.match(message.getMimeMessage()))
        {
            result[i] = message.getUid();
            i++;
        }
    }
    return Arrays.copyOfRange(result, 0, i);
}
项目:alfresco-greenmail    文件:InMemoryStore.java   
public long[] search(SearchTerm searchTerm) {
    ArrayList matchedMessages = new ArrayList();

    for (int i = 0; i < mailMessages.size(); i++) {
        SimpleStoredMessage message = (SimpleStoredMessage) mailMessages.get(i);
        if (searchTerm.match(message.getMimeMessage())) {
            matchedMessages.add(message);
        }
    }

    long[] matchedUids = new long[matchedMessages.size()];
    for (int i = 0; i < matchedUids.length; i++) {
        SimpleStoredMessage storedMessage = (SimpleStoredMessage) matchedMessages.get(i);
        long uid = storedMessage.getUid();
        matchedUids[i] = uid;
    }
    return matchedUids;
}
项目:Java-9-Programming-Blueprints    文件:Rule.java   
private SearchTerm createFieldSearchTerm(String f) {
    switch (f.toLowerCase()) {
        case "from":
            return new FromStringTerm(matchingText);
        case "cc":
            return new RecipientStringTerm(Message.RecipientType.CC, matchingText);
        case "to":
            return new RecipientStringTerm(Message.RecipientType.TO, matchingText);
        case "body":
            return new BodyTerm(matchingText);
        case "subject":
            return new SubjectTerm(matchingText);
        default:
            return null;
    }
}
项目:Java-9-Programming-Blueprints    文件:RuleTest.java   
@Test
public void multipleFieldsShouldReturnOrTerm() {
    final Set fields = new HashSet();
    fields.add("to");
    fields.add("from");
    fields.add("cc");

    Rule rule = Rule.create()
            .sourceFolder("INBOX")
            .matchingText("testText")
            .fields(fields);
    SearchTerm term = rule.getSearchTerm();
    Assert.assertTrue(term instanceof OrTerm);
    SearchTerm[] terms = ((OrTerm) term).getTerms();
    for (SearchTerm t : terms) {
        Assert.assertTrue(t instanceof FromStringTerm
                || (t instanceof RecipientStringTerm && ((RecipientStringTerm) t).getRecipientType() == Message.RecipientType.CC)
                || (t instanceof RecipientStringTerm && ((RecipientStringTerm) t).getRecipientType() == Message.RecipientType.TO));
    }
}
项目:product-ei    文件:MailToTransportUtil.java   
/**
 * Check a particular email has received to a given email folder by email subject.
 *
 * @param emailSubject - Email emailSubject to find email is in inbox or not
 * @return - found the email or not
 * @throws ESBMailTransportIntegrationTestException - Is thrown if an error occurred while reading the emails
 */
public static boolean isMailReceivedBySubject(String emailSubject, String folder)
        throws ESBMailTransportIntegrationTestException {
    boolean emailReceived = false;
    Folder mailFolder;
    Store store = getConnection();
    try {
        mailFolder = store.getFolder(folder);
        mailFolder.open(Folder.READ_WRITE);
        SearchTerm searchTerm = new AndTerm(new SubjectTerm(emailSubject), new BodyTerm(emailSubject));
        Message[] messages = mailFolder.search(searchTerm);
        for (Message message : messages) {
            if (message.getSubject().contains(emailSubject)) {
                log.info("Found the email emailSubject : " + emailSubject);
                emailReceived = true;
                break;
            }
        }
        return emailReceived;
    } catch (MessagingException ex) {
        log.error("Error when getting mail count ", ex);
        throw new ESBMailTransportIntegrationTestException("Error when getting mail count ", ex);
    } finally {
        if (store != null) {
            try {
                store.close();
            } catch (MessagingException e) {
                log.warn("Error when closing the store ", e);
            }
        }
    }
}
项目:community-edition-old    文件:AlfrescoImapFolder.java   
@Override
protected long[] searchInternal(SearchTerm searchTerm)
{
    List<SimpleStoredMessage> messages = getMessages();
    long[] result = new long[messages.size()];
    int i = 0;

    for (SimpleStoredMessage message : messages)
    {
        if (searchTerm.match(message.getMimeMessage()))
        {
            result[i] = message.getUid();
            i++;
        }
    }
    return Arrays.copyOfRange(result, 0, i);
}
项目:community-edition-old    文件:InMemoryStore.java   
public long[] search(SearchTerm searchTerm) {
    ArrayList matchedMessages = new ArrayList();

    for (int i = 0; i < mailMessages.size(); i++) {
        SimpleStoredMessage message = (SimpleStoredMessage) mailMessages.get(i);
        if (searchTerm.match(message.getMimeMessage())) {
            matchedMessages.add(message);
        }
    }

    long[] matchedUids = new long[matchedMessages.size()];
    for (int i = 0; i < matchedUids.length; i++) {
        SimpleStoredMessage storedMessage = (SimpleStoredMessage) matchedMessages.get(i);
        long uid = storedMessage.getUid();
        matchedUids[i] = uid;
    }
    return matchedUids;
}
项目:javamail-mock2    文件:MailboxFolder.java   
public Message[] search(final SearchTerm term, final Message[] msgsToSearch) {
    final List<MockMessage> sms = new ArrayList<MockMessage>();
    final List<Message> msgsToSearchL = new ArrayList<Message>();

    if (msgsToSearch != null) {
        msgsToSearchL.addAll(Arrays.asList(msgsToSearch));
    }

    for (final Message msg : getMessages()) {
        if (term != null && term.match(msg)) {

            if (msgsToSearch == null || msgsToSearchL.contains(msg)) {
                sms.add((MockMessage) msg);
            }
        }
    }
    return sms.toArray(new Message[sms.size()]);
}
项目:NYBC    文件:MailEntityProcessor.java   
public MessageIterator(Folder folder, int batchSize) {
  try {
    this.folder = folder;
    this.batchSize = batchSize;
    SearchTerm st = getSearchTerm();
    if (st != null) {
      doBatching = false;
      messagesInCurBatch = folder.search(st);
      totalInFolder = messagesInCurBatch.length;
      folder.fetch(messagesInCurBatch, fp);
      current = 0;
      LOG.info("Total messages : " + totalInFolder);
      LOG.info("Search criteria applied. Batching disabled");
    } else {
      totalInFolder = folder.getMessageCount();
      LOG.info("Total messages : " + totalInFolder);
      getNextBatch(batchSize, folder);
    }
  } catch (MessagingException e) {
    throw new DataImportHandlerException(DataImportHandlerException.SEVERE,
            "Message retreival failed", e);
  }
}
项目:greenmail    文件:HierarchicalFolder.java   
@Override
public long[] search(SearchTerm searchTerm) {
    List<StoredMessage> matchedMessages = new ArrayList<>();

    synchronized (mailMessages) {
        for (int i = 0; i<mailMessages.size();i++) {
            StoredMessage mailMessage = mailMessages.get(i);
            // Update message sequence number for potential sequence set search
            // https://tools.ietf.org/html/rfc3501#page-10
            mailMessage.updateMessageNumber(i+1);
            if (searchTerm.match(mailMessage.getMimeMessage())) {
                matchedMessages.add(mailMessage);
            }
        }
    }

    long[] matchedUids = new long[matchedMessages.size()];
    for (int i = 0; i < matchedUids.length; i++) {
        StoredMessage storedMessage = matchedMessages.get(i);
        long uid = storedMessage.getUid();
        matchedUids[i] = uid;
    }
    return matchedUids;
}
项目:read-open-source-code    文件:MailEntityProcessor.java   
public MessageIterator(Folder folder, int batchSize) {
  try {
    this.folder = folder;
    this.batchSize = batchSize;
    SearchTerm st = getSearchTerm();
    if (st != null) {
      doBatching = false;
      messagesInCurBatch = folder.search(st);
      totalInFolder = messagesInCurBatch.length;
      folder.fetch(messagesInCurBatch, fp);
      current = 0;
      LOG.info("Total messages : " + totalInFolder);
      LOG.info("Search criteria applied. Batching disabled");
    } else {
      totalInFolder = folder.getMessageCount();
      LOG.info("Total messages : " + totalInFolder);
      getNextBatch(batchSize, folder);
    }
  } catch (MessagingException e) {
    throw new DataImportHandlerException(DataImportHandlerException.SEVERE,
            "Message retreival failed", e);
  }
}
项目:inotes    文件:ImapService.java   
@SuppressWarnings("serial")
private Message[] getMessagesByIds(Folder notesFolder, final List<String> notes) throws Exception {
    return notesFolder.search(new SearchTerm() {
        @Override
        public boolean match(Message message) {
            try {
                for (String note: notes) {
                    String[] id = message.getHeader(HeaderUtils.INOTES_ID_HEADER);
                    if (id != null && note.equals(id[0])) {
                        return true;
                    }
                }
                return false;
            } catch (Exception e) {
                return false;
            }
        }
    });
}
项目:alfresco-repository    文件:AbstractImapFolder.java   
/**
 * Searches the mailbox for messages that match the given searching criteria
 * 
 * @param searchTerm - search term that contains search criteria.
 * @return UIDs of the messages
 */
public long[] search(final SearchTerm searchTerm)
{
    CommandCallback<long[]> command = new CommandCallback<long[]>()
    {
        public long[] command() throws Throwable
        {
            return searchInternal(searchTerm);
        }
    };
    return command.run();
}
项目:alfresco-repository    文件:ImapServiceImplTest.java   
private void extractSearchTermResultsToList(List<AlfrescoImapFolder> folders, SearchTerm searchTerm, ArrayList<Long> resList)
{
    for (AlfrescoImapFolder folder : folders)
    {
        for (long l : folder.search(searchTerm))
        {
            resList.add(l);
        }
    }
}
项目:alfresco-greenmail    文件:SearchCommand.java   
public void doProcess(ImapRequestLineReader request,
                      ImapResponse response,
                      ImapSession session,
                      boolean useUids)
        throws ProtocolException, FolderException {
    // Parse the search term from the request
    SearchTerm searchTerm = parser.searchTerm(request);
    parser.endLine(request);

    MailFolder folder = session.getSelected();
    long[] uids = folder.search(searchTerm);
    StringBuffer idList = new StringBuffer();
    for (int i = 0; i < uids.length; i++) {
        if (i > 0) {
            idList.append(SP);
        }
        long uid = uids[i];
        if (useUids) {
            idList.append(uid);
        } else {
            int msn = folder.getMsn(uid);
            idList.append(msn);
        }
    }

    response.commandResponse(this, idList.toString());

    boolean omitExpunged = (!useUids);
    session.unsolicitedResponses(response, omitExpunged);
    response.commandComplete(this);
}
项目:alfresco-greenmail    文件:SearchCommand.java   
private SearchTerm extractSearchTerm(ImapRequestLineReader request) throws ProtocolException
{
    StringBuilder sb = new StringBuilder();
    trimFirstSpace(request);
    char next = request.nextChar();

    if (next == '(')
    {
        return paren(request);
    }
    else
    {
        while (next != ' ' && next != '\r' && next != '\n' && next != ')')
        {
            sb.append(next);
            request.consume();
            next = request.nextChar();
        }
    }

    SearchTermBuilder b = SearchTermBuilder.create(sb.toString());
    if (b.isExpressionParameter())
    {
        extractParameterExpression(request, b);
    }
    extractParameters(request, b);

    return b.build();
}
项目:alfresco-greenmail    文件:SearchCommand.java   
private void extractParameterExpression(ImapRequestLineReader request, SearchTermBuilder builder) throws ProtocolException
{
    while (builder.expectsParameter())
    {
        SearchTerm st = extractSearchTerm(request);
        builder.addParameter(st);
    }
}
项目:alfresco-greenmail    文件:SearchCommand.java   
/**
 * Some expressions can use brackets for complex parameters
 * @param request request
 * @return search term in brackets
 * @throws ProtocolException
 */
private SearchTerm paren(ImapRequestLineReader request) throws ProtocolException
{
    request.consume();
    SearchTerm resultTerm = null;
    char next = request.nextWordChar();
    while (next != ')')
    {
        SearchTerm searchTerm = extractSearchTerm(request);
        resultTerm = (resultTerm == null ? searchTerm : new AndTerm(resultTerm, searchTerm));
        next = request.nextWordChar();
    }
    request.consume();
    return resultTerm;
}
项目:Camel    文件:MailComponent.java   
@Override
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
    URI url = new URI(uri);

    // must use copy as each endpoint can have different options
    MailConfiguration config = getConfiguration().copy();

    // only configure if we have a url with a known protocol
    config.configure(url);
    configureAdditionalJavaMailProperties(config, parameters);

    MailEndpoint endpoint = new MailEndpoint(uri, this, config);
    endpoint.setContentTypeResolver(contentTypeResolver);
    setProperties(endpoint.getConfiguration(), parameters);

    Map<String, Object> sstParams = IntrospectionSupport.extractProperties(parameters, "searchTerm.");
    if (!sstParams.isEmpty()) {
        // use SimpleSearchTerm as POJO to store the configuration and then convert that to the actual SearchTerm
        SimpleSearchTerm sst = new SimpleSearchTerm();
        setProperties(sst, sstParams);
        SearchTerm st = MailConverters.toSearchTerm(sst, getCamelContext().getTypeConverter());
        endpoint.setSearchTerm(st);
    }

    // sanity check that we know the mail server
    ObjectHelper.notEmpty(config.getHost(), "host");
    ObjectHelper.notEmpty(config.getProtocol(), "protocol");

    return endpoint;
}
项目:Camel    文件:MailConsumer.java   
/**
 * @return Messages from input folder according to the search and sort criteria stored in the endpoint
 * @throws MessagingException If message retrieval fails
 */
private List<KeyValueHolder<String, Message>> retrieveMessages() throws MessagingException {
    List<KeyValueHolder<String, Message>> answer = new ArrayList<>();

    Message[] messages;
    final SortTerm[] sortTerm = getEndpoint().getSortTerm();
    final SearchTerm searchTerm = computeSearchTerm();
    if (sortTerm != null && serverCanSort) {
        final IMAPFolder imapFolder = (IMAPFolder) folder;
        if (searchTerm != null) {
            // Sort and search using server capability
            messages = imapFolder.getSortedMessages(sortTerm, searchTerm);
        } else {
            // Only sort using server capability
            messages = imapFolder.getSortedMessages(sortTerm);
        }
    } else {
        if (searchTerm != null) {
            messages = folder.search(searchTerm, retrieveAllMessages());
        } else {
            messages = retrieveAllMessages();
        }
        // Now we can sort (emulate email sort but restrict sort terms)
        if (sortTerm != null) {
            MailSorter.sortMessages(messages, sortTerm);
        }
    }

    for (Message message : messages) {
        String key = getEndpoint().getMailUidGenerator().generateUuid(getEndpoint(), message);
        if (isValidMessage(key, message)) {
            answer.add(new KeyValueHolder<>(key, message));
        }
    }

    return answer;
}
项目:Camel    文件:MailConsumer.java   
/**
 * @return Search term from endpoint (including "seen" check) or null if there is no search term
 */
private SearchTerm computeSearchTerm() {
    if (getEndpoint().getSearchTerm() != null) {
        return getEndpoint().getSearchTerm();
    } else if (getEndpoint().getConfiguration().isUnseen()) {
        return new SearchTermBuilder().unseen().build();
    }
    return null;
}
项目:Camel    文件:MailSearchTermTest.java   
protected SearchTerm createSearchTerm() {
    // we just want the unseen Camel related mails
    SearchTermBuilder build = new SearchTermBuilder();
    build.unseen().subject("Camel").body(Op.or, "Camel");

    return build.build();
}
项目:Camel    文件:MailSearchTermNotSpamTest.java   
@Override
protected SearchTerm createSearchTerm() {
    // we just want the unseen mails which is not spam
    SearchTermBuilder build = new SearchTermBuilder();
    build.unseen().body(Op.not, "Spam").subject(Op.not, "Spam");

    return build.build();
}
项目:tabellarium    文件:ImapMailboxFolderTaskExecutor.java   
/**
 * Returns a <pre>{@link SearchTerm}</pre> to be used when retrieving messages.
 * Default term is only for unseen emails, but when retrieveSeenEmails is
 * set to true it returns a union of terms for both unseen and seen messages.
 *
 * @return a search term to be used for message retrieval.
 */
private SearchTerm getSearchTerm() {
    Flags seenFlag = new Flags(Flag.SEEN);
    FlagTerm unseenFlagTerm = new FlagTerm(seenFlag, false);
    if (retrieveSeenEmails) {
        FlagTerm seenFlagTerm = new FlagTerm(seenFlag, true);
        return new OrTerm(unseenFlagTerm, seenFlagTerm);
    }
    return unseenFlagTerm;
}
项目:mail-importer    文件:JavaxMailFolder.java   
@Override
public JavaxMailMessage[] search(SearchTerm term)
    throws RuntimeMessagingException {
  try {
    return decorateMessageArray(delegate.search(term));
  } catch (MessagingException e) {
    throw new RuntimeMessagingException(e);
  }
}
项目:mail-importer    文件:JavaxMailFolder.java   
@Override
public JavaxMailMessage[] search(SearchTerm term, Message[] msgs)
    throws RuntimeMessagingException {
  try {
    return decorateMessageArray(delegate.search(term, msgs));
  } catch (MessagingException e) {
    throw new RuntimeMessagingException(e);
  }
}
项目:mail-importer    文件:JavaxMailMessage.java   
@Override
public boolean match(SearchTerm term) throws RuntimeMessagingException {
  try {
    return delegate.match(term);
  } catch (MessagingException e) {
    throw new RuntimeMessagingException(e);
  }
}
项目:javamail4ews    文件:EwsFolder.java   
public synchronized Message[] search(SearchTerm paramSearchTerm) throws MessagingException {
    if (paramSearchTerm instanceof FlagTerm) {
        FlagTerm flagTerm = (FlagTerm) paramSearchTerm;
        Flags flags = flagTerm.getFlags();
        if (flags.equals(new Flags(Flags.Flag.SEEN))) {
            try {
                return getUnreadMessage(0);
            } catch (Exception e) {
                throw new MessagingException(e.getMessage(),e);
            }
        }
    }
    throw new MessagingException("Ews folder don't support search with search term " + paramSearchTerm);
}
项目:community-edition-old    文件:AbstractImapFolder.java   
/**
 * Searches the mailbox for messages that match the given searching criteria
 * 
 * @param searchTerm - search term that contains search criteria.
 * @return UIDs of the messages
 */
public long[] search(final SearchTerm searchTerm)
{
    CommandCallback<long[]> command = new CommandCallback<long[]>()
    {
        public long[] command() throws Throwable
        {
            return searchInternal(searchTerm);
        }
    };
    return command.run();
}
项目:community-edition-old    文件:ImapServiceImplTest.java   
private void extractSearchTermResultsToList(List<AlfrescoImapFolder> folders, SearchTerm searchTerm, ArrayList<Long> resList)
{
    for (AlfrescoImapFolder folder : folders)
    {
        for (long l : folder.search(searchTerm))
        {
            resList.add(l);
        }
    }
}
项目:community-edition-old    文件:SearchCommand.java   
public void doProcess(ImapRequestLineReader request,
                      ImapResponse response,
                      ImapSession session,
                      boolean useUids)
        throws ProtocolException, FolderException {
    // Parse the search term from the request
    SearchTerm searchTerm = parser.searchTerm(request);
    parser.endLine(request);

    MailFolder folder = session.getSelected();
    long[] uids = folder.search(searchTerm);
    StringBuffer idList = new StringBuffer();
    for (int i = 0; i < uids.length; i++) {
        if (i > 0) {
            idList.append(SP);
        }
        long uid = uids[i];
        if (useUids) {
            idList.append(uid);
        } else {
            int msn = folder.getMsn(uid);
            idList.append(msn);
        }
    }

    response.commandResponse(this, idList.toString());

    boolean omitExpunged = (!useUids);
    session.unsolicitedResponses(response, omitExpunged);
    response.commandComplete(this);
}
项目:community-edition-old    文件:SearchCommand.java   
private SearchTerm extractSearchTerm(ImapRequestLineReader request) throws ProtocolException
{
    StringBuilder sb = new StringBuilder();
    trimFirstSpace(request);
    char next = request.nextChar();

    if (next == '(')
    {
        return paren(request);
    }
    else
    {
        while (next != ' ' && next != '\n' && next != ')')
        {
            sb.append(next);
            request.consume();
            next = request.nextChar();
        }
    }

    SearchTermBuilder b = SearchTermBuilder.create(sb.toString());
    if (b.isExpressionParameter())
    {
        extractParameterExpression(request, b);
    }
    extractParameters(request, b);

    return b.build();
}
项目:community-edition-old    文件:SearchCommand.java   
private void extractParameterExpression(ImapRequestLineReader request, SearchTermBuilder builder) throws ProtocolException
{
    while (builder.expectsParameter())
    {
        SearchTerm st = extractSearchTerm(request);
        builder.addParameter(st);
    }
}
项目:community-edition-old    文件:SearchCommand.java   
/**
 * Some expressions can use brackets for complex parameters
 * @param request request
 * @return search term in brackets
 * @throws ProtocolException
 */
private SearchTerm paren(ImapRequestLineReader request) throws ProtocolException
{
    request.consume();
    SearchTerm resultTerm = null;
    char next = request.nextWordChar();
    while (next != ')')
    {
        SearchTerm searchTerm = extractSearchTerm(request);
        resultTerm = (resultTerm == null ? searchTerm : new AndTerm(resultTerm, searchTerm));
        next = request.nextWordChar();
    }
    request.consume();
    return resultTerm;
}
项目:read-open-source-code    文件:MailConnection.java   
/**
* Add search term.
* @param Term search term to add
*/
  private void addSearchTerm(SearchTerm Term)
  {
if (this.searchTerm != null) {
 this.searchTerm = new AndTerm(this.searchTerm, Term);
      } else  {
        this.searchTerm = Term;
      }
  }
项目:kettle-4.4.0-stable    文件:MailConnection.java   
/**
* Add search term.
* @param Term search term to add
*/
  private void addSearchTerm(SearchTerm Term)
  {
if (this.searchTerm != null) {
 this.searchTerm = new AndTerm(this.searchTerm, Term);
      } else  {
        this.searchTerm = Term;
      }
  }