Получить входящие сообщения с сервера Exchange с помощью .net - PullRequest
4 голосов
/ 15 января 2009

Кто-нибудь знает, как это сделать?

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

спасибо!

Ответы [ 5 ]

2 голосов
/ 15 января 2009

Какую версию Exchange Server вы используете? Если это 2007, вы можете использовать API веб-службы . Метод FindItem позволит вам получить доступ к элементам в определенной папке.

2 голосов
/ 15 января 2009

Возможно, вы захотите использовать WebDAV. Вот хорошая статья по теме

Также вот ссылка на MSDN в Exchange Store

0 голосов
/ 01 марта 2013

Я сделал это с помощью Exchange Server 2010 и службы Windows в C #. Я получаю письма из папки «Входящие», получаю доступ к данным почты, редактирую тему письма (в настоящее время жестко запрограммировано) и перемещаю его из папки «Входящие» в другую папку «Сохранено». Я отображаю результаты в консольном приложении для тестирования, пока мне не понадобится развернуть его. Чтобы проверять каждые x минут, добавьте задачу / задание exe в запланированные задачи Windows. Вот код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Exchange101;
using Microsoft.Exchange.WebServices.Data;

namespace Exchange101
{      
    class Notifications
    {
      static ExchangeService service = Service.ConnectToService(UserDataFromConsole.GetUserData(), new TraceListener());

    static void Main(string[] args)
    {
        //SetStreamingNotifications(service);
        RecieveMails(service);

        Console.WriteLine("\r\n");
        Console.WriteLine("Press or select Enter...");
        Console.Read();
    }

    static void RecieveMails(ExchangeService service)
    {
        // Create a view with a page size of 100.
        ItemView view = new ItemView(10);

        // Indicate that the base property will be the item identifier
        view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties);
        view.PropertySet.Add(ItemSchema.IsAssociated);

        // Set the traversal to associated. (Shallow is the default option; other options are Associated and SoftDeleted.)
        view.Traversal = ItemTraversal.Associated;

        // Send the request to search the Inbox.
        FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, view);

        // Output a list of the item classes for the associated items
        foreach (Item item in findResults)
        {
            Console.WriteLine(item.ItemClass);
        }

        findResults = service.FindItems(
        WellKnownFolderName.Inbox,
        new ItemView(10)); //10 is the number of mails to fetch

        foreach (Item item in findResults.Items)
        {        
            //this needs to be here to recieve the message body
            MessageBody messageBody = new Microsoft.Exchange.WebServices.Data.MessageBody();
            List<Item> items = new List<Item>();
            if (findResults.Items.Count > 0) // Prevent the exception
            {
                foreach (Item item2 in findResults)
                {
                    items.Add(item2);
                }
            }
            service.LoadPropertiesForItems(items, PropertySet.FirstClassProperties);

            messageBody = item.Body.ToString();

            Console.WriteLine("==========================================================================");
            Console.WriteLine("IsNew: " + item.IsNew);
            Console.WriteLine("To: " + item.DisplayTo);
            Console.WriteLine("Subject: " + item.Subject);
            Console.WriteLine("Message Body: " + item.Body.ToString());
            Console.WriteLine("Date & Time Received: " + item.DateTimeReceived);
            Console.WriteLine("HasAttachments: " + item.HasAttachments);               

            //this is just what I have to do later
            //CreateNewWorkflowFromEmail();
            //if (WorkflowWasCreated) then move email to saved folder

            //here I change the subject and move the mail to my custom folder "Saved"
            Folder rootfolder = Folder.Bind(service, WellKnownFolderName.MsgFolderRoot);
            rootfolder.Load();

            foreach (Folder folder in rootfolder.FindFolders(new FolderView(100)))
            {
                // This IF limits what folder the program will seek
                if (folder.DisplayName == "Saved")
                {
                    var fid = folder.Id;
                    //Console.WriteLine(fid);                        
                    item.Load();
                    item.Subject = ("WF1234567 - " + item.Subject);
                    item.Update(ConflictResolutionMode.AlwaysOverwrite);
                    item.Move(fid);                            
                    }
                }
        }
    }
0 голосов
/ 20 сентября 2009

Пожалуйста, посетите http://www.aspose.com/documentation/.net-components/aspose.network-for-.net/managing-emails-on-exchange-server.html,, если вы заинтересованы в использовании сторонних библиотек. Aspose.Network поддерживает доступ к электронной почте из папки входящих сообщений Exchange Server и сохраняет в файл в формате eml или msg.

0 голосов
/ 28 января 2009

Или снова, если в 2007 году вы можете использовать powershell, размещенный в приложении .net

...