Как читать входящую почту с помощью С#

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

  1. Создайте сервер электронной почты, анализирующий электронные письма
  2. Подключиться к существующему серверу обмена
  3. Подключитесь к Outlook, который уже настроен с помощью учетной записи электронной почты.

Как лучше всего это сделать? И как его реализовать?

Спасибо


person Chris    schedule 06.01.2011    source источник
comment
Я думаю, что это действительно зависит от того, что вы собираетесь делать с электронной почтой. Если вы создаете веб-приложение, вам поможет либо опрос, либо использование службы для получения входящей электронной почты. Если вы действительно хотите взаимодействовать с электронной почтой с точки зрения Outlook, вам может помочь создание надстройки.   -  person Steve Smith    schedule 07.01.2011
comment
@Steve Я хочу иметь возможность читать почту (с вложением), анализировать ее, а затем отправлять автоматический ответ.   -  person Chris    schedule 07.01.2011


Ответы (3)


Если вы уже имеете дело с сервером Exchange в качестве хоста почтового ящика, я бы предложил использовать его через IMAP (предпочтительно) или доступ по протоколу POP. Недавно я разработал решение, которое обращается к указанному почтовому ящику через компонент AfterLogic MailBee.NET IMAP. который, я думаю, стоит рекомендации. У них есть стандартная пробная версия и разумные цены. Кроме того, если вы пойдете по этому пути, автоматизация POP или IMAP будет достаточно гибкой, чтобы работать практически с любой платформой сервера почтовых ящиков; Его не обязательно ограничивать средами Exchange.

Существуют также бесплатные компоненты .NET IMAP, которые также могут выполнять эту работу. В своем ограниченном исследовании я обнаружил, что бесплатные альтернативы не совсем соответствуют всем моим требованиям или не так просты в освоении, но ваша ситуация может отличаться. Для полноты картины вот список альтернативных/бесплатных библиотек IMAP, которые я рассматривал, прежде чем решил потратить деньги на MailBee:

Чтобы ответить на вторую часть вашего вопроса... Реализация в моем недавнем проекте включала написание очень простого консольного приложения, которое ссылается на библиотеку IMAP MailBee.NET. Консольное приложение имеет стандартный файл конфигурации и принимает аргументы командной строки в качестве параметров. Мы определяем запланированные задачи Windows для запуска консольного приложения в соответствии с потребностями нашего процесса. Я уверен, что вы могли бы сделать это любым другим способом, но это был самый простой подход для наших нужд.

person Saul Dolgin    schedule 06.01.2011
comment
+1 для MailBee, мы тоже его используем. - person PhilPursglove; 06.01.2011
comment
Учитывая комментарии выше, я бы сказал, что этот ответ отличный, хотя не забывайте, что есть способы доставить электронное письмо напрямую без опроса. Вы можете настроить почтовый сервер для отправки электронной почты в виде HTTP-запроса или использовать стороннюю службу для этого (я не буду упоминать ни одну из них здесь, потому что я запускаю одну, но я уверен, что вы можете найти их) - person Steve Smith; 11.01.2011

Я знаю, что это старая тема, но я хотел добавить ссылку на отличную библиотеку Imap с открытым исходным кодом под названием ImapX2: http://imapx.codeplex.com/

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

person Mark Kram    schedule 25.01.2013

Используйте для этого существующий сервер IMAP и компонент IMAP.

На мой взгляд, создание собственного IMAP-сервера представляет собой большой риск для безопасности.

Есть бесплатные компоненты, но у большинства из них проблемы с национальными символами и «нестандартными» сообщениями электронной почты... и нет никакой поддержки (LumiSoft.Net заброшен почти на 2 года)

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

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

Mail.dll также включает компонент SMTP и механизм шаблонов, чтобы вы могли легко отправлять ответы.

Отказ от ответственности: я участвую в разработке этого коммерческого продукта.

person Pawel Lesnikowski    schedule 18.01.2011