[ 新規に投稿する ]

インポートメールのFrom等の編集No.00617
こさく さん 23/03/17 15:26 [ コメントを投稿する ]
  お世話になっております。こさくです。
このところ大変お騒がせしております。

outlookからエクスポートしてインポートした結果、Outlookのアドレス帳に登録
されているメアドがFrom:やTo:Cc:に入っているとOutlook独自の内容になってし
まい見にくくて仕方ありません。
以下の例は、行頭から行末まで中略以外はそのままのコピペです。(名前は仮)
中略の中に実際のメアドは含まれていません。

例1From: <> の中は130バイトほど
佐藤 太郎 </O=EXCHANGELABS/OU=EXCHANG 中略 -44>
例2 To:Cc: <> の中は150バイトほど
"山田 次郎\" <\"/o=ExchangeLabs/ou=Ex 中略 -28" <>

ここで < から > を削除してしまえば日本語氏名のみが残って少しでも見やすく
なると考えました。そして以下のマクロを作成したのですが、検索と削除が判り
ません。
検索と削除を教えていただきたいです。
以上よろしくお願いします。

loaddll "tkinfo.dll";
#n = dllfunc( "SelectFolder", "テストアカウント", "受信" );
#n = dllfunc("MailCountAll");

#m = 0;
while ( #m < #n ) {
  #sel = dllfunc("SetMailIndex", #m );  // m番目メール選択
  #open = dllfunc( "OpenMail" );        // メールを開く
  #edit = dllfunc( "EnableEdit" );      // 編集許可

  //先ずFrom:ヘッダから"</O=EXCHANGELABS"を検索
  #find = dllfunc("SetFindPack", "(</O=EXCHANGELABS, target=from), 
inmail=0" );
  if ( #find != 0 ) {
    // 見つけたら "<"から">"を削除
  }

  // 次にTo:、Cc:ヘッダから"<\"/o=ExchangeLabs"を検索
  while ( 1 ) {
    #find = dllfunc("SetFindPack", "(<\\\"/o=ExchangeLabs, target=to), 
inmail=0" );
    if ( #find != 0 ) {
      // 見つけたら "<"から">"を削除
    } else {
      // もう無いからおしまい
      break;
    }
  }
  save;
  #m = #m + 1;
}
freedll;
endmacro;
[ ]
RE:00617 インポートメールのFrom等の編集No.00618
秀まるお さん 23/03/17 17:20 [ コメントを投稿する ]
   とりあえず正規表現の置換で、

検索:   \s*<.*?ExchangeLabs.*?>$
置換: (空っぽ)

 で置換してうまくいくと思います。マクロ的には

    replaceallfast @"\s*<.*?ExchangeLabs.*?>$", "", regular, nocasesense;

 でいいと思います。メール本文も含めて全部置換かけてもいいんじゃないかと思います。

 あとは、EnableEditして全置換してsaveするって作戦でどうでしょうか。

 ヘッダの中だけ対象にするとしたら、

    gofiletop;
    beginsel;
    moveto 0, -9999;
    replaceallfast @"\s*<.*?ExchangeLabs.*?>$", "", regular, nocasesense, inselect;

 になるかと思います。
[ ]
RE:00618 インポートメールのFrom等の編集No.00619
こさく さん 23/03/20 10:23 [ コメントを投稿する ]
  どうもありがとうございます。こさくです。

>    gofiletop;
>    beginsel;
>    moveto 0, -9999;
>    replaceallfast @"\s*<.*?ExchangeLabs.*?>$", "", regular, nocasesense, 
>inselect;
こちらでいこうと思います。インポートしたメールが非常に見やすくなることが
確認出来ました。
ところが受信フォルダにメールが1通の時は上手くいくのですが複数あると上手
く動作しません。
文末のマクロが全文となります。
このままだと#mをインクリメントしてループしたときに以下のエラーダイアログ
が出ます。

TKINFODLL:エディタ上で実行できない(以下略)
関数コード=33

この時エディタは開いたままです。
そこで AlterSave の後にexit文を入れるとエラーは無くなりますが#mのインク
リメントをせずにマクロが終了します。
AlterSave をsave文に変えてみましたが結果は変わりませんでした。

何処を見直せば良いでしょうか?

以上よろしくお願いします。

---------- マクロ全文 ----------
loaddll "tkinfo.dll";
$Account= "テストアカウント";
#n = dllfunc( "SelectFolder", $Account, "受信" );
#n = dllfunc("MailCountAll");
#m = 0;
while ( #m < #n ) {
  #sel = dllfunc("SetMailIndex", #m );
  #open = dllfunc( "OpenMail" );
  #edit = dllfunc( "EnableEdit" );
  message "EnableEdit:"+str(#edit);
  gofiletop;
  beginsel;
  moveto 0, -9999;
  replaceallfast @"\s*<.*?ExchangeLabs.*?>$", "", regular, nocasesense, 
inselect;
  #save = dllfunc("AlterSave");
  #m = #m + 1;
}
freedll;
endmacro;
[ ]
RE:00619 インポートメールのFrom等の編集No.00620
秀まるお さん 23/03/20 14:59 [ コメントを投稿する ]
   マクロですが、OpenMailして起動したエディタを

        #editor = hidemaruhandle(0);
        #n = dllfunc("SetMainWndTop");
        #n = closehidemaruforced #editor;

 みたいにして閉じないといけないんですが、今ちょっとテストしたら、なぜかclosehidemaruforcedが文法エラーになりました。なんだか秀丸メールがおかしいような気がします。???

 見直してまたお返事させていただきます。
[ ]
RE:00620 インポートメールのFrom等の編集No.00621
秀まるお さん 23/03/20 15:05 [ コメントを投稿する ]
   なぜかclosehidemaruforcedがエラーになったんですが、今テストしたらうまく動きました。???

 メール1通でテストして動作確認したマクロは以下のようになります。

    #open = dllfunc( "OpenMail" );
    #edit = dllfunc( "EnableEdit" );
    message "EnableEdit:"+str(#edit);
    gofiletop;
    beginsel;
    moveto 0, -9999;
    replaceallfast @"\s*<.*?ExchangeLabs.*?>$", "", regular, nocasesense, inselect;
    if( updated ) {
        #save = dllfunc("AlterSave");
    }
    #m = #m + 1;
    #handle = hidemaruhandle(0);
    #n = dllfunc("SetMainWndTop");
    closehidemaruforced #handle;

 これをループの中に入れれば大丈夫だと思います。
[ ]
RE:00621 インポートメールのFrom等の編集No.00622
こさく さん 23/03/20 16:18 [ コメントを投稿する ]
  何度もどうもありがとうございます。こさくです。

やってみました。
エラーは出なくなり、1通は希望通りの内容に書き換えられましたがそれだけで
した。
OpenMail の前にメール選択が無かったので以下の様にしましたが結果は変わら
ずです。
ループとSetMailIndexをコメントにすると選択している1通は書き換えられます。
メール選択の仕方が間違っているでしょうか?

以上よろしくお願いします。


#m = 0;
while ( #m < #n ) {
    #sel = dllfunc("SetMailIndex", #m );// m番目メール選択
    #open = dllfunc( "OpenMail" );
  :
  中略
    #m = #m + 1;
    #handle = hidemaruhandle(0);
    #n = dllfunc("SetMainWndTop");
    closehidemaruforced #handle;
}
[ ]
RE:00622 インポートメールのFrom等の編集No.00623
秀まるお さん 23/03/20 17:35 [ コメントを投稿する ]
   僕のクセで、ダミーの変数を「#n」としてたのがダメだったようです。

    #n = dllfunc("SetMainWndTop");

 を、例えば

    #dummy = dllfunc("SetMainWndTop");

 みたいにしないとダメでした。(#nをメール数に使ってたようで・・・)

 うまく動いたマクロ例です。

loaddll "tkinfo.dll";
//$Account= "テストアカウント";
//#n = dllfunc( "SelectFolder", $Account, "受信" );
#n = dllfunc("MailCountAll");
#m = 0;
while ( #m < #n ) {
    #sel = dllfunc("SetMailIndex", #m );// m番目メール選択
    #open = dllfunc( "OpenMail" );
    #open = dllfunc( "EnableEdit" );
    gofiletop;
    beginsel;
    moveto 0, -9999;
    replaceallfast @"\s*<.*?ExchangeLabs.*?>$", "", regular, nocasesense, inselect;
    if( updated ) {
        #dummy = dllfunc("AlterSave");
    }
    #m = #m + 1;
    #handle = hidemaruhandle(0);
    #dummy = dllfunc("SetMainWndTop");
    closehidemaruforced #handle;
}
[ ]
RE:00622 インポートメールのFrom等の編集No.00624
こさく さん 23/03/20 17:37 [ コメントを投稿する ]
  こさくです。

先ほどテストしたあと新たなメールでやってみました。
From:は正常
To:も正常(一人だけの宛先)
Cc:は二人の宛先で先頭の宛先は想定通りの結果でしたが二人目の宛先は全て削
除されてしまいました。
結果は以下の通りです。

From:     名前 一人
To:       "山田 太郎\"
Cc:       "佐藤 次郎\"

インポートされたメールの名前に関係する個所を書き換えたヘッダが以下です。
アドバイスいただきたくお願いいたします。

From:     名前 一人 </O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP 
(FYDIBOHF23SPDLT)/CN=RECIPIENTS/CN=abcdefghijklmnopqrstuvwxyz639548-
29DEE968-0F>
To:       "山田 太郎\" <\"/o=ExchangeLabs/ou=Exchange Administrative 
Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=
qwertyuiopasdfghjklzxcvbnmdc03f0-58f36939-c1" <>
Cc:       "佐藤 次郎\" <\"/o=ExchangeLabs/ou=Exchange Administrative 
Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=
poiuytrewqlkjhgfdsamnbc2a0da8f21-2042f5d7-a7" <>, "三人目 三郎 <\"/o=
ExchangeLabs/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=
Recipients/cn=mnbvcxzasdfghjklpoiuytreqw2f8f65-ced02e02-d8" <>
[ ]
RE:00624 インポートメールのFrom等の編集No.00625
秀まるお さん 23/03/20 18:35 [ コメントを投稿する ]
   置換の正規表現パターンを、

    \s*<[^,]*?ExchangeLabs[^,]*?>(?=$|,)

 にすればコンマ区切りになってる中身も置換できると思います。今テストしたらこれでうまくいきました。
[ ]
RE:00625 インポートメールのFrom等の編集No.00626
こさく さん 23/03/22 08:53 [ コメントを投稿する ]
  こさくです。

どうもありがとうございました。
完全に希望する動作のマクロが完成しました。
#n のところなど自分で良く確認すればすぐ判ることなのにお手数お掛けしまし
た。

どうもありがとうございます。重ね重ねお礼申し上げます。
[ ]

[ 新規に投稿する ]