javax.mail.MimeMessage недоступно, даже если пакет находится в CLASSPATH

Вопрос: Я пытаюсь разработать синтаксический анализатор электронной почты - чтобы получать электронную почту в файле и иметь возможность программно обрабатывать различные компоненты - знать, кто отправитель и получатель, строка темы, основной корпус и любые вложения. Я намерен извлекать вложения в виде отдельных файлов, но вначале я сбиваюсь с толку. Я начал работу с уже работающей

Вопрос:

Я пытаюсь разработать синтаксический анализатор электронной почты – чтобы получать электронную почту в файле и иметь возможность программно обрабатывать различные компоненты – знать, кто отправитель и получатель, строка темы, основной корпус и любые вложения. Я намерен извлекать вложения в виде отдельных файлов, но вначале я сбиваюсь с толку.

Я начал работу с уже работающей Java-программы в полностью функциональной среде разработки и начал ее добавлять. Одним из первых дополнений была эта строка (а затем и ряд строк):

import javax.mail.*; import javax.mail.internet; import javax.mail.internet.MimeUtility;

Позже, в подходящем месте, у нас есть это скромное начало:

MimeMessage m = null;

Я был потрясен, обнаружив, что компиляция завершилась неудачей только с этими двумя изменениями, и я узнал здесь (на другой странице StackOverflow), что пакет javax.mail не включен в стандартный JDK. Озадаченный, я посмотрел и нашел это:

# rpm -qa | grep -i java android-json-org-java-4.3-0.2.r3.1.fc21.noarch snappy-java-1.0.5-2.fc21.noarch tzdata-java-2015b-1.fc21.noarch python-javapackages-4.1.0-7.fc21.noarch postgresql94-jdbc-javadoc-9.3.1101-1.f21.noarch protobuf-java-2.5.0-11.fc21.x86_64 java-1.8.0-openjdk-1.8.0.40-25.b25.fc21.x86_64 java-1.8.0-openjdk-headless-1.8.0.40-25.b25.fc21.x86_64 javassist-3.18.1-2.fc21.noarch apache-commons-javaflow-1.0-0.8.20120509SNAPSHOT.fc21.noarch javapackages-tools-4.1.0-7.fc21.noarch java-1.8.0-openjdk-devel-1.8.0.40-25.b25.fc21.x86_64 antlr3-java-3.5.2-2.fc21.noarch javamail-1.5.1-3.fc21.noarch xz-java-1.5-3.fc21.noarch abrt-java-connector-1.1.0-2.fc21.x86_64

Обратите внимание: да, на самом деле, установлена JavaMail – версия 1.5.1-3. Однако для того, чтобы быть ремнями и подтяжками, я нашел проект JavaMail и загрузил последнюю версию продукта и поместил его в CLASSPATH.

К моему большому удивлению, это не вызвало проблемы! Будучи осторожным типом и сохраняя все, чтобы доказать, как я иду, я просто удалил файл javax.mail.jar из каталога библиотеки, затем удалил две строки из моей программы, перекомпилировал и сработал. Затем я добавил обратно в строку импорта, и он не удался. Затем я переместил файл jar обратно в каталог библиотеки, и компиляция прошла успешно, подтвердив загрузку пакета javax.mail.

Однако, когда я добавил в первую ссылку на библиотеку MimeMessage (см. Строку выше), компиляция завершилась неудачно.

Поэтому, конечно, я пошел проверять документацию! Действительно, MimeMessage – это доступный класс.

Что я делаю не так?! Я имею в виду, geez, я использую Java буквально с версии 1.0. Я не знаю, как сделать слишком много глупых ошибок, но я полагаю, что я должен быть!

Мне приходят два открытых вопроса:

1) Почему не используется установленная версия пакета JavaMail? ЧЕТКО Я должен был добавить это. И обратите внимание, что мне не нужно делать что-то особенное для CLASSPATH (или где-либо еще), чтобы получить всю остальную часть Java! А также;

2) Теперь, когда у меня есть пакет JavaMail, почему он не обнаруживает класс MimeMessage?

Любая/вся помощь оценивается – и если вы заметите, что я ужасно глуп, пожалуйста, укажите мою ошибку нежно!

Дополнительная информация: я добавил еще две строки импорта, так что теперь есть три перечисленные выше. Любопытно, что когда у меня есть.jar файл в пути, указанном CLASSPATH, но явно не цитируется, я получаю по одной ошибке на импорт, но когда я явно цитирую файл.jar как явный элемент, я получаю только ОДНУ ошибку! Эта ошибка включена:

import javax.mail.internet;

Естественно, зная, что банка на самом деле просто застежка-молния, я распаковал и посмотрел. Разумеется, существует каталог с именем “internet”, заполненный 38 файлами классов.

Где-то по пути у меня была дикая идея, что каким-то образом в системе или в CLASSPATH была ДРУГИЕ записи javax.mail, поэтому я посмотрел. Это Fedora Core, поэтому он под /usr/lib, и я НЕ нашел другой файл, включая строку “mail” в своем имени, поэтому я предполагаю, что это тоже не так.

Я заметил в файле NOTES.txt, что были некоторые заметки о том, что не распаковывать банку для некоторых приложений, потому что это было воспринято как риск для безопасности, но я подумал, что для того, что я хочу сделать, нет такого риска, и, возможно, это сработает, но я не мог заставить ЭТО работать…

Я также пытался использовать -cp по сравнению с фактическим изменением переменной CLASSPATH, но это, похоже, не имеет значения. Я, очевидно, получаю одинаковые результаты в любом случае, поэтому я только что использовал -cp для тестирования, потому что быстрее попробовать различные альтернативы.

Лучший ответ:

MimeMessage находится в пакете javax.mail.internet, который вы не импортировали.

ИЗМЕНИТЬ ВОПРОС АСКЕР:

На самом деле, я пытался, в частности, импортировать:

import javax.mail.internet;

И это не сработало. То, что мне не хватало, было то, что ничего не импортировать только на javax.mail.internet. Изменение его на:

import javax.mail.internet.*;

работал просто отлично!

Итак, в то время как Билл был не совсем правильным, этот ответ плюс его комментарий заставил меня посмотреть, что я был слеп… и я чувствую себя глупо!

Оцените статью
Добавить комментарий