誰でもこれを行う方法を知っていますか?
Exchange サーバーに接続し、x 分ごとにメッセージをダウンロードするサービスを作成する必要があります...
ありがとう!
誰でもこれを行う方法を知っていますか?
Exchange サーバーに接続し、x 分ごとにメッセージをダウンロードするサービスを作成する必要があります...
ありがとう!
おそらく WebDAV を使用したいと思うでしょう。これはこのテーマに関する良い記事です
どのバージョンの Exchange Server を使用していますか? 2007 年であれば、Web サービス APIを使用できます。FindItemメソッドを使用すると、特定のフォルダー内のアイテムにアクセスできます。
これは、Exchange Server 2010とWindowsサービスをC#で使用して行いました。受信トレイからメールを取得し、メールデータにアクセスし、メールの件名(現在はハードコードされています)を編集して、受信トレイから別のフォルダー[保存済み]に移動します。これをデプロイする必要があるまで、テスト目的でコンソールアプリに結果を表示します。x分ごとにチェックするには、Windowsのスケジュールされたタスクにexeタスク/ジョブを追加します。コードは次のとおりです。
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);
}
}
}
}
または、2007年の場合、.netアプリでホストされているpowershellを使用できます
サードパーティ ライブラリの使用に関心がある場合は、http://www.aspose.com/documentation/.net-components/aspose.network-for-.net/managing-emails-on-exchange-server.htmlにアクセスしてください。Aspose.Network は、Exchange Server Inbox からの電子メールへのアクセスをサポートし、eml または msg 形式でファイルに保存します。