ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

Windowsでメールを受信(メールボックスにアクセス)する方法

メールを送信する方法は、結構解説があるんですが、メールを受信する方法は、あまり解説が無い気がします。
という訳で、簡単な解説をば。


後、先に ごめんなさい を言っておきます。

  • メールを受信する方法というより、正確には、メールボックスにアクセスする方法です。
    まぁ、受信できるから同じですが。
  • 恐らく、Windowsのメールサーバが動いている環境(Exchangeとか)でないと使えない気がします。


ちなみに、この手段を調べたのは、実は、
Outlookを常時立ち上げておくと、メモリを喰われて何となく嫌」
「つぅか、Outlookを立ち上げておくと、仕事に集中できん」
「何か、アプリ作ってみたかった」
という裏事情があった為でもあります。わはは。


まぁ、百聞は一見に如かずという事で、最初にVBScriptなコードを示します。

Set oSes = CreateObject("MAPI.Session") 
WScript.Echo typename(oSes)
oSes.Logon

Set oFdr = oSes.Inbox
WScript.Echo typename(oFdr)
WScript.Echo oFdr.Name

Set oMsgS = oFdr.Messages
WScript.Echo typename(oMsgS)
WScript.Echo oMsgS.Count

For i = 1 to oMsgS.Count
  Set o = oMsgS.Item(i)
  WScript.Echo "-------------------------------"
  WScript.Echo "count:", i
  WScript.Echo typename(o)
  WScript.Echo "subject:", o.Subject
  WScript.Echo "type:", o.Type
  WScript.Echo "text:", o.Text
  WScript.Echo "text2:[", Len(o.Text), "]"
  WScript.Echo "size:", o.Size
  WScript.Echo "unread:", o.Unread
Next


で、解説です。

メールにアクセスするには、"MAPI.Session"を使う

はい、これジューヨーです。


送信が"CDO.Message"だったから、受信は"CDO.Session"かな?と思うじゃないですか。(私だけかな?)
実は、"MAPI.Session"です。

メール送信と受信に使うActiveX DLLは違う

これも気付きにくいです。
(MSDN Libraryの解説を じーっと見て、ようやく気付きました)

  • "CDO.Message"でメール送信するのは、"cdosys.dll"でOK。
  • "MAPI.Session"でメール受信するのは、"cdo.dll"でOK。


だから、「上のスクリプト、おいらの環境じゃ動かないよ!」という場合、大抵「それは、あなたが cdo.dll をインスコしてないから」というのが答えです。


ちなみに、cdo.dllですが、普通にOutlookを入れただけでは動きません。(サーバー環境だと、Exchangeを突っ込むので一緒に入るらしい)
なもんで、Outlook辺りのCD-ROMから、検索し、Windowsのシステムディレクトリにコピーして、"regsvr32"して下さい。
それで入ります。

受信はInboxプロパティにアクセスする

"MAPI.Session"で取得したオブジェクトは、Sessionオブジェクトです。
ここから、Inboxプロパティにアクセスすると、Outlookで言う 受信トレイに相当します。
(送信トレイは、Outboxプロパティみたい)


任意のメールフォルダにもアクセスできるようなので、そこいら辺は、MSDN Libraryを読んでみてください。はい。

まとめ

余談ですが、Outlookを入れているなら、OutlookをCreateObjectして操作するというのも手です。
しかし、メモリ喰いですからね。
後、DLL一本入れるだけで動くようになるというも魅力的です。
(解説読んでいると、Web版のOutlookは、この機能を利用しているように読める)