- はじめに
- VB.NETの環境は、Microsoft Visual Basic 2005 Express Editionを利用しています。
- Microsoft OutlookではないOutlookには、対応していません。
- 準備
- 新しいプロジェクトを作成してください。
- 次に、APIの読み込みを行います。「メニューバーのプロジェクト > 参照の追加」より、COMタブを選択し、「Microsoft Outlook 9.0 Library」コンポーネントを選択します。数値の部分は、インストールしてあるMicrosoft Officeのバージョンで変化することがあります。ちなみに、Microsoft Office2000では9.0です。
- 受信トレイのメールを読む
- まずは、受信トレイのメールを読んでみたいと思います。
- 受信したメールタイトルを表示するためのリストボックス(ListBox1)を用意します。
- 受信トレイのメールを読むタイミングは、起動時に行います。つまり、Form1_Loadに記述します。
-
Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles MyBase.Load Dim myOlApp As Outlook.Application = CreateObject("Outlook.Application") Dim myNameSpace = myOlApp.GetNamespace("MAPI") Dim myFolder = myNameSpace.GetDefaultFolder(6) Dim i As Integer For i = 1 To myFolder.Items.Count Dim myitem = myFolder.Items(i) ListBox1.Items.Add(myitem.Subject) Next myFolder = Nothing myNameSpace = Nothing myOlApp = Nothing End Sub
- myNameSpace.GetDefaultFolder(6)の6が受信トレイのフォルダを指します。
- フォルダにある各メールは番号で管理されており、Itemsのインデックス番号で参照できます。
- Microsoft Outlookの受信トレイにメールがあるのを確認してから、実行してください。
- 問題なく表示できたでしょうか?
- メールの本文を読む前に
- 次は、メールのタイトルを読むことができたので、リストを選択すると内容が表示されるようにします。
- メールの内容を読むためには、そのメールのインデックス番号が必要です。
- そこで、メールタイトルをキーに、メール番号を値としたハッシュを用意します。
-
Public mail As Hashtable = New Hashtable Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles MyBase.Load Dim myOlApp As Outlook.Application = CreateObject("Outlook.Application") Dim myNameSpace = myOlApp.GetNamespace("MAPI") Dim myFolder = myNameSpace.GetDefaultFolder(6) Dim i As Integer For i = 1 To myFolder.Items.Count Dim myitem = myFolder.Items(i) ListBox1.Items.Add(myitem.Subject) mail(myitem.Subject) = i Next myFolder = Nothing myNameSpace = Nothing myOlApp = Nothing End Sub
- 変更した場所を赤く表示しています。これで、リストの値からメール番号を得られるようになりました。
- メールの本文を読む
- 内容を表示するためのテキストボックス(TextBox1)を用意します。
- TextBox1はプロパティの設定で、MultilineとScrollBarsをTrueに変更しておきます。
- 内容を表示するには、ListBox1のSelectedIndexChangedイベントを利用します。
-
Private Sub ListBox1_SelectedIndexChanged( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles ListBox1.SelectedIndexChanged Dim myOlApp As Outlook.Application = CreateObject("Outlook.Application") Dim myNameSpace = myOlApp.GetNamespace("MAPI") Dim myFolder = myNameSpace.GetDefaultFolder(6) Dim myitem = myFolder.Items(mail(ListBox1.Text)) TextBox1.Text = myitem.Body End Sub
- メール番号は1から始まります。
- これで、選択したメールの内容を表示することができました。
- メールの内容は、text形式かhtml形式かの判断は行っていません。
- html形式では、ソースが表示されますが、一部は「?」という文字に化けます。
- おまけ
- myitem.Subject 件名
- myitem.SenderName 送信者名
- myitem.SentOnBehalfOfName 送信者名(SenderNameとどう違う?)
- myitem.Body 内容
- myitem.ReceivedTime 受信時間
- myitem.To 送信先
更新履歴
- 2007-07-21
- 公開
非常に勉強になりました。
ありがとうございます。
ところで、メールのサブホルダに保存されているメールの読み方も教えて頂くと助かります。