Obtenir un message de la boîte de réception du serveur Exchange via .net
-
22-07-2019 - |
Question
Quelqu'un sait comment faire cela?
Je dois créer un service qui se connecte au serveur Exchange et télécharge les messages toutes les x minutes ...
merci!
La solution
Vous voudrez probablement utiliser WebDAV. Voici un bon article sur le sujet
Voir également la référence MSDN dans le Exchange Store.
Autres conseils
Quelle version d'Exchange Server utilisez-vous? S'il s'agit de 2007, vous pouvez utiliser la API de service Web . La méthode FindItem vous permettra d'accéder aux éléments d'un dossier spécifique.
Ou encore si, en 2007, vous pouvez utiliser Powershell, hébergé dans une application .net
Veuillez visiter http://www.aspose.com/documentation/.net-components/aspose.network-for-.net/managing-emails-on-exchange-server.html , si vous êtes intéressé à utiliser des bibliothèques tierces. Aspose.Network prend en charge l’accès aux messages électroniques à partir de la boîte de réception Exchange Server et l’enregistrement dans un fichier au format eml ou msg.
Je l'ai fait à l'aide d'Exchange Server 2010 et du service Windows en C #. Je récupère les e-mails de la boîte de réception, accède aux données de l'e-mail, modifie l'objet de l'e-mail (actuellement codé en dur) et le déplace dans un autre dossier, Enregistré, de la boîte de réception. J'affiche les résultats dans une application console à des fins de test jusqu'à ce que je doive le déployer. Pour le vérifier toutes les x minutes, ajoutez une tâche / un travail exe aux tâches planifiées de Windows. Voici le code:
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);
}
}
}
}