Автоматическая обработка электронной почты на Java - PullRequest
4 голосов
/ 11 сентября 2008

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

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

Будет полезна любая информация, даже с чего начать. \

Примечание. Для этого мы используем сервер заметок лотоса, но общий способ был бы более полезным (если это возможно).

Ответы [ 9 ]

9 голосов
/ 11 сентября 2008

Электронная почта -> почтовый сервер -> [что-то] -> файл на диске.

Файл на диске довольно легко разобрать, используйте JavaMail .

[что-то] может быть:

  • слушатель для соединений SMTP (overkill)!
  • Pop3 / imap клиент
  • Maildir / Почтовый ящик
2 голосов
/ 10 ноября 2008

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


Ответ Свриста хорош, но если вы хотите избежать его среднего шага (почтовый сервер, который записывает почту на диск для последующего получения системой Java), вы можете использовать Wiser .

Wiser позволяет запустить почтовый сервер в Java:

Wiser wiser = new Wiser();
wiser.setPort(2500);
wiser.start();

Тогда вы можете просто периодически опрашивать почту:

for (WiserMessage message : wiser.getMessages())
{
    String envelopeSender = message.getEnvelopeSender();
    String envelopeReceiver = message.getEnvelopeReceiver();

    MimeMessage mess = message.getMimeMessage();

    // mail processing goes here
}
1 голос
/ 17 сентября 2008

Используйте почту в базе данных (ваш администратор Domino может настроить ее для вас, но она также находится в файле справки).

В этой базе данных вы можете создать агент, который периодически запускается для обработки всех новых документов. Этот агент будет использовать свойство EmbeddedObjects класса NotesRichTextItem и метод ExtractFile класса NotesEmbeddedObject, чтобы получить дескриптор вложения файла и извлечь его в указанное вами местоположение.

Например, этот скрипт просматривает все вложения файлов, ссылки на объекты и внедренные объекты в элементе Body документа. Каждый раз, когда он находит вложение файла, он отсоединяет файл в каталоге SAMPLES на диске C и удаляет вложение из документа

Dim doc As NotesDocument
Dim rtitem As Variant
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
  Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) Then
      Call o.ExtractFile( "c:\samples\" & o.Source )
      Call o.Remove
      Call doc.Save( False, True )
    End If
  End Forall
End If
1 голос
/ 16 сентября 2008

В последнее время я довольно много работал с агентами Java на серверах Domino. Сервер Domino 8.5 поддерживает Java 6 и его встроенную систему, поэтому у человека, обладающего небольшим опытом разработки Domino, не составит труда собрать агента, который будет работать при поступлении новой почты. В LotusScript это даже проще, но для этого требуются более специализированные навыки, которые вам, вероятно, понадобятся для привлечения подрядчика.

Ограничение, с которым вы можете столкнуться, касается извлеченного файла, вы можете легко поместить его в файловую структуру сервера Domino, но вы можете быть ограничены безопасностью ОС при размещении его на другом сервере.

0 голосов
/ 10 ноября 2008

Независимо от того, что вы делаете, вам понадобится понимание структур данных Lotus Notes. Хорошей новостью является то, что полностью автоматизированное решение может быть легко встроено в Notes.

Лучше всего, чтобы он был встроен в Notes, и его можно настроить на автоматический запуск при получении новой почты. Ответ Гэри мертв, но без какого-либо опыта, вероятно, было бы трудно понять, как реализовать это самостоятельно. С другой стороны, для его настройки никому из компетентных программистов Notes не понадобится больше часа или двух.

0 голосов
/ 17 сентября 2008

SMTP / POP3 может быть включен на сервере Domino. Работал с этим раньше и запустил Squirrel Mail. SMTP требует больших ресурсов, но стоит затраченных усилий, потому что тогда вам не нужно заходить в LotusLand, чтобы все заработало. Просто напишите небольшую программу Java CLI, которая будет проверять конкретный почтовый ящик (POP3 или SMTP), и анализировать сообщения, извлекать вложения и размещать их там, где это необходимо.

Много документации и примеров здесь: http://java.sun.com/products/javamail/

Методы, которые вы разрабатываете с использованием этого подхода, будут более широко применимы в вашей будущей карьере, чем что-либо специфичное для Lotus / Domino.

0 голосов
/ 16 сентября 2008

Попробуйте POP3Client в пакете Net Commons ; она позволит вашей Java-программе проверять наличие новой почты для определенной учетной записи с любым интервалом, который вы хотите (каждые несколько минут? ежечасно?), и получать / удалять сообщения по желанию.

0 голосов
/ 15 сентября 2008

Вы можете относительно легко получить доступ к документам Notes, используя DIIOP, это будет намного проще, чем идти по дороге C Api ...

0 голосов
/ 15 сентября 2008

Lotus Notes / Domino хранит почту в базе данных Notes. Доступны API для получения документов (электронные письма), чтения значений полей (От, Тема) и отсоединения файлов.

API включают

-LotusScript (вариант VB, доступен в базе данных Notes)

-Java (изнутри или вне базы данных)

-C API (внешний)

-Той же API доступен через COM-сервер

В базе данных можно создать «запланированного агента» (с использованием LotusScript или Java), который может находить документы, созданные с момента его последнего запуска, находить вложения и извлекать их. Агент должен быть подписан с помощью идентификатора, который имеет соответствующие разрешения на сервере, в том числе те, которые необходимы для записи в файловую систему и запуска любых других процессов.

За пределами базы данных вы можете использовать любой API, кроме LotusScript, для входа в базу данных сервера / почты и выполнять аналогичный процесс, например, извлечение файлов локально на клиенте или отдельном сервере. C API и COM требуют установки клиента Notes, но приложения Java могут быть настроены для запуска через CORBA / DIIOP без полной установки.

Обратитесь к справке Domino Designer (или веб-сайту IBM для C API) для получения дополнительной информации.

Что касается «общего» способа сделать это, если вы обращаетесь к данным в Notes и нуждаетесь в извлечении вложений, я считаю, что эти API - ваш лучший вариант. Если вы планируете портировать приложение на другую почтовую систему, рассмотрите возможность отделения подпрограмм API через «интерфейс», поэтому вам нужно только добавить новую реализацию этого интерфейса для поддержки новой почтовой системы.

...