受信メールの自動保存マクロについてNo.30807
ピペン さん 07/03/24 23:55
 
 開いた受信メールに、送信日時とメールのタイトルを元に自動的にファイル名をつ
けて保存するマクロは作れますか。

 例:2007年3月1日10時13分43秒に送信された「お知らせ」というタイトルのメール
の場合

 2007_0301_101343_「お知らせ」.txt

という具合です。

 受信メールをすべてテキストファイルで管理したいのですが、マクロについてはほ
とんど知識がないものですから、教えていただけると幸いです。


[ ]
RE:30807 受信メールの自動保存マクロにつNo.30808
Iranoan さん 07/03/25 03:30
 
 ピペンさん今日は、Iranoan です。
 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです。
>  開いた受信メールに、送信日時とメールのタイトルを元に自動的にファイル名をつ
> けて保存するマクロは作れますか。
 簡単です。例えば、ヘッダは現在表示しているヘッダでよいのなら、末尾の
マクロになります。(ただし重複するファイル名、フォルダの存在の確認はし
ていない手抜き)

 ただ
> 受信メールをすべてテキストファイルで管理したい
について疑問なのは、次の 2 点です。
(1)秀丸メールは元々メールをテキスト・ファイルなのに、その必要がある?
(2)エクスポートでは、
  ・拡張子が eml になってしまう (実際にはテキスト・データなので、一般
    的なテキスト・エディタで開くことが出来る)
  ・ファイル名を送受信日付+Subject にできない
  が要望とは異なりますが、それでは不十分?
//--------------------------------------------------------------------
//保存フォルダの指定 (フォルダの区切りは「\\」にしする事)
$dir = "C:\\Documents and Settings\\user\\My Document\\";

loaddll "tkinfo.dll";
$time = dllfuncstr( "GetMailTransmitDate" );
$time = leftstr( $time, 4 ) + "_" + midstr( $time, 5, 2 )
  + midstr( $time, 8, 2 ) + "_" + midstr( $time, 11, 2 )
  + midstr( $time, 14, 2 ) + midstr( $time, 17, 2 );
$$return = dllfuncstr( "CurrentHeader", "Subject" );
call ChangeCharacter $$return,"\\","\";
call ChangeCharacter $$return,"/","/";
call ChangeCharacter $$return,":",":";
call ChangeCharacter $$return,";",";";
call ChangeCharacter $$return,"*","*";
call ChangeCharacter $$return,"?","?";
call ChangeCharacter $$return,"<","<";
call ChangeCharacter $$return,">",">";
call ChangeCharacter $$return,"|","|";
saveas $dir + $time + "_「" + $$return + "」.txt";
freedll;
endmacro;

ChangeCharacter://buffer 中の文字列を置換
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;

[ ]
RE:30808 受信メールの自動保存マクロにつNo.30813
秀まるお2 さん 07/03/25 23:16
 
 Iranoanさんのマクロは僕はよく分かりませんが、基本的にメール内容をファ
イルに保存するには、マクロでsaveas文を使うか、またはtkinfo.dllのExport関
数を使うかどちらかになると思います。

 ファイル名をうまく生成してやれば他はそんなに難しくないと思います。

[ ]
RE:30808 受信メールの自動保存マクロにつNo.30814
ピペン さん 07/03/26 06:58
 
Iranoan さん。こんにちは。

早速ご指南いただきましてありがとうございます。作成していただいたマクロを使わ
せていただきたいと思います。

>(1)秀丸メールは元々メールをテキスト・ファイルなのに、その必要がある?
>(2)エクスポートでは、
>  ・拡張子が eml になってしまう (実際にはテキスト・データなので、一般
>    的なテキスト・エディタで開くことが出来る)
>  ・ファイル名を送受信日付+Subject にできない
>  が要望とは異なりますが、それでは不十分?

 最近はいろいろなメモ書きや記録をテキストデータで同一フォルダの中で管理して
まして、それを秀丸で利用してます。
 (秀丸は軽くて高速なのでよく利用しています。)

 ひとつひとつのファイル名の先頭に(あえて)日付を振っているのは、(個人的な
趣味かもしれませんが)タイムスタンプのような使い方をするためです。
 

[ ]
RE:30813 受信メールの自動保存マクロにつNo.30815
ピペン さん 07/03/26 07:00
 
ヒントをいただきありがとうございます。

これから少しずつマクロを勉強したいと思います。


[ ]
RE:30808 受信メールの自動保存マクロにつNo.30817
ピペン さん 07/03/27 00:44
 
作成していただきましたマクロを早速実行してみたところ

(1)call ChangeCharacter $$return,"\\","\"; の行で「式がおかしいです。」のエ
ラーメッセージが表示されます。
(この行をコメント行にするとエラーは表示されません。)

また、

(2)メールのタイトルに「\ / : * ? " < > | 」を含んでいるとエラーとなります。

 (2)についてはヘルプでいろいろと調べた限りでは
 
call ChangeCharacter $$return,"\\","\";
call ChangeCharacter $$return,"/","/";
call ChangeCharacter $$return,":",":";
call ChangeCharacter $$return,";",";";
call ChangeCharacter $$return,"*","*";
call ChangeCharacter $$return,"?","?";
call ChangeCharacter $$return,"<","<";
call ChangeCharacter $$return,">",">";
call ChangeCharacter $$return,"|","|";

や、

ChangeCharacter://buffer 中の文字列を置換
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;
 
が、このエラーを回避するためのものと想像しているのですが、なにぶん素人なもの
でして原因が分かりません。

 大変恐縮ですが対処法を教えていただけないでしょうか。
 
 (「\ / : * ? " < > | 」についてはすべて「_」に変換するのでも構いません。)

[ ]
RE:30817 受信メールの自動保存マクロにつNo.30818
n13 さん 07/03/27 01:03
 
n13です。
もしかして投稿すると全角が半角になるのではないでしょうか?

以下はテストです。

半角ですか?→\
全角ですか?→¥

[ ]
RE:30818 受信メールの自動保存マクロにつNo.30819
n13 さん 07/03/27 01:15
 
変換されないようですね。
では、以下のように修正すればいいと思います。

call ChangeCharacter $$return,"\\","\";
call ChangeCharacter $$return,"/","/";
call ChangeCharacter $$return,":",":";
call ChangeCharacter $$return,";",";";
call ChangeCharacter $$return,"*","*";
call ChangeCharacter $$return,"?","?";
call ChangeCharacter $$return,"<","<";
call ChangeCharacter $$return,">",">";
call ChangeCharacter $$return,"|","|";



call ChangeCharacter $$return,"\\","¥";
call ChangeCharacter $$return,"/","/";
call ChangeCharacter $$return,":",":";
call ChangeCharacter $$return,"*","*";
call ChangeCharacter $$return,"?","?";
call ChangeCharacter $$return,"\"","”";
call ChangeCharacter $$return,"<","<";
call ChangeCharacter $$return,">",">";
call ChangeCharacter $$return,"|","|";

IranoanさんこれでOKですか?
(セミコロンのエスケープは不要なので抜きました。
あと、ダブルクォーテーションのエスケープを追加しました。)


[ ]
RE:30819 受信メールの自動保存マクロにつNo.30820
Iranoan さん 07/03/27 03:15
 
 n13 さん今日は、Iranoan です。
> IranoanさんこれでOKですか?
> (セミコロンのエスケープは不要なので抜きました。
> あと、ダブルクォーテーションのエスケープを追加しました。)
 フォローありがとうございます。
 ##送信時の自動マクロで、ハンカクに変換してしまいました。

[ ]
RE:30820 受信メールの自動保存マクロにつNo.30833
ピペン さん 07/03/27 23:27
 
修正後のマクロではうまくいきました。

n13 さん、Iranoan さん、ありがとうございました。

[ ]