WSH For Office2000
Written 10/6/99
Outlook 1
ここでは、しばらく Outlook2000 の操作方法について述べていきます。
Application オブジェクト
Outlook を操作するためには、アプリ全体を表す Application オブジェクトを得なければなりません。
    var myOlApp = WScript.CreateObject("Outlook.Application");
 
NameSpace オブジェクト
Outlook のオブジェクトはだいたい NameSpace オブジェクトを頂点に階層化されているので、 このオブジェクトを得なければなりません。 これは Application オブジェクトの GetNameSpace メソッドにより得られます。
    var myNameSpace = myOlApp.GetNameSpace("MAPI");
 
受信メール
まず受信メールを操作してみましょう。
それには「受信トレイ」フォルダーを得て、 そこから個々のメールを得ます。
受信トレイフォルダーは次のように得ます。
    var folder = myNameSpace.GetDefaultFolder(olFolderInbox);
 
フォルダ内のアイテムのコレクションとアイテムの数とアイテムは、
    folder.Items                //コレクション
    folder.Items.Count          //アイテムの数
    folder.Items.Count(index)   //アイテムの数
 
で得られます。 ここでのアイテムは要するにメールです。 index は1からの値を取ります。
ここで、受信トレイにあるメールのタイトルの一覧を表示してみましょう。
    scripts/title.ws (ファイルに保存にしてください)
    ------------------------------------------------------------
    <JOB ID="title">
     <REFERENCE GUID="{00062FFF-0000-0000-C000-000000000046}"/>
    
     <SCRIPT LANGUAGE="JavaScript">
      var myOlApp = WScript.CreateObject("Outlook.Application");
      var myNameSpace = myOlApp.GetNameSpace("MAPI");
      //受信トレイフォルダ
      var folder = myNameSpace.GetDefaultFolder(olFolderInbox);
      //受信トレイの中のメールの数
      var nitems = folder.Items.Count;
      for(var i = 1; i <= nitems; i++)
        WScript.Echo(folder.Items(i).Subject);   //タイトルを表示
      //後始末はいらないと思うんだけど
      WScript.DisconnectObject(myOlApp);
      myOlApp = null;
     </SCRIPT>
    </JOB>
 
Subject プロパティでメールのタイトルが得られます。
2行目はタイプライブラリへの参照設定で、 これにより Outlook の定数が使えるようになります。 ここでは、olFolderInbox を使っています。

その他にも次のような重要なプロパティがあります。

プロパティ説明
ReceivedTime受信日時
SenderName送信者名
Body本文
もちろん他にも数多くのプロパティがあります。 それらはヘルプの MailItem を調べてください。

ところが、このプロパティの中に送信者のアドレスは無いようです。 あと、受信日時もうまく拾えないことがあります。
こんなときかなり効率の悪いアドレスの拾い方があります。 それは SaveAs メソッドを使ってテキストに落とし、 それを読むという方法です。
テキストに落とすには、

    MailItem.SaveAs(filename, olTXT);
 
とします。 こうして作成されたテキストは例外はありますがだいたい次のようになります。
    差出人: tomoyo [tomoyo@daidouji.ne.jp]
    送信日時: 1999年10月6日水曜日 21:30
    宛先: sakura
    件名: 幸せ絶頂ですわー!
 
アドレスを拾いたいときは、"差出人: "が現れたとき、[ ]の中を拾います。
次のスクリプトは「受信トレイ」の中のすべてのメールの差出人のアドレスを 出力します。
    scripts/address.ws (ファイルに保存にしてください)
    --------------------------------------------------------------
    <JOB ID="mail">
     <REFERENCE GUID="{00062FFF-0000-0000-C000-000000000046}"/>
    
     <SCRIPT LANGUAGE="JavaScript">
      var myOlApp = WScript.CreateObject("Outlook.Application");
      var myNameSpace = myOlApp.GetNameSpace("MAPI");
      var folder = myNameSpace.GetDefaultFolder(olFolderInbox);
      var nitems = folder.Items.Count
      var tempfile = "c:\\windows\\temp\\mailaddress.txt";
      var fs = WScript.CreateObject("Scripting.FileSystemObject");
      
      for(var i = 1; i <= nitems; i++)
        WScript.Echo(GetAddress(folder.Items(i)));
      
      WScript.DisconnectObject(myOlApp);
      myOlApp = null;
      
      function GetAddress(mail) {
        var str, stream;
        //テンポラリファイルに落とす
        mail.SaveAs(tempfile, olTXT);
        //落としたファイルを読む
        stream = fs.OpenTextFile(tempfile);
        while(!stream.AtEndOfStream) {
            str = stream.ReadLine();
            if(/差出人: /.test(str)) {  //差出人: に引っ掛かったら
                //@を含んだ[]の中をアドレスとみて拾う
                if(/\[([^\[]+@[^\]]+)\]/.exec(str)) {
                    stream.Close();
                    //正規表現の()の中にマッチした部分を返す
                    return RegExp.$1;
                }
                //マッチしなかったら差出人名が無くて
                //裸でアドレスが書かれている可能性が高い
                else if(/\s(\S+)$/.exec(str)) {
                    stream.Close();
                    return RegExp.$1;
                }
            }
        }
        stream.Close();
        return null;
      }
     </SCRIPT>
    </JOB>
 
Back