SujectとDateと本文をエクスポートNo.30362
kiwikazuya さん 07/02/19 21:23
 
こんにちは、中国在住のkiwikazuyaです。
以前「29289 本文のみをエクスポートするには?」で、
本文のみをエクスポートのマクロの例がありましたが、
私としては、
複数メールを選択して、SujectとDateと本文をmbox形式、utf-8
でエクスポートしたいです。

このようなことをマクロでできないでしょうか?
すみませんが、マクロはよくわかりません。
よろしくお願いいたします。

[ ]
RE:30362 SujectとDateと本文をエクスポーNo.30363
kiwikazuya さん 07/02/19 21:32
 
>こんにちは、中国在住のkiwikazuyaです。
>以前「29289 本文のみをエクスポートするには?」で、
>本文のみをエクスポートのマクロの例がありましたが、
>私としては、
>複数メールを選択して、SujectとDateと本文をmbox形式、utf-8
>でエクスポートしたいです。
追加で、X-Attachも一緒につけられませんでしょうか。

[ ]
RE:30363 SujectとDateと本文をエクスポーNo.30365
秀まるお2 さん 07/02/20 09:36
 
 mbox形式でエクスポートしたファイルから余計なヘッダを削除する作戦が1つ
あります。エクスポートしたファイルを秀丸エディタで開いて、以下のマクロを
実行すればいいです。

 (replaceallfast文の所は途中で改行されてるので、そこはうまく連結させて
ください)

-----------------------マクロ始まり--------------
    gofiletop;
    searchdown "^From - .+", regular, casesense;
    if( !result ) {
        endmacro;
    }
    moveto 0, y + 1;
Loop:
    beginsel;
    searchdown "^$", regular, casesense;
    replaceallfast "^((?!(subject|date|x-attach))[a-z\\-]+):.*(|\\n[ \\t]+.*
(|\\n[ \\t]+.*(|\\n[ \\t]+.*(|\\n[ \\t]+.*))))\\n", "", nocasesense, regular,
 inselect;
    searchdown "^From - .+", regular, casesense;
    if( !result ) {
        endmacro;
    }
    moveto 0, y + 1;
    goto Loop;
-----------------------マクロ終わり--------------

 x-attach:ヘッダをそのヘッダのままエクスポートすることは出来ないので、
それはそれで問題ですけど。

 x-attach:ヘッダをそのままエクスポートするとしたら、エクスポートの処理
自体をマクロでやるしかありません。それはそれで別途考えます。

[ ]
RE:30365 SujectとDateと本文をエクスポーNo.30366
秀まるお2 さん 07/02/20 09:56
 
 マクロ2行目のsearchdown文はsearchdown2でないとダメでした。

     searchdown2 "^From - .+", regular, casesense;

 です。

[ ]
RE:30363 SujectとDateと本文をエクスポーNo.30367
秀まるお2 さん 07/02/20 09:59
 
 エクスポートの処理自体も秀丸メールでやるタイプだとこうなります。

 マクロの最後で「名前を付けて保存...」が実行されるので、そこでエンコー
ドの種類をutf-8に変更して保存すればいいと思います。


    loaddll "tkinfo.dll";
    setclipboard "";
    #n = dllfunc("SwitchHeaderView", 2);
    #n = dllfunc("LockSelection");
    while( 1 ) {
        if( dllfunc("EnumSelection", 1) == 0 ) {
            break;
        }
        moveto 0, -999;
        beginsel;
        gofileend;
        $date = dllfuncstr("CurrentHeader", "Date");
        if( $date == "" ) $date = "unknown date";
        addclipboard "From - " + $date + "\r\n";
        appendcopy;
        addclipboard "\r\n";
    }
    #n = dllfunc("UnlockSelection", 1);
    #n = dllfunc("NewMail");
    #n = dllfunc("SwitchHeaderView", 0);
    gofiletop;
    beginsel;
    gofileend;
    delete;
    paste;

    gofiletop;
    searchdown2 "^From - .+", regular, casesense;
    if( !result ) {
        goto Exit;
    }
    moveto 0, y + 1;
Loop:
    beginsel;
    searchdown "^$", regular, casesense;
    replaceallfast "^((?!(subject|date|x-attach))[a-z\\-]+):.*(|\\n[ \\t]+.*
(|\\n[ \\t]+.*(|\\n[ \\t]+.*(|\\n[ \\t]+.*))))\\n", "", nocasesense, regular,
 inselect;
    searchdown "^From - .+", regular, casesense;
    if( !result ) {
        goto Exit;
    }
    moveto 0, y + 1;
    goto Loop;

Exit:
    SAVEAS;


[ ]
RE:30367 SujectとDateと本文をエクスポーNo.30368
kiwikazuya さん 07/02/20 21:06
 
ありがとうございます。

早速試してみましたが、
From - 16 Feb 2007 00:25:13 GMT

From - 20 Feb 2007 19:30:50 +0900

しか内容がなかったです。
あれ?って感じですが、
とりあえず、任意のメールを2つ選んで、
秀まるお2様がおつくりになられたマクロを
コピペして保存して、実行したのですが、どこがおかしかったのでしょうか?


[ ]
RE:30365 SujectとDateと本文をエクスポーNo.30369
kiwikazuya さん 07/02/20 21:25
 
マクロを作成していただいてありがとうございます。
できました。
ただ、秀丸メールでutf-8でエクスポートしたテキストファイルを
秀丸エディタで開くと、utf-8で読み込めない文字がでて、
文字コードを指定しなおすダイアログが出てきてしまいます。
これは何故でしょう?

また、x-attach:についてもよろしくお願いいたします。
下のマクロでは、本文もなにもエクスポートできませんでした。
よろしくお願いいたします。

> x-attach:ヘッダをそのヘッダのままエクスポートすることは出来ないので、
>それはそれで問題ですけど。
>
> x-attach:ヘッダをそのままエクスポートするとしたら、エクスポートの処理
>自体をマクロでやるしかありません。それはそれで別途考えます。

[ ]
RE:30365 SujectとDateと本文をエクスポーNo.30371
kiwikazuya さん 07/02/20 23:41
 
マクロを使ってみて気づいたのですが、
本文中にある返信もとのヘッダも削除されてしまうのは、
ちょっと困ります。
また、改行があって置換の文法にそぐわないものは
残ってしまうのもちょっと困り者です。

すみませんが、エクスポートする際の設定で、
エクスポートしたいヘッダを指定できないでしょうか?
または、簡易ヘッダのみエクスポートすることは、
可能でしょうか?

よろしくお願いいたします。

[ ]
RE:30368 SujectとDateと本文をエクスポーNo.30372
秀まるお2 さん 07/02/21 09:54
 
 ならば、以下のマクロがとりあえず動くかどうか試してみて欲しいです。

    loaddll "tkinfo.dll";
    setclipboard "";
    #n = dllfunc("SwitchHeaderView", 2);
    #n = dllfunc("LockSelection");
    while( 1 ) {
        if( dllfunc("EnumSelection", 1) == 0 ) {
            break;
        }
        $date = dllfuncstr("CurrentHeader", "Date");
        if( $date == "" ) $date = "unknown date";
        addclipboard "From - " + $date + "\r\n";
        moveto 0, -999;
        beginsel;
        gofileend;
        if( selendy > seltopy + 1 ) {
            // OK
        } else {
            message "メール内容がありません";
            endmacro;
        }
        appendcopy;
        addclipboard "\r\n";
    }
    #n = dllfunc("UnlockSelection", 1);
    #n = dllfunc("NewMail");
    #n = dllfunc("SwitchHeaderView", 0);
    gofiletop;
    beginsel;
    gofileend;
    delete;
    paste;

 これでとりあえず、すべてのヘッダを含むメール内容のmbox形式のやつが出て
くるかどうか試してみて欲しいです。

 それでもダメなら、メールを1通だけ選択して、

    loaddll "tkinfo.dll";
    setclipboard "";
    #n = dllfunc("SwitchHeaderView", 2);
    $date = dllfuncstr("CurrentHeader", "Date");
    if( $date == "" ) $date = "unknown date";
    addclipboard "From - " + $date + "\r\n";
    moveto 0, -999;
    beginsel;
    gofileend;
    if( selendy > seltopy + 1 ) {
        // OK
    } else {
        message "メール内容がありません";
        endmacro;
    }
    appendcopy;
    addclipboard "\r\n";
    #n = dllfunc("NewMail");
    #n = dllfunc("SwitchHeaderView", 0);
    gofiletop;
    beginsel;
    gofileend;
    delete;
    paste;

 でどうでしょうか。それでもダメなら、このマクロを実行した後にどこか適当
な所に貼り付けしてみてメール内容が出てくるかどうか調べてみて欲しいです。

 それでもしうまく動作するパターンが分かったら、マクロの最後に

    gofiletop;
    moveto 0, y + 1;
Loop:
    beginsel;
    searchdown "^$", regular, casesense;
    replaceallfast "^((?!(subject|date|x-attach))[a-z\\-]+):"
     + ".*(|\\n[ \\t]+.*(|\\n[ \\t]+.*"
     + "(|\\n[ \\t]+.*(|\\n[ \\t]+.*))))\\n", ""
     , nocasesense, regular, inselect;
    searchdown "^From - .+", regular, casesense;
    if( !result ) {
        goto Exit;
    }
    moveto 0, y + 1;
    goto Loop;

Exit:
    SAVEAS;

 を付けてやれば、余計なヘッダが削除されてから「名前を付けて保存...」が
出てくるはずなんですけど。

[ ]
RE:30372 SujectとDateと本文をエクスポーNo.30373
秀まるお2 さん 07/02/21 10:04
 
 ついでに30371番発言の方にコメントさせていただきますと…

 標準機能で対応するにはちょっと要望が細かすぎると思います。他に似たよう
な機能を持ったメールソフトがあるので他のユーザー様にも有益なはずだとか、
あるいはこの機能をサポートしてくれたらウン千本買ってくれるとかって話なら
別ですけど。

 あとあと、そもそも、いったい何が目的なのかも僕には分かりません。目的を
教えていただければ、例えばそういう目的ならこういう方法の方がいいんじゃな
いかという提案なんかも出来るかもしれません。

[ ]
RE:30373 SujectとDateと本文をエクスポーNo.30374
秀まるお2 さん 07/02/21 10:14
 
 もう1ついい方法がありました。こっちの方がいいです。

 マクロとしては、

    loaddll "tkinfo.dll";
    #tmp = dllfunc("EnterPrintMulti");
    SAVEAS;
    #tmp = dllfunc("LeavePrintMulti");

 ってだけです。それで保存したファイルを秀丸エディタで開いて、全置換コマ
ンドにて、

 検索:   \x0C
 置換     \nFrom - XXXXX

 で正規表現をONにして全置換すればいいです。あと、ファイルの先頭に手で

>From - XXXXX

 っていれてやれば、それでmbox形式になります。

 これも含めてマクロでやるのもありですが、とりあえずそういう作戦がよさそ
うかどうか一回試してみて欲しいです。

[ ]
RE:30373 SujectとDateと本文をエクスポーNo.30379
kiwikazuya さん 07/02/21 14:40
 
すみません目的を書いていませんでした。
秀丸メールで受信したメールや送信メールそして、
情報アイテムの中で自分にとってあとから
参照するような大切なメールを5年前くらいからアカウント下に
「保存」フォルダを作成して保存してあります。
また、「法律」フォルダを作成して中国の法律、通達を
保存してあります。

そして、秀丸メールの強力で柔軟で検索速度もとても速い
「検索して一覧作成」で抽出して活用しています。

ただし、これらは、当然ながら秀丸メールがないとみれません。

秀丸メールの持ち出しキットも最近活用し始めましたが、
PCでの使用はいいのですが、PocketPCでは使えません。

保存してあるファイルをひとつのテキストファイルに書き出し、
件名をアウトラインにして使うと、メールのような感覚で
読むことができることを思いつきました。

こうして書き出したテキストファイルは、メールではないので、
件名と日付と本文以外のヘッダ情報は余分となり、
たとえば、すべてのヘッダ情報があるファイルは7メガですが、
作成していただいたマクロで余分なヘッダ情報が削除されると、
5メガとなりだいぶ軽くなります。

こうして加工したファイルをPocketPCへ転送すると、
PocketPC上でもアウトライン化して使用することができ、
必要な情報をPocketPCでいつでもどこでも検索したり、
参照したりすることができ、NotePCを持ち歩かなくても、
よくなります。

もちろんメインは秀丸メールでの活用ですが、
PocketPCでも見れることによって、
たとえば客先でノートパソコンを開くことなく、
必要な情報を取り出せて便利です。

つまるところは、秀丸メールの情報をテキストファイルとして、
アウトライン機能を活用し、PocketPCでも使うことができること、
そして、USBメモリに保存して、秀丸メールのないPCでも、
Wordやテキストエディタのアウトライン機能を使うことで、
メール風に内容をみることができることを目的としています。

よろしくお願いいたします。


[ ]
RE:30379 SujectとDateと本文をエクスポーNo.30380
秀まるお2 さん 07/02/21 15:02
 
 話によると、別にmbox形式でなくてもいいんじゃないかということで、だった
らやっぱり、EnterPrintMulti/LeavePrintMultiするマクロを使って、複数メー
ルをまとめてテキストファイルに保存したらいいのかなぁと思いますけど。

 そのままだとCtrl-L区切りになるんですけど。

 あと1つ問題がありました。

 EnterPrintMulti/LeavePrintMultiするマクロが適当かと思ったんですが、実
はこのマクロも含めて、印刷の処理で、複数文字コードのメールをまとめて処理
することが出来ないという問題があります。今回の話によると中国語のメールと
日本語のメールをまとめて処理したそうな話なので、とりあえずこの、多国語混
在でまとめ印刷出来ない問題をなんとか解決しようかなぁと思います。

[ ]
RE:30374 SujectとDateと本文をエクスポーNo.30381
kiwikazuya さん 07/02/21 15:05
 
この作戦はいいですね。
メール表示−ヘッダのところで、簡易ヘッダ表示を
必要なSubjectとDateだけにしてから、このマクロを
実行すると、思うような動作となりました。

しかしながら、
日本語、中国語、英文が混在しているため、
一括で書き出そうとすると「...将来は解消」という
文字化けをしてしまいますよというエラー表示がでて、
やっぱり文字化けしてしまいます。
文字コードごとに書き出すことも考えられないことはないですが、
メールの日付は崩したくないので、できません。

いろいろ策を練っていただいてありがとうございます。
置換マクロのほうを試して見ます。

[ ]
RE:30380 SujectとDateと本文をエクスポーNo.30382
kiwikazuya さん 07/02/21 15:12
 
そうです。
別にmbox形式でなくてもいいんです。
このコメントのちょっと後にわたしのこの目的を
コメントしています。

> そのままだとCtrl-L区切りになるんですけど。
これって、テキストファイルとして問題でしょうか?
問題だとして、置換して削除してしまえばいいですよね。

>とりあえずこの、多国語混在でまとめ印刷出来ない問題を
>なんとか解決しようかなぁと思います。

ぜひぜひよろしくお願いいたします。
置換で対応すると、置換しすぎてしまったり、
置換漏れがあったり、時間がとってもかかったりするので、
この方法をぜひお願いいたします。

よろしくお願いいたします。

[ ]
RE:30372 SujectとDateと本文をエクスポーNo.30383
kiwikazuya さん 07/02/21 15:26
 
2つともうまく動作しませんでした。
2つ目のマクロ実行後、テキストファイルに
貼り付けるとFrom - Thu, 15 Feb 2007 10:00:43 +0900
だけ張り付きました。

うまくいかないです。

[ ]
RE:30382 SujectとDateと本文をエクスポーNo.30384
秀まるお2 さん 07/02/21 16:14
 
> > そのままだとCtrl-L区切りになるんですけど。
> これって、テキストファイルとして問題でしょうか?

 Ctrl-Lの区切り記号は別にテキストファイルとしておかしいことは無いし、後
で置換するのも難しいことでは無いと思います。

 あと、マクロとして、簡略表示ヘッダを変更してから「名前を付けて保存」し
てまた元に戻すってことで、以下のようになります。

    loaddll "tkinfo.dll";
    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    $save = getregstr( "SmallHdrRecv" );
    writeregstr "SmallHdrRecv", "Subject:\x01\x02Date:\x01\x02X-Attach:\
    x01\x02";
    #n = dllfunc("EnvChanged");
    #tmp = dllfunc("EnterPrintMulti");
    SAVEAS;
    #tmp = dllfunc("LeavePrintMulti");
    writeregstr "SmallHdrRecv", $save;
    #n = dllfunc("EnvChanged");
    #n = dllfunc("SwitchHeaderView", dllfunc("HeaderView") );

 これとあと、次のV4.74β8にて、複数文字コードが混在してる場合でもうまく
印刷およびEnterPrintMulti出来るようにします。

 Ctrl-L制御記号を置換してmbox形式にしたいなら、SAVEASの前に、

  if( readonly) readonlyswitch;
  replaceallfast "\\x0C", "\\nFrom - XXX", regular;

 の2行を入れればいいかと思います。

 ということでお願いします。

[ ]
RE:30384 SujectとDateと本文をエクスポーNo.30385
kiwikazuya さん 07/02/21 16:25
 
期待大です。
V4.74β8で複数文字コードが混在していても
うまくいく場合、ファイルは、utf-8で保存したいです。


[ ]
RE:30385 SujectとDateと本文をエクスポーNo.30386
秀まるお2 さん 07/02/21 16:37
 
> うまくいく場合、ファイルは、utf-8で保存したいです。

 「名前を付けて保存」のダイアログボックスに「エンコードの種類」があるの
で、そこをutf-8にすればutf-8で保存出来ます。

 あと、マクロですが、

    writeregstr "SmallHdrRecv", "Subject:\x01\x02Date:\x01\x02X-Attach:\
    x01\x02";

 の所は実際には改行してませんので。

    writeregstr "SmallHdrRecv"
        , "Subject:\x01\x02Date:\x01\x02X-Attach:\x01\x02";

 と書いてもいいです。

 どっちにしても次のβ版まで少々お待ちください。

[ ]
RE:30386 SujectとDateと本文をエクスポーNo.30388
kiwikazuya さん 07/02/21 19:04
 
すみません。書き出しをするときに自動折り返しで
改行を挿入しないようにできますか?
(受信系、送信系を問わずに改行を挿入しない)
よろしくお願いいたします。

[ ]
RE:30388 SujectとDateと本文をエクスポーNo.30390
秀まるお2 さん 07/02/22 09:54
 
> 書き出しをするときに自動折り返しで
> 改行を挿入しないようにできますか?

 EnterPrintMulti/LeavePrintMultiするマクロを使う場合であれば、自動折り
返し部分には改行コードは入らないはずです。

[ ]
RE:30386 SujectとDateと本文をエクスポーNo.30391
kiwikazuya さん 07/02/22 14:31
 
> どっちにしても次のβ版まで少々お待ちください。

beta8で思うようにできました。
ありがとうございます。
しかしながら、秀まるお2様の作られた上記マクロは
メールを複数選択しても1つしか書き出されず、
ヘッダの変更もできませんでした。

loaddll "tkinfo.dll";
    #tmp = dllfunc("EnterPrintMulti");
    SAVEAS;
    #tmp = dllfunc("LeavePrintMulti");

のマクロはうまく動作します。
何がいけないのでしょうか?

また、情報メール、送信系メールもありますので、
簡易ヘッダ表示の送信系メールのヘッダも変更したいのですが、
マクロではどのようにすればいいのでしょうか?

お手数をお掛けいたしますが、
よろしくお願いいたします。

これほど便利で重宝している秀丸メールなので、
もうひとつ購入したいと思います。

[ ]
RE:30391 SujectとDateと本文をエクスポーNo.30392
秀まるお2 さん 07/02/22 15:12
 
 すみません。EnvChagned関数を呼んでからすぐにEnterPrintMultiするとダメ
なようです。これはこれで次のβ版で修正させていただきます。

 あと、送信系メールのヘッダも変更する件も含めてマクロをこんな風に直して
欲しいです。

    loaddll "tkinfo.dll";
    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    $recv = getregstr( "SmallHdrRecv" );
    $send = getregstr( "SmallHdrSend" );
    writeregstr "SmallHdrRecv", "Subject:\x01\x02Date:\x01\x02X-Attach:\x01\
x02";
    writeregstr "SmallHdrSend", "Subject:\x01\x02Date:\x01\x02X-Attach:\x01\
x02";
    #n = dllfunc("EnvChanged");
    message "OKを押してください。";
    #tmp = dllfunc("EnterPrintMulti");
    SAVEAS;
    #tmp = dllfunc("LeavePrintMulti");
    writeregstr "SmallHdrRecv", $save;
    #n = dllfunc("EnvChanged");
    #n = dllfunc("SwitchHeaderView", dllfunc("HeaderView") );

 途中で一回余計なメッセージが出ますけど、それがどうしても必要です。次の
β版ではその「message "OKを押してください。";」の文を取ってもちゃんと動
くようにします。

[ ]
RE:30392 SujectとDateと本文をエクスポーNo.30393
秀まるお2 さん 07/02/22 15:54
 
 あー、また間違えました。こうでないとダメです。

    loaddll "tkinfo.dll";
    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    $recv = getregstr( "SmallHdrRecv" );
    $send = getregstr( "SmallHdrSend" );
    writeregstr "SmallHdrRecv"
        , "Subject:\x01\x02Date:\x01\x02X-Attach:\x01\x02";
    writeregstr "SmallHdrSend"
        , "Subject:\x01\x02Date:\x01\x02X-Attach:\x01\x02";
    #n = dllfunc("EnvChanged");
    message "OKを押してください。";
    #tmp = dllfunc("EnterPrintMulti");
    SAVEAS;
    #tmp = dllfunc("LeavePrintMulti");
    writeregstr "SmallHdrRecv", $recv;
    writeregstr "SmallHdrSend", $send;
    #n = dllfunc("EnvChanged");
    #n = dllfunc("SwitchHeaderView", dllfunc("HeaderView") );

[ ]
RE:30393 SujectとDateと本文をエクスポーNo.30394
kiwikazuya さん 07/02/22 18:58
 
ありがとうございました。
うまく動作しました。
ちょっとメールヘッダ表示の書き換えと戻すところの
マクロが時間がかかりますが、いいかんじです。

[ ]
RE:30393 SujectとDateと本文をエクスポーNo.30395
kiwikazuya さん 07/02/22 20:55
 
すみません、もうひとつマクロで教えてください。
作っていただいたマクロに文字列の置換の動作を
以下のようにSAVES;の前に追加しましたが、
うまく置換されずにそのまま書き出されました。
どこがいけないのでしょうか?
loaddll "tkinfo.dll";
    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    $recv = getregstr( "SmallHdrRecv" );
    $send = getregstr( "SmallHdrSend" );
    writeregstr "SmallHdrRecv"
        , "Subject:\x01\x02Date:\x01\x02X-Attach:\x01\x02";
    writeregstr "SmallHdrSend"
        , "Subject:\x01\x02Date:\x01\x02X-Attach:\x01\x02";
    #n = dllfunc("EnvChanged");
    message "OKを押してください。";
    #tmp = dllfunc("EnterPrintMulti");
 if( readonly) readonlyswitch;
 replaceallfast "\\x0c" , "From Hidemarumail" , regular;
 replaceallfast "from hidemarumail\\nsubject" , "\\nFrom Hidemarumail\\n\\*
Subject" , regular, nocasesense;
 replaceallfast "^" , "- " , regular, nocasesense;
 replaceallfast "^- \\* Subject" , "\\* Subject " , regular, nocasesense;
    SAVEAS;
    #tmp = dllfunc("LeavePrintMulti");
    writeregstr "SmallHdrRecv", $recv;
    writeregstr "SmallHdrSend", $send;
    #n = dllfunc("EnvChanged");
    #n = dllfunc("SwitchHeaderView", dllfunc("HeaderView") );

[ ]
RE:30395 SujectとDateと本文をエクスポーNo.30397
秀まるお2 さん 07/02/23 09:32
 
 replaceallfastを実行する前に、

    if( browsemode ) browsemodeswitch;

 を入れてやらないとダメなようです。(それでこの前のマクロもうまく動いて
なかったようです)

 あと、\x0Cを置換するのならば、

    replaceallfast "\\x0c" , "\\nFrom Hidemarumail" , regular;

 みたいに、改行コードも入れてやった方がいいと思います。

[ ]