添付メールの本文取込みに関してNo.09878
なげなげ さん 02/11/13 13:58
 
なげなげです。お世話になっています。どなたかご存知であれば教えてください。

うちの会社では総務とかからの公文が上長経由でメールで転送されてきます。
転送元のメールは「添付されたメール.eml」として添付ファイルになっています。

通常、その添付メールを「.emlファイルのインポート」機能で取り込んでいます。
たまに、上長が転送時に、コメントを付けて来たときには、添付ファイルをインポー
トしただけでは元のメールとの関連が良くわからなくなるので、元のメールをエディ
タを開き、また同時に添付されたメールをエディタで開き、本文をカット&ペースト
して、もとのメールに取り込んでいます。

できれば、この作業をマクロで行いたいと思ったんですが、添付メールを開く方法が
判りませんでした。添付されたメールや添付ファイルを開くにはどうすればよろしい
でしょうか?

また、添付メールに添付されたファイルを、もとのメールの添付ファイルとしてコ
ピーしようと、ドラッグ&ドロップしたら、そのファイルが添付ファイルとなった新
規メールのエディタが開いてしまいます。これは仕様上しかたないものでしょうか?

[ ]
RE:09878 添付メールの本文取込みに関してNo.09881
ひろ さん 02/11/13 17:49
 
 なげなげさん今日は、ひろです。
> 転送時に、コメントを付けて来たときには、添付ファイルをインポー
> トしただけでは元のメールとの関連が良くわからなくなるので、元のメールをエディ
> タを開き、また同時に添付されたメールをエディタで開き、本文をカット&ペースト
> して、もとのメールに取り込んでいます。
 これを行うなら、基本的には添付ファイルは開かず、差し込む方法も有りま
す。添付ファイルに更に添付ファイルがついているという特殊な場合を除き、
//-------------------------------------------------------------------
loaddll "tkinfo.dll";
//添付ファイルの数を取得
##attach = dllfunc( "CountCurrentHeader", "X-Attach" );
##i = 0;
//添付ファイルの保存先
$$dir = dllfuncstr( "HomeDir" ) + dllfuncstr( "CurrentAccount" ) + "\\";
while( ##i < ##attach ){
  $$attach = dllfuncstr("CurrentHeader2", "X-Attach", ##i );
  //拡張子が eml の時のみ取り込み
  if( rightstr( $$attach, 4 ) == ".eml" )insertfile $$dir + $$attach;
  ##i = ##i + 1;
}
//-------------------------------------------------------------------
の要領で良いと思います。

> 添付メールを開く方法が
> 判りませんでした。
 どうしてもこの必要がある場合は、insertfile の代わりに、
//-------------------------------------------------------------------
run "c:\\turukame\\turukame.exe /v " + $$dir + $$attach;
//-------------------------------------------------------------------
等とすれば開けます。
> 添付メールに添付されたファイルを、もとのメールの添付ファイルとしてコ
> ピーしようと、ドラッグ&ドロップしたら、そのファイルが添付ファイルとなった新
> 規メールのエディタが開いてしまいます。これは仕様上しかたないものでしょうか?
 仕方がないかどうかはさておき、実際にその様なメールの作成を試みたと
きのことを考えれば、現在のままで良いと思います。

 P.S マクロについては長くなる傾向があるので、更に質問が有れば、
http://www.maruo.co.jp/turukame/2/ に移動しましょう。

[ ]
RE:09881 添付メールの本文取込みに関してNo.09882
秀まるお2 さん 02/11/13 18:34
 
 ちょっとマクロを作るつもりが、かなりはまってしまいました。

 一応以下のマクロで添付ファイルも含めた合体が実現できます。

----------------eml添付ファイル合体.mac------------------------
    loaddll "tkinfo.dll";
    if( ! dllfunc("IsTuruKameMain") ) {
        message "鶴亀メール本体ウィンドウで実行してください。";
        endmacro;
    }
    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    $homedir = getregstr( "HomeDir" );
    closereg;
    $accountdir = $homedir + dllfuncstr("CurrentAccount") + "\\";
    $path = $accountdir + dllfuncstr("CurrentHeader", "X-Attach");
    if( rightstr( $path, 4 ) != ".eml" ) {
        message ".eml添付ファイルじゃありません。";
        endmacro;
    }
    runsync2 "turukame.exe /v \"" + $path + "\"";
    #handle = findwindowclass("TuruKameOuterView");
    setactivehidemaru #handle;
    #headerview = dllfunc("HeaderView");
    #n = dllfunc("SwitchHeaderView", 1);
    gofileend;
    beginsel;
    moveto 0, -9999;
    setclipboard "\n\n--------------転送されたメール---------------\n";
    appendcopy;

    // さらに添付ファイルを取り出してコピーする処理!
    call GetBaseName $path;
    $destfolder = leftstr( $path, strlen($path) - strlen($$return) );
    $destfolderbase = rightstr( $destfolder
                     , strlen($destfolder) - strlen($accountdir) );
    #cAttach = dllfunc("CountCurrentHeader", "X-Attach");
    #i = 0;
    while( #i < #cAttach ) {
        $attach[#i] = dllfuncstr("CurrentHeader2", "X-Attach", #i);
        call GetBaseName $attach[#i];
        $attachbase[#i] = $$return;
        if( rightstr( winsysdir, 2 ) == "32" ) {
            $cmd = "cmd.exe";
        } else {
            $cmd = "command.com";
        }
        $cmd = $cmd + " /c copy \"" + $homedir
                  + dllfuncstr("CurrentAccount") + "\\" + $attach[#i]
                  + "\" \"" + $destfolder + $attachbase[#i] + "\"";
        message $cmd;
        runsync2 $cmd;
        #i = #i + 1;
    }
    #n = dllfunc("SwitchHeaderView", #headerview);
    #n = dllfunc("SetMainWndTop");
    #n = dllfunc("OpenMail");
    #n = dllfunc("EnableEdit");
    gofileend;
    paste;
    #i = 0;
    #n = dllfunc("SwitchHeaderView", 0);
    while( #i < #cAttach ) {
        #n = dllfunc("AddHeader", "X-Attach"
                 , $destfolderbase + $attachbase[#i] );
        #i = #i + 1;
    }
    #n = dllfunc("SwitchHeaderView", #headerview);
    #n = dllfunc("Bypass_PostMessage", #handle, 0x0010, 0 );
    save;
    message ".eml添付ファイルの中身を合体させました。";
    endmacro;


GetBaseName:
    while(1) {
        ##n = strstr( $$1, "\\" );
        if( ##n < 0 ) break;
        $$1 = midstr( $$1, ##n + 1, 256 );
    }
    return $$1;

------------------------マクロ終わり

■補足説明その1

 eml添付ファイルを開くには、runsync2でturukame.exe /v起動すればいいです
が、実はこれだと起動されたエディタにマクロ実行が切り替わってくれないです。
いろいろ試行錯誤して上記マクロのようにマクロ実行を切り替えることに成功し
ました。

■補足説明その2

 turukame.exe /vで起動したエディタをclosehidemaruforcedで終了させようと
すると鶴亀メールが固まってしまいました。一応バグといえばバグですが、とり
あえず今回のマクロではWM_CLOSEをPostMessageすることで対処しました。

■補足説明その3

 Windows98系かWindowsNT系かの判断は、winsysdirがsystemかsystem32かで判
断するようにしました。今までこの判断が出来ずに苦労してたような気がします。

 (っといいつつ、Windows95系ではテストしてませんが)

[ ]
RE:09882 添付メールの本文取込みに関してNo.09886
なげなげ さん 02/11/13 20:22
 
ひろさん、秀まるお2さん ありがとうございました。 m(__)m
おかげさまで、やりたいことがばっちしできるようになりました。 \(^o^)/  

[ ]
RE:09882 turukame.exe /v + closehidemarNo.09924
ひろ さん 02/11/16 19:11
 
 秀まるおさん今日は、ひろです。
>  turukame.exe /vで起動したエディタをclosehidemaruforcedで終了させようと
> すると鶴亀メールが固まってしまいました。一応バグといえばバグですが、とり
> あえず今回のマクロではWM_CLOSEをPostMessageすることで対処しました。
 やはりこれも修正して頂けると助かります。

 以下補足
>  Windows98系かWindowsNT系かの判断は、winsysdirがsystemかsystem32かで判
> 断するようにしました。
 95 系→NT 系へのアップグレードをした場合も大丈夫がちょっと不安ですね。
 わたしは shell の判定は、
$cmd = getenv( "COMSPEC" );
の要領で判定していました。

[ ]
RE:09924 turukame.exe /v + closehidemarNo.09947
秀まるお2 さん 02/11/18 17:15
 
>>  turukame.exe /vで起動したエディタをclosehidemaruforcedで終了させようと
>> すると鶴亀メールが固まってしまいました。

 メール用のエディタを閉じるタイミングで_eml_tempフォルダ中のメール(デ
コードされたメール)を削除しようとして固まってたんですが、んでは
closehidemaru系で閉じる時はメールを削除しないようにします。

 (エディタをすべて終了したタイミングで一応消えることにはなっているの
で)

> わたしは shell の判定は、
>$cmd = getenv( "COMSPEC" );

 んでは僕もこの方法を使わせていただきます。

[ ]
RE:09947 turukame.exe /v + closehidemarNo.09953
ひろ さん 02/11/18 19:04
 
 秀まるおさん今日は、ひろです。
> では
> closehidemaru系で閉じる時はメールを削除しないようにします。
 マクロ・ヘルプ共々宜しくお願いします。
> > わたしは shell の判定は、
> >$cmd = getenv( "COMSPEC" );
>
>  んでは僕もこの方法を使わせていただきます。
 恐縮です(^^)。

[ ]