coreserverのメールをoutlookで受信する際の注意

メールサーバをcoreserverにおいた場合、アカウントに一般的な接続設定を済ませただけでは、ルートのメールが表示されません。これは、ルートと言っても実際にルートではなく、「INBOX」というフォルダに格納されているためです。よって、outlookでcoreserverに接続する場合は、サーバ設定のルートフォルダに「INBOX」を入力する必要があります。

なお、thunderbirdでは自動的に設定されるので、この作業は不要です。これでthunderbirdから乗り換えられますね。

coreserverに限らず、メールサーバのシステムによってはルートに「INBOX」の指定が必要なようです。必要ではないサーバーがあるのかといえば、それは知りません。

ちなみに、imapとsmtpの設定ですが。

imapは、サーバ名:xxx@coreserver.jp、ポート:993、暗号化:SSL/TLS。

smtpは、サーバ名:xxx@coreserver.jp、ポート:587、暗号化STARTTLS。

VB.NETでMicrosoft Outlookのメールを読む

はじめに
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の受信トレイにメールがあるのを確認してから、実行してください。
outlook1
問題なく表示できたでしょうか?
メールの本文を読む前に
次は、メールのタイトルを読むことができたので、リストを選択すると内容が表示されるようにします。
メールの内容を読むためには、そのメールのインデックス番号が必要です。
そこで、メールタイトルをキーに、メール番号を値としたハッシュを用意します。
    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から始まります。
outlook2
これで、選択したメールの内容を表示することができました。
メールの内容は、text形式かhtml形式かの判断は行っていません。
html形式では、ソースが表示されますが、一部は「?」という文字に化けます。
おまけ
myitem.Subject 件名
myitem.SenderName 送信者名
myitem.SentOnBehalfOfName 送信者名(SenderNameとどう違う?)
myitem.Body 内容
myitem.ReceivedTime 受信時間
myitem.To 送信先

更新履歴

2007-07-21
公開