2アカウントの受信ログエクスポートマクロNo.47362
すみこ さん 15/01/16 17:19
 
以前以下のマクロを作成していただきました。

「受信フォルダ(受信ログ)をエクスポートし、
最後に受信フォルダ内を削除する」という内容です。

このマクロでは、マクロを実行する際アクティブに選択されているアカウント?の
受信フォルダ(受信ログ)の中身をエクスポートしていると思うのですが、
今回はアカウントが2つある場合で、
エクスポート先を1つにまとめる方法はございますでしょうか。

===作成していただいたマクロ===

// 1アカウント丸ごとエクスポートマクロ

loaddll "TKInfo.dll";

if ( !result )  endmacro;
if ( !dllfunc( "IsTuruKame" ) )  endmacro;
 
// エクスポート先のベースディレクトリ
// 適宜修正してください
$base_dir = "C:\\temp\\mail\\";

#n = dllfunc( "SelectFolder", "", "" );
$currentAccount = dllfuncstr( "CurrentAccount" ); // アカウント名を記録しておく

while (1) {
 #n = dllfunc( "ExpandFolder", 1 );
 #n = dllfunc("NextFolder");
 if (#n == 0) {
   goto DeleteAll
        endmacro;
 }
 
 $account = dllfuncstr( "CurrentAccount" );
 if ($account != $currentAccount) {
   goto DeleteAll

        endmacro;
 }
 
 $folder = dllfuncstr( "CurrentFolder" );
 if ($folder == "受信" || $folder == "未送信" || $folder == "草稿" || $folde
r == "ゴミ箱")  continue;  // エクスポート対象外
 
 call ExportAllMails;
}

endmacro;

// 渡されたパスのディレクトリを作成するサブルーチン
// MakeSureDirectoryPathExists関数と同じ
CreateDirectory:
 $$dir = $$1;
 $$mkdir = "";
 
 ##pos = strstr($$dir, "\\");
 while (##pos >= 0) {
  if (strlen($$mkdir) > 0)  $$mkdir = $$mkdir + "\\";
  $$mkdir = $$mkdir + leftstr($$dir, ##pos);
  $$dir = rightstr($$dir, strlen($$dir) - ##pos - 1);
  ##n = dllfunc("Bypass_CreateDirectory", $$mkdir);
 
  ##pos = strstr($$dir, "\\");
 }
 
 if (strlen($$dir) > 0 ) {
  if (strlen($$mkdir) > 0)  $$mkdir = $$mkdir + "\\";
  $$mkdir = $$mkdir + $$dir;
  ##n = dllfunc("Bypass_CreateDirectory", $$mkdir);
 }
 
 return;

// 現在選択されているフォルダの、全てのメールをエクスポートするサブルーチン
ExportAllMails:
 ##n = dllfunc( "GetFolderMailCount", "", "", "all");
 if (##n == 0)  return;

 ##n = dllfunc("SetViewArea", 0);
 ##n = sendmessage( hidemaruhandle(0), 0x0111, 40008, 0);
 $$folder = dllfuncstr( "CurrentFolder" );
 call CreateDirectory $base_dir + $$folder;
 ##n = dllfunc("Export", $base_dir + $$folder, "eml-number", "encode-attach",
 "orikaeshi");

 return;

DeleteAll:
    #n = dllfunc("SelectFolder", $currentAccount, "" );
    if( #n == 0 ) endmacro;

    while (1) {
        #n = dllfunc( "ExpandFolder", 1 );
        #n = dllfunc("NextFolder");
        if (#n == 0) {
            break;
        }
        $account = dllfuncstr( "CurrentAccount" );  
        if ($account != $currentAccount) {
            break;
        }
        $folder = dllfuncstr( "CurrentFolder" );
        if ($folder == "未送信" || $folder == "草稿")  continue;
        #n = dllfunc("SetViewArea", 0);
        #n = dllfunc("SelectAllMail");
        #n = dllfunc("Delete", 1);
    }
    #n = dllfunc( "SelectFolder", $currentAccount, "" );
        endmacro;

[ ]
RE:47362 2アカウントの受信ログエクスポNo.47364
秀まるお2 さん 15/01/16 23:42
 
 そのマクロの名前が仮に「export.mac」だとしたら、例えば「export2.mac」
として、以下のようなマクロを作ればいいかと思います。

 存在してるアカウント全部を対象とするなら、例えば

    loaddll "tkinfo.dll";
    #n = dllfunc("SetJapaneseCodePageMode", 1);
    #i = 0;
    while(1) {
        $account = dllfuncstr("Account", #i);
        if( $account == "" ) {
            break;
        }
        #n = dllfunc("SelectFolder", $account, "受信");
        execmacro "export.mac";
        #i = #i + 1;
    }

 みたいになります。

 複数あるうち2つだけ、例えば"A"と"B"だけなら、

    loaddll "tkinfo.dll";
    #n = dllfunc("SetJapaneseCodePageMode", 1);
    #n = dllfunc("SelectFolder", "A", "受信");
    execmacro "export.mac";
    #n = dllfunc("SelectFolder", "B", "受信");
    execmacro "export.mac";

 でいいと思います。

 1つのマクロにしたい場合は、元々あるマクロの内容をサブルーチン化する必
要があります。直すの面倒なので、上記の作戦の方が簡単でいいと思います。

[ ]