2008-09-11 3 views
4

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

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

Любая информация, даже если для начала было бы полезно \

. Примечание: Мы используем сервер Lotus Notes, чтобы сделать это, но общий путь будет более полезным (если это возможно).

ответ

9

Email -> mailserver -> [something] -> file-on-disk.

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

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

  • слушателем для SMTP соединений (избыточна)!
  • Pop3/imap клиент
  • Maildir/Почта
+1

Вы можете использовать JavaMail в том, что [то] Cant вы? – 2008-09-15 16:16:39

0

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

API, включают в себя

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

-java (изнутри или снаружи базы данных)

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

-Известный API, доступный через COM-сервер

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

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

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

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

0

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

1

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

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

0

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

1

Используйте почту в базе данных (администратор 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 
0

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

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

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

0

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

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

2

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


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

мудрее позволяет запускать в-Java MailServer:

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 
} 
Смежные вопросы