特定のメール(Outlook)を自動的に削除するスクリプト


社内で「特定人物向けのメールを全員に送信しちゃった! 何とかして!」と言われたときに作ったスクリプト。グループポリシーを使ってPCにログオンしたときに起動するように設定することを想定している。Outlookを自動的に起動して受信メールをチェックし、条件に合うもの(今回は特定の語句を題名に含むもの)を削除する。

// Outlookのインスタンスを得る
var app = WScript.CreateObject( "Outlook.Application" );
var ns = app.GetNamespace( "MAPI" );
// 「受信トレイ」フォルダ
var inbox = ns.GetDefaultFolder(6);
// 「削除済みアイテム」フォルダ
var delbox = ns.GetDefaultFolder(3);
// 削除するメールの題名
var subjects = new Array(
    // ここに消したいメールの題名を列挙する
    "人事がどうとか"
    ,"給与がどうとか"
);
// 削除したメールの件数
var deleted = 0;

// 繰り返し開始
var i = inbox.Items.Count;
while ( i > 0 ) {
    // メールの題名が~~だったら以下を実行
    var mail = inbox.Items( i );
    // メールが該当するかどうかのフラグ
    var flag = 0;
    // メールの題名がどれか一つに合致するなら
    // フラグをONにする
    var j = subjects.length;
    while ( j-- > 0 ) {
        //WScript.Echo( subjects[ j ] );
        if ( mail.Subject == subjects[ j ] ) {
            flag++;
            break;
        }
    }
    // フラグがONなら
    if ( flag ) {
        /*
        WScript.Echo( mail.Subject + "\n"
            + mail.ReceivedTime + "\n"
            + mail.Attachments.Count.toString() );
        */
        // そのメールに添付ファイルがあるなら、
        if ( mail.Attachments.Count ) {
            // 全部削除して、
            var k = mail.Attachments.Count;
            while ( k > 0 ) {
                //WScript.Echo( mail.Attachments.Item( k ).FileName );
                mail.Attachments.Item( k ).Delete();
                k--;
            }
            // メール自体も削除
            mail.Move( delbox );
        }
        // 削除したら一つ増やす
        deleted++;
    }
    // 全部削除したら終了
    if ( deleted == subjects.length ) {
        break;
    } else {
        i--;
    }
}

コメントを残す