Question

Savez-vous s'il y a un moyen?

Je l'ai utilisé cette bibliothèque pour accéder à un serveur pop3, mais il ne fonctionne pas avec un serveur d'échange.

Connaissez-vous une autre bibliothèque ou un morceau de code qui va me montrer comment le faire?

Je ne peux pas modifier les paramètres sur le serveur.

Était-ce utile?

La solution

dépend de la version Exchange. WebDAV fonctionne avec 2000-2007, mais < a href = "http://msdn.microsoft.com/en-us/library/aa565934.aspx" rel = "nofollow noreferrer"> services Web 2007 + nécessite.

Ce sont probablement les plus faciles à faire fonctionner. CDO est une autre option, mais il est pas pris en charge de C # - donc vous devrez aller de proc .

Exchange a également fournisseur OLEDB , mais je ne l'ai jamais utilisé - il est pris en charge de .NET , mais <. / p>

Autres conseils

Si vous utilisez Exchange 2007 et ont des services Web activés, cela est assez facile. J'ai ajouté un à mon projet VS2008 Référence Web 2.0 classique de style, et je peux obtenir des messages électroniques comme ceci:

// exchange 2007 lets us use web services to check mailboxes.
using (ExchangeServiceBinding exchangeServer = new ExchangeServiceBinding())
{
    ICredentials creds = new NetworkCredential("user","password");
    exchangeServer.Credentials = creds;
    exchangeServer.Url = "https://myexchangeserver.com/EWS/Exchange.asmx";
    FindItemType findItemRequest = new FindItemType();
    findItemRequest.Traversal = ItemQueryTraversalType.Shallow;

    // define which item properties are returned in the response
    ItemResponseShapeType itemProperties = new ItemResponseShapeType();
    itemProperties.BaseShape = DefaultShapeNamesType.AllProperties;
    findItemRequest.ItemShape = itemProperties;

    // identify which folder to search
    DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
    folderIDArray[0] = new DistinguishedFolderIdType();
    folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;

    // add folders to request
    findItemRequest.ParentFolderIds = folderIDArray;

    // find the messages
    FindItemResponseType findItemResponse = exchangeServer.FindItem(findItemRequest);

    // read returned
    FindItemResponseMessageType folder = (FindItemResponseMessageType)findItemResponse.ResponseMessages.Items[0];
    ArrayOfRealItemsType folderContents = new ArrayOfRealItemsType();
    folderContents = (ArrayOfRealItemsType)folder.RootFolder.Item;
    ItemType[] items = folderContents.Items;

    // if no messages were found, then return null -- we're done
    if (items == null || items.Count() <= 0)
        return null;

    // FindItem never gets "all" the properties, so now that we've found them all, we need to get them all.
    BaseItemIdType[] itemIds = new BaseItemIdType[items.Count()];
    for (int i = 0; i < items.Count(); i++)
        itemIds[i] = items[i].ItemId;

    GetItemType getItemType = new GetItemType();
    getItemType.ItemIds = itemIds;
    getItemType.ItemShape = new ItemResponseShapeType();
    getItemType.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties;
    getItemType.ItemShape.BodyType = BodyTypeResponseType.Text;
    getItemType.ItemShape.BodyTypeSpecified = true;

    GetItemResponseType getItemResponse = exchangeServer.GetItem(getItemType);
    ItemType[] messages = new ItemType[getItemResponse.ResponseMessages.Items.Count()];

    for (int j = 0; j < messages.Count(); j++)
        messages[j] = ((ItemInfoResponseMessageType)getItemResponse.ResponseMessages.Items[j]).Items.Items[0];

    return messages;
}

La variable « messages » sera un tableau d'objets ItemType est revenu de l'échange qui ont toutes les propriétés que vous attendez pour un message électronique (corps, pièces jointes, etc.). J'espère que cela aide!

Utilisation de SAP directement dans le code managé (VB.net / C #) est maladroit de dire le meilleur.

J'ai tâtonner avec elle pendant quelques jours maintenant, et je suis venu à la conclusion qu'il est préférable de construire mes propres classes wrapper autour de l'API, ce qui rend les services utilisables dans une ligne ou deux de code, pas avec la mise en œuvre actuelle.

Devinez quoi? Microsoft m'a battu à lui: Release Candidate de services Web Exchange Managed API est disponible en téléchargement ici .

Installer, inscrivez-vous la référence dll (\ Program Files \ Microsoft \ Exchange \ Web Services \ 1.0 \ Micorosft.Exchange.WebServices.dll), et importer l'espace de noms (Microsoft.Exchange.WebServices.Data) et vous êtes prêt à rouler.

Je suppose que votre problème est que votre serveur d'échange prennent uniquement en charge l'authentification NTLM et ne permet pas l'authentification de texte brut? Ou vous pourriez ne pas être en utilisant la convention de nom d'utilisateur approprié. Par exemple, vous pouvez essayer d'utiliser le nom d'utilisateur de format @ domaine où domaine est le domaine NT interne qui pourrait ne pas être le même que votre domaine Internet.

Si tel est le cas, ne cherchez une bibliothèque qui prend en charge NTLM.

Étapes de test via telnet

Aller à l'invite de commande Type: telnet my.server.com 110 vous devriez obtenir une réponse de votre serveur d'échange comme celui-ci + OK Microsoft Exchange Server 2003 version du serveur POP3 6.5.7638.1 (my.server.com) prêt.

Type: CAPA cela devrait retourner la liste des capacités de votre serveur Exchange prend en charge. CAPA + OK liste des capacités suit HAUT UTILISATEUR PIPELINING EXPIRATION JAMAIS UIDL NTLM SASL .

Notez que le mien ne montre pas PLAIN

Voici une réponse d'un serveur de messagerie qui fait + OK Dovecot prêt. CAPA + OK CAPA HAUT UIDL REEE-CODES PIPELINING STLS UTILISATEUR SASL PLAIN .

Si votre réponse ne comprend pas PLAIN alors arrêter que vous avez besoin d'une bibliothèque qui prend en charge SPA

Type: utilisateur myusername OU Type: myusername@domain.corp utilisateur remplacement domain.corp avec votre domaine

Vous devriez alors recevoir + OK

Type: pass mypass

Vous devriez obtenir une réponse + OK

tapez: list

devrait obtenir une liste des e-mails. Cela pourrait aider à voir si votre problème est un problème de format nom d'utilisateur.

J'ai écrit cela pour recevoir des informations de ma boîte de réception. J'ai une tâche fastidieuse à faire tous les matins si un courriel est là, je l'ai écrit ce morceau de code pour vérifier mon dossier pour un titre e-mail. J'ai ajouté un petit peu de la création de xml pour montrer les possibilités. Ce ne est pas l'échange, mais cela fonctionne dans mon cas. XCData code pour tout caractère spécial dans le corps. Je suppose que je dois souligner que l'objet e-mail que je suis à la recherche est [Ticket - Support # 12345]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Outlook = Microsoft.Office.Interop.Outlook;
using Microsoft.Office;
using System.Xml.Linq;

namespace ProcessEmail
{
    class Program
    {
        static void Main(string[] args)
        {
            Outlook.Application outlook = new Outlook.Application();
            Outlook.NameSpace ns = outlook.GetNamespace("Mapi");
            object _missing = Type.Missing;
            ns.Logon(_missing, _missing, false, true);

            Outlook.MAPIFolder inbox = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

            int unread = inbox.UnReadItemCount;
            XElement xmlMail = new XElement("Mail");
            foreach (Outlook.MailItem mail in inbox.Items)
            {               
                string s = mail.Subject;

                if (s != null)
                {
                    if (s.Contains("Tickets") || (s.Contains("Support")))
                    {
                        string[] splitter = s.Split('#');
                        string[] split = splitter[1].Split(']');                       
                        string num = split[0].Trim();

                        XElement mailrow = new XElement("MailRow",
                            new XElement("Ticket_Number",num),
                            new XElement("Subject", mail.Subject),
                            new XElement("Body",  new XCData(mail.Body)),
                            new XElement("From", mail.SenderEmailAddress)
                            );
                        xmlMail.Add(mailrow);
                    }
                }

            }
            xmlMail.Save("E:\\mailxml.xml");


        }
    }
}

Matt

Vous pouvez utiliser cette bibliothèque: http://www.dimastr.com/redemption/

Vous devez utiliser le Exchange SDK si POP3 n'est pas activé dans le serveur Exchange. Une autre option consiste à utiliser WebDAV .

Une autre option consiste à configurer Exchange pour activer IMAP4. Il existe des bibliothèques IMAP4 3ème partie pour .NET, par exemple Rebex.

Vous pouvez utiliser SAP (webservices Bourse) à partir de Exchange 2007. Ils semblent être toujours installés et sont mieux pris en charge que Webdav.

Vous pouvez simplement importer le webservice de votre EXCHANGESERVER (Rechercher un asmx-fichier dans le répertoire d'installation). Vous pouvez télécharger EML-fichiers de vos mails et faire beaucoup plus de choses!

Vous pouvez utiliser Services Web Exchange (Exchange 2007 ou 2010) ou WebDav (Exchange jusqu'en 2007, 2010 ne prend pas en charge WebDAV), mais l'API et la mise en œuvre pourrait être un peu lourd si vous voulez faire un développement rapide.

Je l'ai utilisé les bibliothèques de IndependentSoft pour WebDav et

  1. L'API actuellement préféré (échange en 2013 et 2016) est EWS . Il est purement HTTP base et est accessible depuis toutes les langues, mais il y a . net et Java de bibliothèques spécifiques.

    Vous pouvez utiliser EWSEditor pour jouer avec l'API.

  2. MAPI étendu . Ceci est l'API native utilisé par Outlook. Il finit par utiliser le fournisseur MAPI MSEMS Exchange, qui peut parler à Exchange à l'aide RPC (Exchange 2013 ne prend plus il) ou RPC sur HTTP (Exchange 2007 ou plus récent) ou MAPI sur HTTP (Exchange 2013 et plus récent).

    L'API lui-même ne peut être accessible à partir non géré C ++ ou Delphi . Vous pouvez également utiliser de rachat (toute langue) - son RDO famille d'objets est un wrapper MAPI étendu. Pour utiliser MAPI étendu, vous devez installer Outlook ou la version autonome ( Exchange) version de MAPI (sur support étendu, et il ne prend pas en charge les fichiers Unicode PST et MSG et ne peuvent pas accéder à Exchange 2016). MAPI étendu peut être utilisé dans un service.

    Vous pouvez jouer avec l'API en utilisant OutlookSpy ou MFCMAPI .

  3. Outlook Object Model - pas d'échange spécifique, mais il permet d'accéder à toutes les données disponibles dans Outlook sur la machine où le code est exécuté. Ne peut pas être utilisé dans un service.

  4. Exchange Active Sync . Microsoft n'investit plus de ressources importantes dans ce protocole.

  5. Perspectives utilisé pour installer la bibliothèque CDO 1.21 (il enveloppe MAPI étendu), mais il avait été désapprouvée par Microsoft et ne reçoit plus les mises à jour.

  6. Il y avait un tiers wrapper MAPI .NET MAPI33, mais il n'est

    plus en cours d'élaboration ou pris en charge.
  7. WebDAV -. Dépréciée

  8. données pour Exchange Collaborative objets (CDOEX) -. Dépréciée

  9. fournisseur OLE DB Exchange (EXOLEDB) -. Dépréciée

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top