Как получить электронную почту в приложении Java EE

Решение LINQ:

// Use the first value in group
var _people = personList
    .GroupBy(p => p.FirstandLastName, StringComparer.OrdinalIgnoreCase)
    .ToDictionary(g => g.Key, g => g.First(), StringComparer.OrdinalIgnoreCase);

// Use the last value in group
var _people = personList
    .GroupBy(p => p.FirstandLastName, StringComparer.OrdinalIgnoreCase)
    .ToDictionary(g => g.Key, g => g.Last(), StringComparer.OrdinalIgnoreCase);

Если вы предпочитаете решение без LINQ, вы можете сделать что-то вроде этого:

// Use the first value in list
var _people = new Dictionary<string, Person>(StringComparer.OrdinalIgnoreCase);
foreach (var p in personList)
{
    if (!_people.ContainsKey(p.FirstandLastName))
        _people[p.FirstandLastName] = p;
}

// Use the last value in list
var _people = new Dictionary<string, Person>(StringComparer.OrdinalIgnoreCase);
foreach (var p in personList)
{
    _people[p.FirstandLastName] = p;
}
14
задан Arjan Tijms 21 April 2013 в 09:11
поделиться

3 ответа

Не думаю, что второй подход «чище». Напротив, это требует от вас реализации значительной части стандартного MTA, поэтому я бы не рекомендовал это делать.

Я считаю, что опрос сервера POP / IMAP на самом деле самый чистый способ сделать это. Почему вы отказались от этого? Если сервер POP / IMAP и ваша служба находятся в одной локальной сети (или даже на одном компьютере), опрос будет довольно недорогим. Вы можете делать это каждые 10-20 секунд с минимальной задержкой, это не должно вызывать проблем. Хотя это может выглядеть немного технически неэлегантно, вы будете использовать стандартный протокол взаимодействия (POP3 / IMAP), который дает вам гибкость, избегая при этом повторной реализации почтового сервера.

Подход создания приложения Java также кажется жизнеспособным, но я бы предпочел опрос, потому что:

a) Интерфейс, который вы используете (POP3 / IMAP), более стандартизирован, а интерфейс, который вы используете для «подключения in "для почтового сервера будет зависеть от сервера (в Unix вы можете использовать, например, procmail, но вы все равно зависите от конкретного программного обеспечения)

b) Запуск отдельного процесса для каждой почты, вероятно, будет иметь гораздо больше накладных расходов, чем опрос.

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

Мой опыт:

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

8
ответ дан 1 December 2019 в 10:18
поделиться

«Правильный» способ в соответствии с архитектурой Java EE - иметь коннектор JCA для входящего / исходящего соединения с SMTP-сервером.

Коннектор JCA может делать все, что вы хотите, включая многопоточность и подключение к внешним системам с помощью сокетов. На самом деле JMS - это просто особый вид соединителя JCA, который подключается к брокеру JMS и доставляет сообщение в «обычный» MDB. Затем соединитель JCA может опрашивать SMTP-сервер и доставлять сообщение в настраиваемый MDB.

Лучший документ о JCA - это Создание адаптеров ресурсов с помощью J2EE Connector Architecture 1.5 , и в нем действительно используется пример доставки электронной почты. Удачи :) Предлагаю взглянуть. Код можно найти как часть примеров Java EE и использовать JavaMail, но я не знаю, готов ли он к производству.

Связано:

8
ответ дан 1 December 2019 в 10:18
поделиться

Использование ESB - автономно или встроено.

«ESB привносит связанные с потоком концепции, такие как преобразование и маршрутизация, в сервис-ориентированную архитектуру. ESB также может предоставлять абстракцию для конечных точек. Это способствует гибкости на транспортном уровне и обеспечивает слабую связь и простое соединение между сервисами. "

Например МУЛ «Mule ESB - это наиболее широко используемая ESB с открытым исходным кодом. Облегченная платформа интеграции и сервисный контейнер, Mule ESB предоставляет функции для веб-сервисов, маршрутизации сообщений, посредничества, преобразования и управления транзакциями, помогая разработчикам интегрировать свои приложения за часы, а не недели»

​​Как получать электронные письма через mule http://books.dzone.com/articles/mule-messaging-chapter?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+zones%2Fsoa+ (SOA + Zone)

Ниже представлена ​​простая конфигурация, которая отправляет сообщение JMS как реакция на полученное сообщение (это все, что вам нужно) - определить входящее (imap / pop3 / etc) - определить исходящее.

<imap:inbound-endpoint user="bob" password="password" host="localhost" port="65433" checkFrequency="3000"/> 
<jms:outbound-endpoint queue="my.destination" connector-ref="jmsQueueConnector"/>
2
ответ дан 1 December 2019 в 10:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: