Автоматическая обработка электронной почты на Java

StackOverflow https://stackoverflow.com/questions/56722

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Это [что-то] могло бы быть:

Другие советы

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


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

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
}

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

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

Например, этот скрипт просматривает все вложения файлов, ссылки на объекты и встроенные объекты в основном элементе документа.Каждый раз, когда он находит вложение файла, он отсоединяет файл от каталога 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

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

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

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

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 с помощью "интерфейса", поэтому вам нужно только добавить новую реализацию этого интерфейса для поддержки новой почтовой системы.

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top