SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

C#.NETによるMicrosoft Outlookの統合

パート1:OutlookをWinFormsアプリケーションから操作する

ダウンロード サンプルソース (13.0 KB)

簡単なアプリケーション(Outlookの連絡先管理)の作成

 Outlookの相互運用クラスの機能を理解するために「連絡先管理」アプリケーションを作成してみましょう。このアプリケーションでは、ユーザーは連絡先を表示するOutlookフォルダを選択し、名前の上にマウスポインタを合わせて個々の連絡先の情報を調べたり、連絡先の一部のプロパティを変更したりすることができます。このサンプルはOutlookのクラスを紹介することを目的としていますが、これを参考にすれば、.NETアプリケーションから独自のやり方でOutlook(ひいてはOffice)を操作することも難しくないでしょう。

 見てすぐわかるように、このアプリケーションには空のリストボックスと[Get Contacts]ボタンがあります。

 ユーザーがこのボタンをクリックすると、Outlookスタイルのフォルダ選択ダイアログが表示され、連絡先のインポート元となるフォルダを選択することができます。Outlookの相互運用クラスはNamespaceクラスのPickFolderというメソッドを提供しており、それを使えばこの機能を1行で実現できます。しかしその前に、Outlookの機能を公開するOutlook Applicationオブジェクトを生成し、Namespaceオブジェクトを取得する必要があります。

Outlook.Application oApp = new Outlook.Application();
Outlook.NameSpace oNS    = oApp.GetNamespace("MAPI");

 "MAPI"は、OutlookでGetNamespaceメソッドを使う場合のパラメータです。次のコードとスクリーンショットは、ユーザーにOutlookフォルダを選択させる方法を示しています。

private Outlook.MAPIFolder oContactsFolder = oNS.PickFolder();

 今回の例では、インポートプロセスの対象を連絡先だけに限定するので、ユーザーの選択したフォルダに連絡先が含まれていないと、ユーザーは何の結果も受け取らないことになります。PickFolderメソッドはMAPIFolder型のオブジェクトを返します。目的のオブジェクトへの参照を取得したら、そのオブジェクトの各項目を反復処理します。その前に、項目を連絡先のみに限定しておきます。

string filter = "[MessageClass] = \"IPM.Contact\""
Outlook.Items oContactItems = oContacts.Items.Restrict(filter);

foreach (Outlook.ContactItem oContact in oContactItems)
{}

 Restrictメソッドが引数として受け取るフィルタは、項目のプロパティを参照する書式付き文字列です。[]内が検索のために照合するプロパティで、検索条件を引用符で囲みます。フィルタ文字列の作成の詳細と具体的な例については、MSDNの記事を参照してください。

 ContactItemクラスは連絡先に関する次のようなプロパティを公開しています。

  • LastName、FirstName、MiddleName、Title
  • JobTitle
  • Email1Address、Email1DisplayName、IMAddress
  • WebPage
  • BusinessTelephoneNumber、OtherTelephoneNumber、PagerNumber、MobileTelephoneNumber、BusinessFaxNumber

 ここでは本稿のサンプルで使うものだけを掲載しましたが、この他にもさまざまなプロパティがあります。Email1AddressEmail1DisplayNameIMAddressはこの中でも特別なプロパティです。これらにアクセスすると、Outlookから前述のセキュリティ警告が発せられます。他のプロパティでは警告は出ません。

 今回の例では、Email1DisplayNameを用いてフォーム上のListBoxに連絡先データを割り当てます。さらに、hoverイベント(マウスオーバー時に発生するイベント)で一部のプロパティをツールチップに表示します。

 ユーザーがいずれかの連絡先をダブルクリックすると、新しいフォームが開き、連絡先の情報を修正することができます。次のサンプルコードは、テキストボックスからの情報で連絡先を更新する方法を示しています。

oContact.FirstName     = textBoxFirst.Text;
oContact.LastName      = textBoxLast.Text;
oContact.MiddleName    = textBoxMiddle.Text;
oContact.Title         = textBoxTitle.Text;
oContact.JobTitle      = textBoxJobTitle.Text;
oContact.WebPage       = textBoxWebPage.Text;
oContact.Email1Address = textBoxEmail.Text;

oContact.Save();

 Email1Addressプロパティに書き込みを行ってもセキュリティ警告が出されないことに注意してください。Outlookのセキュリティモデルは、アプリケーションによって情報が盗み出されるのを防ぐために、プロパティへの読み取りアクセスを阻止します。プロパティに新しい値を設定しただけでは、セキュリティ警告は出されません。プロパティを設定した後、SaveメソッドでOutlook内の連絡先を更新します。

次のページ
連絡先へのメール送信

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Rachel Wireman(Rachel Wireman)

MCPD、MCTS。Windowsソリューション専門の開発者。イリノイ州オークブルックのCrowe Chizekに所属。連絡先はrwireman@crowechizek.com。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1890 2007/12/07 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー