概要
この記事では、Microsoft Outlook 2010を自動化し、Microsoft Foundation Classes (MFC) と共に C++ を使用する Microsoft Visual Studio 2010 アプリケーションを作成する方法の詳細な例を示します。
詳細情報
この記事では、Outlook を自動化して次の操作を行う Visual Studio 2010 プロジェクトを作成する方法について説明します。
- 連絡先を作成して保存する
- 予定を作成して保存する
- メール メッセージを作成して送信する
次のすべてのセクションを実装できますが、これらのセクションの 1 つまたは 2 つを省略して、1 つまたは 2 つの種類のアイテムのみを作成することもできます。
注:
次のコード例はすべて、32 ビット オペレーティング システム用のファイル パスを前提としています。 特定のオペレーティング システムと構成に対して有効になるように、パスに必要な変更を加えるようにしてください。 また、このコードは架空の情報を持つ Outlook アイテムを作成します。これには架空の電子メール アドレスが含まれます。 テスト用の有効な電子メール アドレスのいずれかに電子メール アドレスを変更してください。
手順 1: プロジェクトを作成する
- Visual Studio 2010 を起動します。
- [ファイル] メニューの [新規作成] を選択し、[プロジェクト] をクリックします。 インストールされているテンプレートの一覧で C++ を展開し、 MFC を選択し、 MFC アプリケーション プロジェクトを選択します。 プロジェクトに AutomateOutlookWithMFC という名前を付けて、[ OK] をクリックします。
- MFC アプリケーション ウィザードが起動したら、[ 次へ] をクリックします。
- MFC アプリケーション ウィザードの設定は、[アプリケーションの 種類] セクションを除く既定値のままにします。 このセクションでは、[ ダイアログ ベース] を選択します。
- [完了] をクリックして、MFC アプリケーション ウィザードを完了します。
手順 2: Microsoft Office 14.0 オブジェクト ライブラリを含める
ソリューション エクスプローラー ウィンドウで、stdafx.h ファイルを開きます。
ファイルの最後に、次の行を追加します。 パスが特定のオペレーティング システムと構成に適していることを確認します。
#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 オブジェクトを作成する
ソリューション エクスプローラー ウィンドウで AutomateOutlookWithMFCDlg.cpp ファイルを選択します。
[ プロジェクト ] メニューをクリックし、[ クラス ウィザード] をクリックします。
[ クラスの追加 ] ボタンの下向き矢印をクリックし、 TypeLib から MFC クラスをクリックします。
[ 使用可能なタイプ ライブラリ] で、 Microsoft Outlook 14.0 オブジェクト ライブラリを選択します。
[インターフェイス] ボックス の 一覧で、[ _Application] をクリックします。
右方向ボタンをクリックして、生成されたクラスの一覧に_Applicationを追加します。
[完了] をクリックしてクラスを生成し、[OK] をクリックしてクラス ウィザードを閉じます。
新しく作成したヘッダー ファイル CApplication.h を開きます。 次の行を見つけます。
#import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
手順 8 で見つかった行を次のように置き換えます。
#import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
AutomateOutlookWithMFCDlg.cpp ファイルを開き、#include ステートメントの一覧に次を追加します。
#include "CApplication.h"
手順 4: プロジェクトにボタンを追加する
ダイアログ ボックスに切り替えます。
コントロール ツールボックスを使用して、ダイアログ ボックスにボタンを追加します。
ボタンのハンドラーを追加するには、ボタンをダブルクリックし、次の行を見つけます。
// TODO: Add your control notification handler code here
手順 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 の名前空間オブジェクトを作成する
[ プロジェクト] メニューの [ クラス ウィザード] をクリックします。
[ クラスの追加] ボタンの下矢印をクリックし、[ MFC クラス From Typelib] をクリックします。
[ 使用可能なタイプ ライブラリ] で、 Microsoft Outlook 14.0 オブジェクト ライブラリを選択します。
[インターフェイス] ボックス の 一覧で、[ _Namespace] をクリックします。
右方向ボタンをクリックして、生成されたクラスの一覧に_Namespaceを追加します。
[完了] をクリックしてクラスを生成し、[OK] をクリックしてクラス ウィザードを閉じます。
新しく作成したヘッダー ファイル CNamespace.h を開きます。 次の行を見つけます。
#import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
手順 7 で見つかった行を次のように置き換えます。
#import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
AutomateOutlookWithMFCDlg.cpp ファイルに切り替え、#includeステートメントの一覧に次を追加します。
#include "CNamespace.h"
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 を作成して保存する
[ プロジェクト] メニューの [ クラス ウィザード] をクリックします。
[ クラスの追加] ボタンの下矢印をクリックし、[ MFC クラス From Typelib] をクリックします。
[ 使用可能なタイプ ライブラリ] で、 Microsoft Outlook 14.0 オブジェクト ライブラリを選択します。
[インターフェイス] ボックス の 一覧で、[ _ContactItem] をクリックします。
右方向ボタンをクリックして、生成されたクラスの一覧に_ContactItemを追加します。
[完了] をクリックしてクラスを生成し、[OK] をクリックしてクラス ウィザードを閉じます。
新しく作成したヘッダー ファイル CContactItem.h を開きます。 次の行を見つけます。
#import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
手順 7 で見つかった行を次のように置き換えます。
#import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
AutomateOutlookWithMFCDlg.cpp ファイルに切り替えてから、#include ステートメントの一覧に次を追加します。
#include "CContactItem.h"
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 を作成して保存する
[ プロジェクト] メニューの [ クラス ウィザード] をクリックします。
[ クラスの追加] ボタンの下矢印をクリックし、[ MFC クラス From Typelib] をクリックします。
[ 使用可能なタイプ ライブラリ] で、 Microsoft Outlook 14.0 オブジェクト ライブラリを選択します。
[インターフェイス] ボックス の 一覧で、[ _AppointmentItem] をクリックします。
右方向ボタンをクリックして、生成されたクラスの一覧に_AppointmentItemを追加します。
[完了] をクリックしてクラスを生成し、[OK] をクリックしてクラス ウィザードを閉じます。
新しく作成したヘッダー ファイル CAppointmentItem.h を開きます。 次の行を見つけます。
#import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
手順 7 で見つかった行を次のように置き換えます。
#import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
AutomateOutlookWithMFCDlg.cpp ファイルに切り替え、#includeステートメントの一覧に次を追加します。
#include "CAppointmentItem.h"
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 を作成して保存する
[ プロジェクト] メニューの [ クラス ウィザード] をクリックします。
[ クラスの追加] ボタンの下矢印をクリックし、[ MFC クラス From Typelib] をクリックします。
[ 使用可能なタイプ ライブラリ] で、 Microsoft Outlook 14.0 オブジェクト ライブラリを選択します。
[インターフェイス] ボックス の 一覧で、[ _MailItem] をクリックします。
右方向ボタンをクリックして、生成されたクラスの一覧に_MailItemを追加します。
[完了] をクリックしてクラスを生成し、[OK] をクリックしてクラス ウィザードを閉じます。
新しく作成したヘッダー ファイル CMailItem.h を開きます。 次の行を見つけます。
#import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
手順 7 で見つかった行を次のように置き換えます。
#import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
AutomateOutlookWithMFCDlg.cpp ファイルに切り替え、#includeステートメントの一覧に次を追加します。
#include "CMailItem.h"
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: プロジェクトをコンパイルして実行する
- [ ビルド] メニューで、[ ソリューションのビルド] をクリックします。 ビルド エラーがないことを確認します。
- コードをコンパイルして実行します。 連絡先と予定を作成して保存し、新しい電子メール メッセージを作成して送信する必要があります。
追加情報
コンパイル時に競合する可能性を回避するために、3 つのメソッドの名前が変更されています。 Folder メソッドと CopyFile メソッドは警告を生成しますが、GetOrganizer メソッドはプロジェクトのコンパイルを禁止します。
_Appointment::GetOrganizer メソッドは AddressEntry を返し、名前が _Appointment::GetOrganizerAE に変更されました。 _Appointment::Organizer は同じインターフェイス上のプロパティであり、重複によって競合が発生するため、このメソッドの名前を変更しました。 この場合、MIDL は_Appointment::Organizer プロパティのヘルパー関数を作成します。このプロパティは、_Appointment::GetOrganizer と呼ばれます。 そのため、ヘルパー関数は、さまざまな型 (たとえば、BSTR* と AddressEntry*) を返すオーバーロードされたメソッドになります。 戻り値の型によってのみ異なるオーバーロードされたメソッドは許可されません。