Mailreader

Материал из Course Orchestra
Перейти к: навигация, поиск

Скачать модуль (с исходными кодами на Java)

mailreader.7z

Система импорта почтовых сообщений

Система импорта почтовых сообщений предназначена для импорта заголовков, тел писем, а также аттачментов в специальную структуру БД с почтового сервера по протоколам POP3, IMAP и IMAPS. Предполагается, что после поступления в специальные таблицы БД, с помощью INSERT-триггеров производится обработка поступившей информации. Для рассылки почтовых сообщений предназначен модуль Mailsender.

Основная технологическая сложность, решаемая данным модулем, заключается в том, что извлечение «простого текста письма» из электронного письма есть задача непростая и неформальная, ибо не существует единого стандарта представления текста электронных писем. В чём-то mailreader.jar представляет собой почтовый клиент, и в коде модуля mailreader.jar накоплена богатая эвристика, позволяющая получать читаемый текст письма, отправленного из любого встречавшегося нам на практике почтового клиента.

Важная информация

На сегодняший день система отлажена и протестирована только для работы с MS SQL Server. Доработка под другую СУБД (а ещё лучше -- перевод под Celesta) возможны, но требует дополнительных изменений (не очень больших). Рекомендуется обратиться к Ивану Пономареву при использовании данного модуля под новый проект.


1) mailreader.jar-файл должен запускаться из командной строки с помощью scheduled task на регулярной основе --- допустим, каждые 5 минут.

2) В скрипте структуры базы данных добавлены таблицы для схемы bc:

    CREATE TABLE bc.mailmessages(
        inboxid nvarchar(50) NOT NULL,
        msgid varchar(300) NOT NULL,
        sender varchar(200),
        [subject] nvarchar(max),
        body nvarchar(max),
        CONSTRAINT PK_MAILMESSAGES PRIMARY KEY (inboxid, msgid)
    )

    CREATE TABLE bc.mailattachments(
       inboxid nvarchar(50) NOT NULL,
       msgid varchar(300) NOT NULL,
       attachno int NOT NULL,
       attachname nvarchar(400),
       attachbody image,
       CONSTRAINT PK_MAILATTACHMENTS PRIMARY KEY (inboxid, msgid, attachno)
    )

Соответственно, жёстко предполагается, что мы работаем с двумя этими таблицами из схемы bc.

3) Для настроек используется settings.xml-файл. В нём настраивается подключение к pop3-серверу, JDBC-подключение к БД. Его структура говорит сама за себя: имеется возможность использовать произвольное количество опрашиваемых почтовых ящиков. Атрибут inboxid в тэге <inbox> является обязательным, именно его значение записывается в поля inboxid таблиц bc.mailmessages и bc.mailattachments, так что ON INSERT-триггеры на таблице bc.mailmessages могут отличать "свои" письма от чужих. Рекомендуется для разных решений разрабатывать отдельные ON INSERT-триггеры.

4) Тэг <protocol> поддерживает следующие значения (в нижнем регистре): pop3, imap, imaps.

5) Файл settings.xml может просто лежать в той же директории, что и jar-файл, однако имеется возможность указывать в параметрах командной строки имя .xml-файла с настройками (таким образом, лежащий в одной директории с .jar-файлом файл settings.xml используется лишь в том случае, если в параметрах командной строки ничего не указано). а


Пример файла settings.xml:

<?xml version="1.0" encoding="UTF-8"?>
<settings>
	<jdbcclass>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbcclass>
	<jdbcurl>jdbc:sqlserver://OPENRISKS\SQL2008R2;databaseName=lancelot;user=sa;password=User~123</jdbcurl>
	<inbox inboxid="sor">
		<protocol>pop3</protocol> <!--pop3, imap, imaps -->
                <host>mail.rambler.ru</host>
		<user>openinformer@rambler.ru</user>
		<password>wqwefqwef</password>
	</inbox>
	<inbox inboxid="skp">
		<protocol>imaps</protocol>
                <host>mail.rambler.ru</host>
		<user>openinformer2@rambler.ru</user>
		<password>qwerqwer</password>
	</inbox>
</settings>

Импорт сертификатов для работы по протоколу IMAPS

Для работы по протоколу IMAPS системе нужен файл сертификата почтового сервера, а также файлы сертификатов всей цепочки удостоверяющих центров. Как правило, эти файлы могут предоставить администраторы почтовой системы.

Полученные сертификаты необходимо загрузить в систему при помощи утилиты keytool. Находясь в директории c:\program files\java\jre7\bin\, для каждого из имеющихся сертификатов запустите команду:

 keytool -import -alias primeraliasa -keystore ../lib/security/cacerts -file c:\primercertificata.cer

Команда запросит пароль от cacerts, если пароль не менялся, то стандартный: "changeit".