Какие существуют методы для запуска .NET-кода и обработки электронной почты по мере ее поступления?

2

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

У меня есть полный доступ к серверу (Windows Server 2008), который будет запускать эту службу, и решил закодировать решение с помощью платформы .NET(3.5).

Теперь я думаю о том, как я могу это сделать. Поскольку я не очень разбираюсь в программной обработке электронной почты, первым решением, которое пришло мне в голову, было создание почтового клиента, который будет периодически опробовать существующий почтовый сервер для входящей электронной почты (используя протокол POP3 ) и обрабатывать их. Но есть и другие способы сделать это.

Можно использовать IMAP, чтобы оставаться подключенным к почтовому серверу и получать электронную почту сразу же после их поступления (более отзывчивый, но я считаю, что протокол IMAP сложнее реализовать). Следующий вопрос здесь: где можно найти надежные библиотеки электронной почты, поддерживающие протокол POP3 или IMAP?

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

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

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

Буду благодарен за любые советы и подсказки.

  • 0
    Я нашел это: pop2ticket.codeplex.com, который я буду использовать в качестве отправной точки. Я был бы очень благодарен за альтернативы, хотя.
  • 0
    Аналогичный вопрос SO: stackoverflow.com/questions/837052/…
Показать ещё 7 комментариев
Теги:
email

4 ответа

2
Лучший ответ

Как и во многом - это зависит. Задайте себе следующие вопросы:

  • Каковы ваши требования к латентности - вам нужно как можно быстрее обрабатывать входящие сообщения, или можно обрабатывать обработку? Если он может быть загружен, то как часто вам придется обрабатывать "входящие"?

  • Каковы ваши требования к пропускной способности? Сколько сообщений мы говорим за минуту здесь? Насколько велики сообщения? Это повлияет на решение, которое вы принимаете в отношении интервала опроса, если используется пакетный сценарий;

  • С какой системой электронной почты вы интегрируетесь? Если Exchange, какие программные интерфейсы доступны для доступа к почтовому ящику? До самой последней версии Exchange, что интересно, были проблемы с доступом к почтовому ящику на сервере Exchange (необходимо было использовать компоненты COM CDO на стороне клиента, которые не являются идеальными --- и были ограничения безопасности).

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

По возможности избегайте писать свой собственный SMTP-сервис - это было сделано тысячу раз раньше, и вы просто создаете ненужную работу для себя и подвергаете себя угрозам безопасности. Если вам абсолютно необходимо немедленно ответить на сообщения, то скорее настройте экземпляр Sendmail или Postfix, чтобы создать процесс, который вы написали.

Если вы собираетесь использовать решение POP3 (похоже, оно есть), прочитайте связанные с ним вопросы "Бесплатная библиотека POP3.NET?" и "Чтение электронной почты с использованием POP3 в С#.

  • 0
    Нет никаких реальных требований к задержке, хотя было бы неплохо обработать их, когда они прибудут, чтобы максимально распределить использование ЦП. Это не будет сервер с большой пропускной способностью. Будет несколько пиков использования (это для соревнования), но после этого использование будет довольно низким. Каждое сообщение будет иметь размер до 1 МБ (включая короткое мобильное видео). Система электронной почты для интеграции еще не определена, но я не думаю, что это будет Exchange. И, наконец, я намерен сделать это с максимально возможным повторным использованием кода, чтобы ценить ссылки на библиотеки.
0

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

Если кто-либо заинтересован в коммерческом продукте, посмотрите Mail.dll. Он поддерживает команду IDLE, о которой вы упоминали для мгновенных уведомлений.

Mail.dll включает POP3, IMAP клиенты и мощный синтаксический анализатор MIME:

using(Imap imap = new Imap())
{
    imap.Connect("imap.server.com");
    imap.Login("user", "password");

    imap.SelectInbox();
    List<long> uidList = imap.SearchFlag(Flag.Unseen);
    foreach (long uid in uidList)
    {
        IMail mail = new MailBuilder()
            .CreateFromEml(imap.GetMessageByUID(uid));
        Console.WriteLine(mail.Subject);
    }
    imap.Close(true);
}

Обратите внимание, что это коммерческий продукт, который я создал.

Вы можете скачать его на http://www.lesnikowski.com/mail

0

Некоторые компоненты .net из http://www.quiksoft.com/ могут помочь с вашим требованием.

Приложение проверяет почтовый сервер POP3 каждые x минут и выполняет его путь через сообщения в очереди и удаляет их при обработке каждого сообщения.

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

0

Я использовал webdav в прошлом с С# для периодического доступа к серверу обмена и обработки электронной почты.

Это сработало довольно хорошо, и я, вероятно, снова воспользуюсь этим методом, если мне это нужно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню