次の方法で共有


Visual Studio 2010 で C++ を MFC と共に使用して Outlook 2010 を自動化する方法

概要

この記事では、Microsoft Outlook 2010を自動化し、Microsoft Foundation Classes (MFC) と共に C++ を使用する Microsoft Visual Studio 2010 アプリケーションを作成する方法の詳細な例を示します。

詳細情報

この記事では、Outlook を自動化して次の操作を行う Visual Studio 2010 プロジェクトを作成する方法について説明します。

  • 連絡先を作成して保存する
  • 予定を作成して保存する
  • メール メッセージを作成して送信する

次のすべてのセクションを実装できますが、これらのセクションの 1 つまたは 2 つを省略して、1 つまたは 2 つの種類のアイテムのみを作成することもできます。

注:

次のコード例はすべて、32 ビット オペレーティング システム用のファイル パスを前提としています。 特定のオペレーティング システムと構成に対して有効になるように、パスに必要な変更を加えるようにしてください。 また、このコードは架空の情報を持つ Outlook アイテムを作成します。これには架空の電子メール アドレスが含まれます。 テスト用の有効な電子メール アドレスのいずれかに電子メール アドレスを変更してください。

手順 1: プロジェクトを作成する

  1. Visual Studio 2010 を起動します。
  2. [ファイル] メニューの [新規作成] を選択し、[プロジェクト] をクリックします。 インストールされているテンプレートの一覧で C++ を展開し、 MFC を選択し、 MFC アプリケーション プロジェクトを選択します。 プロジェクトに AutomateOutlookWithMFC という名前を付けて、[ OK] をクリックします。
  3. MFC アプリケーション ウィザードが起動したら、[ 次へ] をクリックします。
  4. MFC アプリケーション ウィザードの設定は、[アプリケーションの 種類] セクションを除く既定値のままにします。 このセクションでは、[ ダイアログ ベース] を選択します。
  5. [完了] をクリックして、MFC アプリケーション ウィザードを完了します。

手順 2: Microsoft Office 14.0 オブジェクト ライブラリを含める

  1. ソリューション エクスプローラー ウィンドウで、stdafx.h ファイルを開きます。

  2. ファイルの最後に、次の行を追加します。 パスが特定のオペレーティング システムと構成に適していることを確認します。

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

    メモ この行は、潜在的な再定義エラーを回避するために、IAccessible インターフェイスを使用せずにヘッダー ファイルを作成するように MIDL に指示します。 すべてのクラス ファイルには、この参照が必要です。 そのため、stdafx.h ヘッダー ファイルに含まれています。

手順 3: Outlook の Application オブジェクトを作成する

  1. ソリューション エクスプローラー ウィンドウで AutomateOutlookWithMFCDlg.cpp ファイルを選択します。

  2. [ プロジェクト ] メニューをクリックし、[ クラス ウィザード] をクリックします。

  3. [ クラスの追加 ] ボタンの下向き矢印をクリックし、 TypeLib から MFC クラスをクリックします。

  4. [ 使用可能なタイプ ライブラリ] で、 Microsoft Outlook 14.0 オブジェクト ライブラリを選択します。

  5. [インターフェイス] ボックス 一覧で、[ _Application] をクリックします。

  6. 右方向ボタンをクリックして、生成されたクラスの一覧に_Applicationを追加します。

  7. [完了] をクリックしてクラスを生成し、[OK] をクリックしてクラス ウィザードを閉じます。

  8. 新しく作成したヘッダー ファイル CApplication.h を開きます。 次の行を見つけます。

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  9. 手順 8 で見つかった行を次のように置き換えます。

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  10. AutomateOutlookWithMFCDlg.cpp ファイルを開き、#include ステートメントの一覧に次を追加します。

    #include "CApplication.h"
    

手順 4: プロジェクトにボタンを追加する

  1. ダイアログ ボックスに切り替えます。

  2. コントロール ツールボックスを使用して、ダイアログ ボックスにボタンを追加します。

  3. ボタンのハンドラーを追加するには、ボタンをダブルクリックし、次の行を見つけます。

    // TODO: Add your control notification handler code here
    
  4. 手順 3 で見つかった行を次のコードに置き換えます。

    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;
    }
    

手順 5: Outlook の名前空間オブジェクトを作成する

  1. [ プロジェクト] メニューの [ クラス ウィザード] をクリックします。

  2. [ クラスの追加] ボタンの下矢印をクリックし、[ MFC クラス From Typelib] をクリックします。

  3. [ 使用可能なタイプ ライブラリ] で、 Microsoft Outlook 14.0 オブジェクト ライブラリを選択します

  4. [インターフェイス] ボックス 一覧で、[ _Namespace] をクリックします。

  5. 右方向ボタンをクリックして、生成されたクラスの一覧に_Namespaceを追加します。

  6. [完了] をクリックしてクラスを生成し、[OK] をクリックしてクラス ウィザードを閉じます。

  7. 新しく作成したヘッダー ファイル CNamespace.h を開きます。 次の行を見つけます。

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  8. 手順 7 で見つかった行を次のように置き換えます。

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  9. AutomateOutlookWithMFCDlg.cpp ファイルに切り替え、#includeステートメントの一覧に次を追加します。

    #include "CNamespace.h"
    
  10. AutomateOutlookWithMFCDlg::OnBnClickedButton1() 関数 (ボタン ハンドラー コード) で、最後の行の後に次のコードを追加します。

    // 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);
    

手順 6: ContactItem を作成して保存する

  1. [ プロジェクト] メニューの [ クラス ウィザード] をクリックします。

  2. [ クラスの追加] ボタンの下矢印をクリックし、[ MFC クラス From Typelib] をクリックします。

  3. [ 使用可能なタイプ ライブラリ] で、 Microsoft Outlook 14.0 オブジェクト ライブラリを選択します

  4. [インターフェイス] ボックス 一覧で、[ _ContactItem] をクリックします。

  5. 右方向ボタンをクリックして、生成されたクラスの一覧に_ContactItemを追加します。

  6. [完了] をクリックしてクラスを生成し、[OK] をクリックしてクラス ウィザードを閉じます。

  7. 新しく作成したヘッダー ファイル CContactItem.h を開きます。 次の行を見つけます。

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  8. 手順 7 で見つかった行を次のように置き換えます。

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  9. AutomateOutlookWithMFCDlg.cpp ファイルに切り替えてから、#include ステートメントの一覧に次を追加します。

    #include "CContactItem.h"
    
  10. AutomateOutlookWithMFCDlg::OnBnClickedButton1() 関数 (ボタン ハンドラー コード) で、最後の行の後に次のコードを追加します。

    // 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();
    

手順 7: AppointmentItem を作成して保存する

  1. [ プロジェクト] メニューの [ クラス ウィザード] をクリックします。

  2. [ クラスの追加] ボタンの下矢印をクリックし、[ MFC クラス From Typelib] をクリックします。

  3. [ 使用可能なタイプ ライブラリ] で、 Microsoft Outlook 14.0 オブジェクト ライブラリを選択します

  4. [インターフェイス] ボックス 一覧で、[ _AppointmentItem] をクリックします。

  5. 右方向ボタンをクリックして、生成されたクラスの一覧に_AppointmentItemを追加します。

  6. [完了] をクリックしてクラスを生成し、[OK] をクリックしてクラス ウィザードを閉じます。

  7. 新しく作成したヘッダー ファイル CAppointmentItem.h を開きます。 次の行を見つけます。

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  8. 手順 7 で見つかった行を次のように置き換えます。

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  9. AutomateOutlookWithMFCDlg.cpp ファイルに切り替え、#includeステートメントの一覧に次を追加します。

    #include "CAppointmentItem.h"
    
  10. AutomateOutlookWithMFCDlg::OnBnClickedButton1() 関数 (ボタン ハンドラー コード) で、最後の行の後に次のコードを追加します。

    // 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();
    
    

手順 8: MailItem を作成して保存する

  1. [ プロジェクト] メニューの [ クラス ウィザード] をクリックします。

  2. [ クラスの追加] ボタンの下矢印をクリックし、[ MFC クラス From Typelib] をクリックします。

  3. [ 使用可能なタイプ ライブラリ] で、 Microsoft Outlook 14.0 オブジェクト ライブラリを選択します

  4. [インターフェイス] ボックス 一覧で、[ _MailItem] をクリックします。

  5. 右方向ボタンをクリックして、生成されたクラスの一覧に_MailItemを追加します。

  6. [完了] をクリックしてクラスを生成し、[OK] をクリックしてクラス ウィザードを閉じます。

  7. 新しく作成したヘッダー ファイル CMailItem.h を開きます。 次の行を見つけます。

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  8. 手順 7 で見つかった行を次のように置き換えます。

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  9. AutomateOutlookWithMFCDlg.cpp ファイルに切り替え、#includeステートメントの一覧に次を追加します。

    #include "CMailItem.h"
    
  10. AutomateOutlookWithMFCDlg::OnBnClickedButton1() 関数 (ボタン ハンドラー コード) で、最後の行の後に次のコードを追加します。

    // 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);
    
    

手順 9: ログオフするコードを実装する

AutomateOutlookWithMFCDlg.cpp ファイルで、ボタン ハンドラー コードの末尾に次のコードを追加します。

olNs.Logoff();

手順 10: プロジェクトをコンパイルして実行する

  1. [ ビルド] メニューで、[ ソリューションのビルド] をクリックします。 ビルド エラーがないことを確認します。
  2. コードをコンパイルして実行します。 連絡先と予定を作成して保存し、新しい電子メール メッセージを作成して送信する必要があります。

追加情報

コンパイル時に競合する可能性を回避するために、3 つのメソッドの名前が変更されています。 Folder メソッドと CopyFile メソッドは警告を生成しますが、GetOrganizer メソッドはプロジェクトのコンパイルを禁止します。

_Appointment::GetOrganizer メソッドは AddressEntry を返し、名前が _Appointment::GetOrganizerAE に変更されました。 _Appointment::Organizer は同じインターフェイス上のプロパティであり、重複によって競合が発生するため、このメソッドの名前を変更しました。 この場合、MIDL は_Appointment::Organizer プロパティのヘルパー関数を作成します。このプロパティは、_Appointment::GetOrganizer と呼ばれます。 そのため、ヘルパー関数は、さまざまな型 (たとえば、BSTR* と AddressEntry*) を返すオーバーロードされたメソッドになります。 戻り値の型によってのみ異なるオーバーロードされたメソッドは許可されません。