2009-09-18 4 views
0

Je cherche l'exemple le plus complet de barebones, pour lancer Outlook 2007 avec un nouveau message démarré via C# .NET (il se trouve que j'utilise VS2008 .NET 3.0)Démarrage d'un nouveau message Outlook 2007 à partir de C# .NET

Voici ce que je suis en train:

using System; 
using System.Collections.Generic; 
using System.Text; 
using Microsoft.Office.Interop.Outlook; 

namespace CreateMessage { 

    class Program { 

     static void Main (string[] args) { 

      // Create outlook application object. 
      var outlookApplication = new Microsoft.Office.Interop.Outlook.Application(); 

      // Create mail message. 
      var newMail = (Microsoft.Office.Interop.Outlook.MailItem)outlookApplication.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); 
      newMail.To = "[email protected]"; 
      newMail.Subject = "Example"; 
      newMail.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatHTML; 
      newMail.HTMLBody = "<p>Dear Example,</p><p>Example example.</p>"; 
      newMail.Display(false); 

     } 

    } 
} 

Voici mon projet refereces:

alt text http://img4.imageshack.us/img4/9350/referencesi.jpg

Voici l'exception intermittente je reçois (Environ la moitié du temps, je lance le programme):

 
System.Runtime.InteropServices.COMException was unhandled 
    Message="The message filter indicated that the application is busy. (Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER))" 
    Source="Interop.Microsoft.Office.Interop.Outlook" 
    ErrorCode=-2147417846 
    StackTrace: 
     at Microsoft.Office.Interop.Outlook._MailItem.set_To(String To) 
     at CreateMessage.Program.Main(String[] args) in C:\Users\Adam\Projects\GGS\CreateMessage\Program.cs:line 17 
     at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: 

Note: Je l'ai trouvé beaucoup de réponses et des exemples sur le travail avec Outlook via Interop, mais la plupart des réponses ne montre pas les déclarations en utilisant ou essaient de faire les choses au niveau suivant pour ce que je suis en train de photographier. J'essaie juste d'ouvrir Outlook, avec un nouveau message lancé, et peut-être un peu d'informations (Sujet, To, etc). Copier et coller n'importe lequel des exemples que j'ai trouvés jusqu'à maintenant ne compile pas parce qu'ils sont des extraits plutôt qu'un exemple de barebones pleinement fonctionnels qui compile.

merci!

Répondre

1

Je ne suis pas sûr de votre question, mais le message d'erreur que vous affichez indique que vous n'avez pas ajouté l'assembly. Pour ce faire, développez votre projet et cliquez avec le bouton droit sur Références, puis sélectionnez "Ajouter une référence ...". Ensuite allez dans l'onglet 'COM' (sur VS2008 de toute façon) et localisez "Bibliothèque d'objets Microsoft Outlook 12.0" (la version spécifique peut être différente sur votre machine en fonction de la version d'Outlook installée.) Sélectionnez-la et cliquez sur OK. Je pense que cela devrait effacer votre erreur, et vous mettra sur la bonne voie.

+0

Merci Michael. J'ai ajouté la "Bibliothèque d'objets Microsoft Outlook 12.0", mais je reçois toujours le même message d'erreur de compilation: "Le type ou le nom d'espace de nommage 'Outlook' est introuvable (une directive using ou une référence d'assembly est-elle manquante?)" –

+0

Well Je suppose de vos modifications que vous avez résolu le problème de compilation ... comme pour votre question, quand je crée un nouveau projet C# avec votre code (tout ce que j'ai fait était couper/coller) cela fonctionne très bien ... l'application charge et derrière il ouvre un email Outlook avec les paramètres spécifiés. Peut-être devriez-vous essayer de recommencer, au cas où vous feriez des erreurs dans vos tentatives précédentes. –

+0

Merci pour votre aide Michael. J'avais la référence Interop, mais l'utilisation de l'espace de noms complet a dépassé mon erreur initiale. Le problème que je frappe maintenant est l'exception montrée dans ma question mise à jour. Le nouveau message semble démarrer avant que Outlook ne soit prêt et déclenche une exception "application busy". (Cela se produit seulement la moitié du temps, l'autre moitié du temps, l'échantillon s'exécute avec succès et le courrier est généré.) –

Questions connexes