Automatisieren von Outlook 2010 mit C++ in Visual Studio 2010 zusammen mit MFC

Zusammenfassung

Dieser Artikel enthält ein Schritt-für-Schritt-Beispiel zum Erstellen einer Microsoft Visual Studio 2010-Anwendung, die Microsoft Outlook 2010 automatisiert und C++ zusammen mit Microsoft Foundation Classes (MFC) verwendet.

Weitere Informationen

In diesem Artikel wird beschrieben, wie Sie ein Visual Studio 2010-Projekt erstellen, das Outlook für folgende Aufgaben automatisiert:

  • Erstellen und Speichern eines Kontakts
  • Erstellen und Speichern eines Termins
  • Erstellen und Senden einer E-Mail-Nachricht

Obwohl Sie alle folgenden Abschnitte implementieren können, können Sie auch einen oder zwei dieser Abschnitte weglassen, sodass nur ein oder zwei Arten von Elementen erstellt werden.

Hinweis

In allen folgenden Codebeispielen werden Dateipfade für ein 32-Bit-Betriebssystem vorausgesetzt. Stellen Sie sicher, dass Sie alle erforderlichen Änderungen am Pfad vornehmen, damit diese für Ihr bestimmtes Betriebssystem und Ihre Konfiguration gültig sind. Außerdem erstellt der Code Outlook-Elemente, die fiktive Informationen enthalten, einschließlich einer fiktiven E-Mail-Adresse. Stellen Sie sicher, dass Sie die E-Mail-Adresse zu Testzwecken in eine Ihrer gültigen E-Mail-Adressen ändern.

Schritt 1: Erstellen des Projekts

  1. Starten Sie Visual Studio 2010.
  2. Klicken Sie auf "Datei", dann auf " Neu" und dann auf " Projekt". Erweitern Sie in der Liste der installierten Vorlagen C++, wählen Sie MFC und dann MFC-Anwendungsprojekt aus. Benennen Sie das Projekt als AutomateOutlookWithMFC, und klicken Sie dann auf "OK".
  3. Wenn der MFC-Anwendungs-Assistent gestartet wird, klicken Sie auf "Weiter".
  4. Belassen Sie die Einstellungen im MFC-Anwendungs-Assistenten bei den Standardwerten, mit Ausnahme des Abschnitts "Anwendungstyp" . Wählen Sie in diesem Abschnitt "Dialogbasiert" aus.
  5. Klicken Sie auf "Fertig stellen ", um den MFC-Anwendungs-Assistenten abzuschließen.

Schritt 2: Einschließen der Microsoft Office 14.0-Objektbibliothek

  1. Öffnen Sie im fenster Projektmappen-Explorer die Datei "stdafx.h".

  2. Fügen Sie am Ende der Datei die folgende Zeile hinzu. Stellen Sie sicher, dass der Pfad für Ihr bestimmtes Betriebssystem und Ihre Konfiguration geeignet ist:

    #import "C:\\Program Files\\Common Files\\microsoft shared\\OFFICE14\\mso.dll" no_namespace rename("RGB", "MsoRGB") exclude("IAccessible")
    

    Hinweis Diese Zeile weist MIDL an, die Headerdatei ohne die IAccessible-Schnittstelle zu erstellen, um mögliche Fehler beim Neudefinitionen zu vermeiden. Jede Klassendatei benötigt diesen Verweis. Daher ist es in der Headerdatei "stdafx.h" enthalten.

Schritt 3: Erstellen des Application-Objekts von Outlook

  1. Wählen Sie im fenster Projektmappen-Explorer die Datei AutomateOutlookWithMFCDlg.cpp aus.

  2. Klicken Sie auf das Menü "Projekt " und dann auf " Klassen-Assistent".

  3. Klicken Sie auf den Pfeil nach unten auf der Schaltfläche " Klasse hinzufügen " und dann auf "MFC-Klasse aus TypeLib".

  4. Wählen Sie unter "Verfügbare Typbibliotheken" die Microsoft Outlook 14.0-Objektbibliothek aus.

  5. Klicken Sie im Listenfeld "Schnittstellen " auf _Application.

  6. Klicken Sie auf die Nach-rechts-Schaltfläche, um der Liste der generierten Klassen_Application hinzuzufügen.

  7. Klicken Sie auf "Fertig stellen ", um die Klasse zu generieren, und klicken Sie dann auf "OK ", um den Klassen-Assistenten zu schließen.

  8. Öffnen Sie die neu erstellte Headerdatei CApplication.h. Suchen Sie diese Zeile:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  9. Ersetzen Sie die Zeile, die Sie in Schritt 8 gefunden haben, durch Folgendes:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  10. Öffnen Sie die Datei AutomateOutlookWithMFCDlg.cpp , und fügen Sie der Liste der #include Anweisungen Folgendes hinzu:

    #include "CApplication.h"
    

Schritt 4: Hinzufügen einer Schaltfläche zum Projekt

  1. Wechseln sie zum Dialogfeld.

  2. Verwenden Sie die Steuerelement-Toolbox, um dem Dialogfeld eine Schaltfläche hinzuzufügen.

  3. Um einen Handler für die Schaltfläche hinzuzufügen, doppelklicken Sie auf die Schaltfläche, und suchen Sie diese Zeile:

    // TODO: Add your control notification handler code here
    
  4. Ersetzen Sie die Zeile, die Sie in Schritt 3 gefunden haben, durch den folgenden Code:

    CApplication olApp;
    COleException e;
    if (!olApp.CreateDispatch(_T("Outlook.Application"), &e))
    {
    CString strErr;
    strErr.Format(_T("CreateDispatch() failed w/error 0x%08lx"), e.m_sc);
    AfxMessageBox(strErr, MB_SETFOREGROUND);
    return;
    }
    

Schritt 5: Erstellen des Namespace-Objekts von Outlook

  1. Klicken Sie im Menü "Projekt " auf " Klassen-Assistent".

  2. Klicken Sie auf den Pfeil nach unten auf der Schaltfläche " Klasse hinzufügen " und dann auf "MFC-Klasse aus Typelib".

  3. Wählen Sie unter "Verfügbare Typbibliotheken" die Microsoft Outlook 14.0-Objektbibliothek aus.

  4. Klicken Sie im Listenfeld "Schnittstellen " auf _Namespace.

  5. Klicken Sie auf die Nach-rechts-Schaltfläche, um _Namespace zur Liste der generierten Klassen hinzuzufügen.

  6. Klicken Sie auf "Fertig stellen ", um die Klasse zu generieren, und klicken Sie dann auf "OK ", um den Klassen-Assistenten zu schließen.

  7. Öffnen Sie die neu erstellte Headerdatei CNamespace.h. Suchen Sie diese Zeile:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  8. Ersetzen Sie die Zeile, die Sie in Schritt 7 gefunden haben, durch Folgendes:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  9. Wechseln Sie zur Datei AutomateOutlookWithMFCDlg.cpp , und fügen Sie der Liste der #include Anweisungen Folgendes hinzu:

    #include "CNamespace.h"
    
  10. Fügen Sie in der AutomateOutlookWithMFCDlg::OnBnClickedButton1()-Funktion (dem Code des Schaltflächenhandlers) den folgenden Code nach der letzten Zeile hinzu:

    // Logon. Doesn't hurt if you are already running and logged on... 
    CNameSpace olNs(olApp.GetNamespace(_T("MAPI")));
    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    olNs.Logon(covOptional, covOptional, covOptional, covOptional);
    

Schritt 6: Erstellen und Speichern eines ContactItem-Objekts

  1. Klicken Sie im Menü "Projekt " auf " Klassen-Assistent".

  2. Klicken Sie auf den Pfeil nach unten auf der Schaltfläche " Klasse hinzufügen " und dann auf "MFC-Klasse aus Typelib".

  3. Wählen Sie unter "Verfügbare Typbibliotheken" die Microsoft Outlook 14.0-Objektbibliothek aus.

  4. Klicken Sie im Listenfeld "Schnittstellen " auf _ContactItem.

  5. Klicken Sie auf die Nach-rechts-Schaltfläche, um _ContactItem zur Liste der generierten Klassen hinzuzufügen.

  6. Klicken Sie auf "Fertig stellen ", um die Klasse zu generieren, und klicken Sie dann auf "OK ", um den Klassen-Assistenten zu schließen.

  7. Öffnen Sie die neu erstellte Headerdatei CContactItem.h. Suchen Sie diese Zeile:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  8. Ersetzen Sie die Zeile, die Sie in Schritt 7 gefunden haben, durch Folgendes:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  9. Wechseln Sie zur Datei AutomateOutlookWithMFCDlg.cpp , und fügen Sie der Liste der #include Anweisungen Folgendes hinzu:

    #include "CContactItem.h"
    
  10. Fügen Sie in der AutomateOutlookWithMFCDlg::OnBnClickedButton1()-Funktion (dem Code des Schaltflächenhandlers) den folgenden Code nach der letzten Zeile hinzu:

    // Create and open a new contact
    CContactItem olContactItem(olApp.CreateItem(olContactItem));
    
    olContactItem.put_FullName(_T("John Doe"));
    COleDateTime bdDate;
    bdDate.SetDate(1975, 9, 15);
    olContactItem.put_Birthday(bdDate);
    olContactItem.put_CompanyName(_T("Microsoft"));
    olContactItem.put_HomeTelephoneNumber(_T("KL5-555-1234"));
    olContactItem.put_Email1Address(_T("john.doe@microsoft.com"));
    olContactItem.put_HomeAddress(_T("123 Main Street.\nAnytown, WA 12345"));
    
    // Save the contact
    olContactItem.Save();
    

Schritt 7: Erstellen und Speichern eines AppointmentItem-Objekts

  1. Klicken Sie im Menü "Projekt " auf " Klassen-Assistent".

  2. Klicken Sie auf den Pfeil nach unten auf der Schaltfläche " Klasse hinzufügen " und dann auf "MFC-Klasse aus Typelib".

  3. Wählen Sie unter "Verfügbare Typbibliotheken" die Microsoft Outlook 14.0-Objektbibliothek aus.

  4. Klicken Sie im Listenfeld "Schnittstellen " auf _AppointmentItem.

  5. Klicken Sie auf die Nach-rechts-Schaltfläche, um _AppointmentItem zur Liste der generierten Klassen hinzuzufügen.

  6. Klicken Sie auf "Fertig stellen ", um die Klasse zu generieren, und klicken Sie dann auf "OK ", um den Klassen-Assistenten zu schließen.

  7. Öffnen Sie die neu erstellte Headerdatei CAppointmentItem.h. Suchen Sie diese Zeile:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  8. Ersetzen Sie die Zeile, die Sie in Schritt 7 gefunden haben, durch Folgendes:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  9. Wechseln Sie zur Datei AutomateOutlookWithMFCDlg.cpp , und fügen Sie der Liste der #include Anweisungen Folgendes hinzu:

    #include "CAppointmentItem.h"
    
  10. Fügen Sie in der AutomateOutlookWithMFCDlg::OnBnClickedButton1()-Funktion (dem Code des Schaltflächenhandlers) den folgenden Code nach der letzten Zeile hinzu:

    // Create a new appointment
    CAppointmentItem olApptItem(olApp.CreateItem(olAppointmentItem));
    
    COleDateTime apptDate = COleDateTime::GetCurrentTime();
    // Set the Start time to occur 2 minutes from now
    apptDate += DATE(2.0/(24.0*60.0));
    
    olApptItem.put_Start(apptDate);
    
    // Set the duration to be 1 hour
    olApptItem.put_Duration(60);
    
    // Set other appointment info
    olApptItem.put_Subject(_T("Meeting discuss plans"));
    olApptItem.put_Body(_T("Meeting with John to discuss plans"));
    olApptItem.put_ReminderMinutesBeforeStart(1);
    olApptItem.put_ReminderSet(TRUE);
    
    // Save Apptointment
    olApptItem.Save();
    
    

Schritt 8: Erstellen und Speichern eines MailItem-Objekts

  1. Klicken Sie im Menü "Projekt " auf " Klassen-Assistent".

  2. Klicken Sie auf den Pfeil nach unten auf der Schaltfläche " Klasse hinzufügen " und dann auf "MFC-Klasse aus Typelib".

  3. Wählen Sie unter "Verfügbare Typbibliotheken" die Microsoft Outlook 14.0-Objektbibliothek aus.

  4. Klicken Sie im Listenfeld "Schnittstellen " auf _MailItem.

  5. Klicken Sie auf die Nach-rechts-Schaltfläche, um _MailItem zur Liste der generierten Klassen hinzuzufügen.

  6. Klicken Sie auf "Fertig stellen ", um die Klasse zu generieren, und klicken Sie dann auf "OK ", um den Klassen-Assistenten zu schließen.

  7. Öffnen Sie die neu erstellte Headerdatei CMailItem.h. Suchen Sie diese Zeile:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  8. Ersetzen Sie die Zeile, die Sie in Schritt 7 gefunden haben, durch Folgendes:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  9. Wechseln Sie zur Datei AutomateOutlookWithMFCDlg.cpp , und fügen Sie der Liste der #include Anweisungen Folgendes hinzu:

    #include "CMailItem.h"
    
  10. Fügen Sie in der AutomateOutlookWithMFCDlg::OnBnClickedButton1()-Funktion (dem Code des Schaltflächenhandlers) den folgenden Code nach der letzten Zeile hinzu:

    // Prepare a new mail message
    CMailItem olMailItem(olApp.CreateItem(olMailItem));
    olMailItem.put_To(_T("john.doe@microsoft.com"));
    olMailItem.put_Subject(_T("About our meeting..."));
    olMailItem.put_Body(
    _T("Hi John,\n\n")
    _T("\tI'll see you in two minutes for our meeting!\n\n")
    _T("btw: I've added you to my contact list!"));
    
    // Send the message
    olMailItem.Send();
    
    AfxMessageBox(_T("All done."), MB_SETFOREGROUND);
    
    

Schritt 9: Implementieren des Codes zum Abmelden

Fügen Sie in der Datei AutomateOutlookWithMFCDlg.cpp am Ende des Schaltflächenhandlercodes den folgenden Code hinzu:

olNs.Logoff();

Schritt 10: Kompilieren und Ausführen des Projekts

  1. On the Build menu, click Build Solution. Stellen Sie sicher, dass keine Buildfehler vorhanden sind.
  2. Kompilieren Sie den Code, und führen Sie den Code aus. Es sollte einen Kontakt und einen Termin erstellen und speichern und dann eine neue E-Mail-Nachricht erstellen und senden.

Zusätzliche Hinweise

Drei Methoden werden umbenannt, um potenzielle Konflikte beim Kompilieren zu vermeiden. Obwohl die Methoden Folder und CopyFile Warnungen generieren, verhindert die GetOrganizer-Methode die Kompilierung des Projekts.

Die _Appointment::GetOrganizer-Methode gibt einen AddressEntry-Wert zurück und wurde in _Appointment::GetOrganizerAE umbenannt. Wir haben diese Methode umbenannt, da _Appointment::Organizer eine Eigenschaft auf derselben Schnittstelle ist und die Duplizierung einen Konflikt verursacht. In diesem Fall erstellt MIDL eine Hilfsfunktion für die _Appointment::Organizer-Eigenschaft, die _Appointment::GetOrganizer aufgerufen wird. Daher wird die Hilfsfunktion zu einer überladenen Methode, die verschiedene Typen zurückgibt (z. B. BSTR* im Vergleich zu AddressEntry*). Überladene Methoden, die sich nur durch den Rückgabetyp unterscheiden, sind nicht zulässig.