web-dev-qa-db-fra.com

Comment obtenir le corps de l'e-mail, le reçu, l'expéditeur et les informations CC à l'aide d'EWS?

Quelqu'un peut-il me dire comment obtenir un corps de courrier électronique, un reçu, un expéditeur, des informations CC à l'aide de l'API du service Web Exchange? Je sais seulement comment devenir sujet.

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
    service.Credentials = new NetworkCredential("user", "password", "domain");
    service.Url = new Uri("https://208.243.49.20/ews/exchange.asmx");
    ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
    FindItemsResults<Item> findResults = service.FindItems(
        WellKnownFolderName.Inbox,
        new ItemView(10));

    foreach (Item item in findResults.Items)
    {
        div_email.InnerHtml += item.Subject+"<br />";
    }

Mon environnement de développement est asp.net c # Exchange-server 2010 Merci.

25
Steven Zack

L'utilisation de FindItems ne vous mènera que jusqu'à présent, car elle ne renvoie que les 255 premiers octets d'un corps. Ce que vous devez faire est une combinaison de FindItem pour demander les identifiants des mails et émettre un ou plusieurs GetItem appels pour obtenir les propriétés qui vous intéressent.

11
Henning Krause

Étant donné que la question d'origine demandait spécifiquement "corps de l'e-mail, reçu, expéditeur et informations CC", j'ai pensé que j'allais répondre à ces questions. Je suppose que la "réception" correspond aux informations sur le destinataire et non à la fonction "notifier l'expéditeur" des e-mails que personne n'utilise. CC semble être géré de la même manière que les destinataires.

J'ai aimé la réponse de Henning pour réduire la fonction à deux appels, mais j'ai eu un peu de difficulté à comprendre comment gérer un PropertySet. La recherche Google n'était pas immédiatement claire à ce sujet, et j'ai fini par utiliser quelqu'un d'autre tutoriel :

// Simplified mail item
public class MailItem
{
    public string From;
    public string[] Recipients;
    public string Subject;
    public string Body;
}

public MailItem[] GetUnreadMailFromInbox()
{
    FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(128));
    ServiceResponseCollection<GetItemResponse> items = 
        service.BindToItems(findResults.Select(item => item.Id), new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.From, EmailMessageSchema.ToRecipients));
    return items.Select(item => {
        return new MailItem() {
            From = ((Microsoft.Exchange.WebServices.Data.EmailAddress)item.Item[EmailMessageSchema.From]).Address,
            Recipients = ((Microsoft.Exchange.WebServices.Data.EmailAddressCollection)item.Item[EmailMessageSchema.ToRecipients]).Select(recipient => recipient.Address).ToArray(),
            Subject = item.Item.Subject,
            Body = item.Item.Body.ToString(),
        };
    }).ToArray();
}
33
VeeTheSecond

vous trouverez ici la solution.

http://blogs.msdn.com/b/akashb/archive/2010/03/05/how-to-build-a-complex-search-using-searchfilter-and-searchfiltercollection-in-ews- managed-api-1-0.aspx


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



        // Process each item.
        if (findResults.Items.Count > 0)
        {
            foreach (Item myItem in findResults.Items)
            {
                if (myItem is EmailMessage)
                {
                    Console.WriteLine((myItem as EmailMessage).Subject);
                }
                if (myItem.ExtendedProperties.Count > 0)
                {
                    // Display the extended property's name and property.
                    foreach (ExtendedProperty extendedProperty in myItem.ExtendedProperties)
                    {
                        Console.WriteLine(" Extended Property Name: " + extendedProperty.PropertyDefinition.Name);
                        Console.WriteLine(" Extended Property Value: " + extendedProperty.Value);
                    }
                }

            }
        }
        else
        {
            Console.WriteLine("No Items Found!");
        }

    }
2
JAiro

Au lieu d'utiliser les propriétés étendues, vous pouvez également caster vers EmailMessage et lire directement la propriété souhaitée. Par exemple, l'adresse de l'expéditeur:

((Microsoft.Exchange.WebServices.Data.EmailMessage)(item)).From.Address;
2
Johan