添付File削除No.22550
grx78 さん 05/04/21 12:39
 

添付Fileの削除について教えて下さい。

送信済みフォルダにあるメールの添付Fileを
全て自動で削除するにはどうしたら良いのでしょうか?
HTMLは削除したくありません。
以下のようなマクロを作りかけたのですが、
問題が2つあります。
1.SetFindPackで"inmail=2"とした場合、
  どのように検索を行えば良いのか?
2.FindDownIncludeで検索していく場合、
  検索終了をどのように判定したら良いのか?

<作りかけマクロ>
$s = dllfuncstr("GetFindPack");
dllfunc("SetFindPack", "flag=sent, inmail=2");
while((#n = dllfunc("FindDownInclude")) == 1) {
  if(#n == 1 ) {
    #n = dllfunc("DeleteAttach", dllfuncstr
       ("CurrentHeader", "X-Attach"), 0);
    if(#n != 1 ) {
      message "変換できません。";
      goto ChgEnd;
    }
  }
}
dllfunc("SetFindPack", $s);

以上、宜しくお願いします。

[ ]
RE:22550 添付File削除No.22553
秀まるお2 さん 05/04/21 13:35
 
 手でやるとしたら、エクスプローラを使って、「送信添付」というフォルダ配
下のフォルダを全部削除してしまうのが一番簡単かとは思います。鶴亀メールの
メール用のフォルダ配下にアカウント用のフォルダがあって、その配下に「送信
添付」のフォルダがあります。

 マクロでやるとしたら、いちいち添付ファイル付きメールを列挙するよりも、
コマンドプロンプトから一気に削除させるのがいいんじゃないかと思いますが、
フォルダをワイルドカード指定してごっそり削除させるコマンドが無いようです。
それで考えたんですけど、「送信添付」のフォルダ・ツリーをまとめて削除して
から、「送信添付」フォルダだけを復活させればいいみたいです。

 削除系のマクロは間違うとひどい目にあうので、必ずメールデータを
バックアップしてから実行してください。

   loaddll "tkinfo.dll";
   $path = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount");
   $path = $path + "\\送信添付";
   question $path + " のフォルダ配下を全部削除します。よろしいですか?";
   if( result != yes ) {
       endmacro;
   }
   runsync2 "cmd.exe /c rmdir /s /q \"" + $path + "\"";
   runsync2 "cmd.exe /c mkdir \"" + $path + "\"";

[ ]
RE:22550 添付File削除No.22554
Iranoan さん 05/04/21 14:02
 
 grx78 さん今日は、Iranoan です。
 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです。
> 1.SetFindPackで"inmail=2"とした場合、
>   どのように検索を行えば良いのか?
 どの様に検索をしたいのか解らないので、答えようがありません。
 言い方を変えれば、私に読解力がなくて、何に悩んでいるか解らないと。

> 2.FindDownIncludeで検索していく場合、
>   検索終了をどのように判定したら良いのか?
 選択されたメールに添付ファイルがあるかは、CountCurrentHeader 関数な
ど他の方法で調べて、FindDown 関数を使えば良いと思います。

 P.S 書き込まれたコードですと、複数の添付ファイルがあったときの対処が
抜けていますよ。また既に削除されている場合もエラーになるのではないかと。

[ ]
RE:22553 添付File削除No.22555
grx78 さん 05/04/21 14:23
 
お世話になっております。

フォルダ丸ごと削除は考えませんでした。
この場合、送信済みのメールを見た時に、
添付Fileのアイコンがそのままになると思いますが、
大丈夫なのでしょうか?
以下のようなコードでとりあえず実現できましたが、
2回目以降、ファイルの削除失敗でエラーが発生してしまいます。

#n = dllfunc("DisableDraw", 0);
$folder = dllfuncstr( "CurrentFolder" );
#n = dllfunc( "SelectFolder", "", "送信済み" );
#n = dllfunc("SetMailIndex", 0);
while(1) {
 #n = dllfunc("CountCurrentHeader", "X-Attach");
 if (#n != 0) {
  #n = dllfunc("DeleteAttach",
      dllfuncstr("CurrentHeader", "X-Attach"), 0);
  if(#n != 1 ) {
   message "変換できません。";
   break;
  }
 }
 #n = dllfunc( "NextPrevCustom",
          "Neighbor", "down", "mail", "");
 if (#n == 0) {
  break;
 }
}
#n = dllfunc( "SelectFolder", "", $folder );
#n = dllfunc("EnableDraw");

[ ]
RE:22554 添付File削除No.22556
grx78 さん 05/04/21 14:25
 
コメントを有難うございます。

> P.S 書き込まれたコードですと、複数の添付ファイルがあったときの対処が
>抜けていますよ。また既に削除されている場合もエラーになるのではないかと。
確かに、その通りです。
ただ、DeleteAttachで複数の添付ファイル削除はどうすれば良いのでしょうか???

[ ]
RE:22555 添付File削除No.22557
秀まるお2 さん 05/04/21 14:57
 
> この場合、送信済みのメールを見た時に、
> 添付Fileのアイコンがそのままになると思いますが、
> 大丈夫なのでしょうか?

 見た目だけの問題ですけど、しいて点線クリップアイコンにしたいなら、

    #n = dllfunc("DisableDraw", 1);
    $s = dllfuncstr("CurrentFolder");
    #n = dllfunc("SelectFolder", "", "");
    #n = dllfunc("SelectFolder", "", $s);
    #n = dllfunc("EnableDraw");

 って処理を入れれば、添付ファイル枠も含めてすべての表示内容が
リフレッシュされると思います。

[ ]
RE:22557 添付File削除No.22558
grx78 さん 05/04/21 15:08
 
色々と参考になりました。
有難うございました。m(__)m

> 見た目だけの問題ですけど、しいて点線クリップアイコンにしたいなら、
>
>    #n = dllfunc("DisableDraw", 1);
>    $s = dllfuncstr("CurrentFolder");
>    #n = dllfunc("SelectFolder", "", "");
>    #n = dllfunc("SelectFolder", "", $s);
>    #n = dllfunc("EnableDraw");
>
> って処理を入れれば、添付ファイル枠も含めてすべての表示内容が
>リフレッシュされると思います。

[ ]
RE:22556 添付File削除No.22565
Iranoan さん 05/04/21 18:44
 
 grx78 さん今日は、Iranoan です。
> ただ、DeleteAttachで複数の添付ファイル削除はどうすれば良いのでしょうか???
 あのマクロが書ければ、指摘すれば直に解るだろうと手を抜いていました(^^)。
> while(1) {
>   #n = dllfunc("DeleteAttach",
>       dllfuncstr("CurrentHeader", "X-Attach"), 0);
>   if(#n != 1 ) {
>    message "変換できません。";
>    break;
>   }

> 2回目以降、ファイルの削除失敗でエラーが発生してしまいます。
の件も含めて、
$$home = dllfuncstr( "HomeDir" ) + dllfuncstr( "CurrentAccount" ) + "\\";
while(1) {
  ##i = 0;
  ##j = dllfunc( "CountCurrentHeader", "X-Attach" );
  $$file = dllfuncstr( "CurrentHeader2", "X-Attach", ##i );
  if( existfile( $$home + $$file ) ){
    if( !dllfunc("DeleteAttach", $$file, 0 ) ){
      message "変換できません。";
      break;
    }
  }
  ##i = ##i + 1;
}
の要領で如何でしょう。
※動作確認をしていませんがご容赦下さい(^^;。

[ ]
RE:22565 添付File削除No.22579
grx78 さん 05/04/22 11:56
 
回答を有難うございました。
Sampleを元にやってみます。

[ ]