Java сообщения выборки IMAP начиная с даты

Чтобы установка Perl могла общаться с базой данных MySQL, ей необходимо использовать модуль DBD :: mysql. Этот модуль не является частью стандартной установки Perl и должен быть установлен отдельно. Когда вы устанавливаете его с помощью инструмента командной строки CPAN (cpan DBD::mysql) или с помощью apt-get (apt-get install libdbd-mysql-perl), он устанавливается в каталоги библиотек, используемых системой Perl (тот, который устанавливается как часть вашей операционной системы) , Вы можете подтвердить, что это было установлено правильно, выполнив следующие команды:

$ perldoc DBD::mysql
$ perl -MDBD::mysql -le'print $DBD::mysql::VERSION'

Если DBD :: mysql установлен правильно, первая команда покажет вам документацию для модуля, а вторая даст номер версии.

Но, как я уже сказал, это устанавливается для использования системой Perl. Из сообщения об ошибке вы видите, что ваша установка Bitnami не использует системный Perl. Вместо этого он использует отдельную установку Perl, которая установлена ​​в /opt/bitnami.

Таким образом, вам нужно установить DBD :: mysql в библиотеку модулей для этой установки Perl. Можно попросить cpan установить модуль в другой каталог, но я бы с осторожностью относился к простой установке чего-либо в дерево каталогов Битнами. Я сильно подозреваю, что процесс установки был пропущен намного раньше в процессе. Если Bitnami необходимо использовать MySQL из Perl-программы и установить собственный дистрибутив Perl вместе с собственной библиотекой модулей, то он должен либо включить DBD :: mysql в свою установку, либо предоставить четкие инструкции по его установке.

Мое предложение было бы внимательно изучить инструкции по установке Bitnami и посмотреть, что они скажут об установке поддержки MySQL. Если это не сработает, ответьте на этот вопрос в каналах поддержки Битнами.

9
задан Chaitan 15 May 2009 в 17:52
поделиться

4 ответа

Вы также можете использовать классы SearchTerm в почтовом пакете Java.

SearchTerm olderThan = new ReceivedDateTerm(ComparisonTerm.LT, someFutureDate);
SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GT, somePastDate);
SearchTerm andTerm = new AndTerm(olderThan, newerThan);
inbox.search(andTerm);

Некоторая комбинация вышеперечисленного должна оказаться лучшим способом получить даты в определенном диапазоне.

24
ответ дан 4 December 2019 в 07:14
поделиться

Вместо того, чтобы получать все сообщения, вам следует попробовать воспользоваться поиском на стороне сервера. Это работает с использованием метода поиска в javax.mail.Folder . Вероятно, вам придется написать свой собственный SearchTerm на основе критериев Message.getReceivedDate ().

Если поиск на стороне сервера не работает, вы можете попробовать использовать профиль выборки, то есть вместо inbox.getMessages () используйте папку «Входящие». fetch (Сообщение [] msgs, FetchProfile fp). В javadoc для выборки говорится: Клиенты используют этот метод, чтобы указать, что указанные элементы необходимы в целом для данного диапазона сообщений. Ожидается, что реализации будут извлекать эти элементы для заданного диапазона сообщений эффективным способом. Обратите внимание, что этот метод является лишь подсказкой реализации для предварительной выборки желаемых элементов.

2
ответ дан 4 December 2019 в 07:14
поделиться

Вот что я придумал. Это работает для меня, но, вероятно, не лучший способ сделать это. Есть ли предложения по улучшению этого?

      Date from; //assume initialized
      Store store; //assume initialized
      Folder inbox = store.getFolder("INBOX");
      inbox.open(Folder.READ_ONLY);
      int end = inbox.getMessageCount();
      long lFrom = from.getTime();
      Date rDate;
      long lrDate;
      int start = end;
      do {
        start = start - 10;
        Message testMsg = inbox.getMessage(start);
        rDate = testMsg.getReceivedDate();
        lrDate = rDate.getTime();
      } while (lrDate > lFrom);
      Message msg[] = inbox.getMessages(start, end);
      for (int i=0, n=msg.length; i<n; i++) {
        lrDate = msg[i].getReceivedDate().getTime();
        if (lrDate > lFrom) {
          System.out.println(i + ": "
            + msg[i].getFrom()[0]
            + "\t" + msg[i].getSubject());
        }
      }
0
ответ дан 4 December 2019 в 07:14
поделиться
public class CheckDate  {
    public void myCheckDate(Date givenDate) {
        SearchTerm st = new ReceivedDateTerm(ComparisonTerm.EQ,givenDate);

        Message[] messages = inbox.search(st);
    }

    // in main method

    public static void main(String[] args) throws ParseException{
        SimpleDateFormat df1 = new SimpleDateFormat( "MM/dd/yy" );
        String dt="06/23/10";
        java.util.Date dDate = df1.parse(dt);
        cd.myCheckDate(dDate);
    }
}
5
ответ дан 4 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: