アドレス帳の切換えNo.26230
nishi さん 06/02/06 09:47
 
便利に使わせてもらってます.ありがとうございます.

一応検索したのですが,見つからなかったので投稿させていただきます.検索不足で
したらご容赦ください.

アドレス帳ではグループを作って,社内,社外等々のアドレスを整理しております.
最近,社内メールを社外の物へ送ってしまう誤送信防止が社内で喚起されております.
現状,アドレスのオートコンプリートをONにしておくと,全てのアドレス帳からマッ
チするものがピックアップされてきます.
そこで,セキュリティ対策の一環として,少なくとも2種類のアドレス帳を切り換え
るような機能はご検討いただけないでしょうか.アイコンのクリックでON,OFFを切り
換えて,ONのときは,アドレス帳Aからのみアドレス検索をおこない,OFFのときは,
アドレス帳Bからのみアドレス検索を行う,という具合です.
あるいは,複数のアドレス帳で,ONのときに検索対象にするか,OFFのときに検索対
象にするかを設定できる,という具合です.
アドレスのオートコンプリート入力自体をOFFにして,全部手動入力というのも一つ
の方法とは思いますが,これはこれで実用的な解決方法とは思えないので,ご検討い
ただければとても助かります.

[ ]
RE:26230 アドレス帳の切換えNo.26248
秀まるお2 さん 06/02/06 14:42
 
 アドレス帳の切り替えは、単純に、AdrBook.txtというファイルを切り替える
だけで実現できます。なので、例えばマクロで、

runsync2 "cmd.exe /c copy c:\\book1.txt c:\\turukamedata\\adrbook.txt";

 みたいなマクロを作ってそれでアドレス帳を切り替えることが出来ると思いま
す。

 あと、宛先がたしかにアドレス帳に登録されてるかどうかも、これまたマクロ
でうまく出来ます。ライブラリの中にもそういうマクロがあったような気がする
んですけど、もし無いようでしたら、僕が作って差し上げてもいいです。

 例えば、「xxxxx@XXXX.XX.XX はアドレス帳に登録されていません。かまわず
に送信しますか?」とかいうメッセージを出すマクロとか、そういうのは作るこ
とが出来ます。

[ ]
RE:26248 アドレス帳の切換えNo.26266
nishi さん 06/02/06 18:49
 
ご提案ありがとうございます.

とりあえず,ライブラリやヘルプを見ながら
>runsync2 "cmd.exe /c copy  C:\\book1.txt :\\turukamedata\\adrbook.txt";
を参考に作ってみました.

その過程で,いくつか問題に当たり,現状以下の状態まで来たて頓挫状態です.
・Cドライブ直下にHidemaruAdrというフォルダを作って,いくつかのアドレス帳を保
存し,マクロを使って,特定のアドレス帳をHidemaruAdr内のAdrBook.txtにコピーす
る.
・秀丸メールのアドレス帳の設定で,「外部アドレス帳の追加」を使い,HidemaruAd
r内AdrBook.txtを指定しておき,TuruKameData内アドレス帳は空にしておく.
・マクロで追加した外部アドレス帳を切換えて,さらに,アドレス帳の設定を開いて
外部アドレス帳の読み込み直しを実行する.
・上記の手続きを経て,アドレスデータが切り替わる.
という状態までは来れたのですが,ちょっとうまくない感じです.

うまくいかなかった問題は以下です.
・My Documentsのように空白を含むパスは使えなかった.なので,My Documents下に
あるTuruKameDataのフォルダのアドレス帳を指定できなかった.
・使用中に新しく書き加えたアドレスをコピー元のアドレス帳に反映することも必要
と思いました.上記のマクロの逆でよいと思うのですが,どのアドレス帳が開いてい
るか自動で判別するのはどうやるのかわからない状態です.
・外部アドレス帳は読み込み直しをしないと反映されない状態です.

これらについて,アドバイスいただければと幸いです.
簡単なことなのかもしれませんが,当方マクロは今までまったく知らずに使わせても
らっていたので,かなりの手探り状態のため,ご容赦ください.

[ ]
RE:26266 アドレス帳の切換えNo.26275
秀まるお2 さん 06/02/07 08:50
 
> ・My Documentsのように空白を含むパスは使えなかった.なので,My Documents下に
> あるTuruKameDataのフォルダのアドレス帳を指定できなかった.

 僕もcmd.exeのコマンドライン指定の方法にはあまり詳しくないんですが、フ
ァイル名を、""で囲んでやればいいはずなので、例えば、

runsync2
   "cmd.exe /c copy  \"C:\\book 1.txt\" \"c:\\adrbook.txt\"";

 とかすればいいのかもしれません。または、ファイルのコピーにcmd.exeを使
うのではなくて、例えば田楽DLLを使うとか、秀丸メール標準のtkinfo.dllに入
っているBypass_CopyFile等の関数を使う方法もあります。

 田楽DLLについては、

  http://www.ceres.dti.ne.jp/~sugiura/

 を参照ください。

> ・使用中に新しく書き加えたアドレスをコピー元のアドレス帳に反映することも必要
> と思いました.上記のマクロの逆でよいと思うのですが,どのアドレス帳が開いてい
> るか自動で判別するのはどうやるのかわからない状態です.

 アドレス帳用のファイルの1行目を読み込んで、それによってどっちのアドレ
ス帳なのか判断するとかって作戦が一番いいような気がしますが、それは作るの
が難しいです。とりあえず、「今現在のアドレス帳がどっちか」っていう情報を
iniファイルに保存しつつ、念のため、アドレス帳を切り替えるタイミングでバ
ックアップも作っておくってすればいいんじゃないかと思います。

 iniファイルへのアクセスについては、getinistrとかwriteinistrとか使えば
いいです。

> ・外部アドレス帳は読み込み直しをしないと反映されない状態です.

 ファイルのタイムスタンプを書き換えてやれば自動的に読み込み直ししてくれ
るかなぁと思うんですが、ダメだとしたら、何か秀丸メール側にアドレス帳を読
み込み直す用の関数を用意してやらないとダメかもしれません。

 どっちにしても、かなり難しい話になりそうです。

 というか、こういうマクロ作成のスキルがあるなら、送信時に宛先確認する用
のマクロを別途作って、それでうまく解決した方がいいような気がします。

[ ]
RE:26266 アドレス帳の切換えNo.26276
秀まるお2 さん 06/02/07 08:55
 
 社内用、社外用のメンバーを、それぞれ「社内用」、「社外用」ってグループ
に分けるなどして、宛先確認の時に、

 宛先はすべて社内用です。送信してもいいですか?
 宛先はすべて社外用です。送信してもいいですか?
 社内用と社外用の宛先が混じっています。送信をキャンセルします。
 アドレス帳に登録されてない宛先が含まれています。送信をキャンセルします。

 とかのメッセージが出てくるようなマクロを作ったらいいと思いますが…。

 あと一週間くらい待ってもらえれば僕が作ってもいいですけど。

[ ]
RE:26276 アドレス帳の切換えNo.26312
nishi さん 06/02/08 12:24
 
下記,ありがとうございます.

> 社内用、社外用のメンバーを、それぞれ「社内用」、「社外用」ってグループ
>に分けるなどして、宛先確認の時に、

中略
> あと一週間くらい待ってもらえれば僕が作ってもいいですけど。

可能であれば,お願いしたいです.
よろしいでしょうか?

[ ]
RE:26312 アドレス帳の切換えNo.26346
秀まるお2 さん 06/02/09 12:46
 
 ということで適当に作ってみました。

 そのままでいけるかどうか分かりませんが、とりあえずこんなマクロになるっ
てことで試してみて欲しいです。

----------------------------
 loaddll "tkinfo.dll";

//グローバル変数:
//  #inner_count ... 社内のメールアドレスの数
//  #outer_count ... 社外のメールアドレスの数
//  #book_count ... 社内/社外のグループとは別のグループのメンバー
//  $unknown_list ... 登録されてない人の宛先のリスト

 #inner_count = 0;
 #outer_count = 0;
 #book_count = 0;
 $unknown_list = "";

 ##to_count = dllfunc("CountCurrentHeader", "To");
 ##cc_count = dllfunc("CountCurrentHeader", "Cc");
 ##bcc_count = dllfunc("CountCurrentHeader", "Bcc");
 ##i = 0;
 
 while( ##i < ##to_count ) {
  $$s = dllfuncstr("CurrentHeader2", "To", ##i);
  call BookConvert $$s;
  ##i = ##i + 1;
 }
 ##i = 0;
 while( ##i < ##cc_count ) {
  $$s = dllfuncstr("CurrentHeader2", "Cc", ##i);
  call BookConvert $$s;
  ##i = ##i + 1;
 }
 ##i = 0;
 while( ##i < ##bcc_count ) {
  $$s = dllfuncstr("CurrentHeader2", "Bcc", ##i);
  call BookConvert $$s;
  ##i = ##i + 1;
 }
 if( #unknown_count != 0 ) {
  if( #inner_count != 0 ) {
   if( #outer_count != 0 ) {
    $message = "社内/社外/未知の宛先が全部混在しています。";
   } else {
    $message = "社内のメンバーと未知の宛先が混在しています。";
   }
  } else {
   if( #outer_count != 0 ) {
    $message = "社外のメンバーと未知の宛先が混在しています。";
   } else {
    $message = "未知の宛先にメールを送ろうとしています。";
   }
  }
  $message = $message + "このまま送信してもいいですか?\n\n" +
       "未知の宛先:\n" + $unknown_list;
  #result = dllfunc("Bypass_MessageBox"
     , hidemaruhandle(0)
     , $message
     , "送信前の宛先の確認"
     , 0x30 + 3 + 0x100 );
 } else {
  #button = 0x40 + 1;
  if( #inner_count != 0 ) {
   if( #outer_count != 0 ) {
    $message = "社内と社外の宛先が混在しています。" +
               "かまわずに送信しますか?";
    #button = 0x30 + 3 + 0x100;
   } else {
    $message = "このメールの宛先はすべて社内です。";
   }
  } else {
   if( #outer_count != 0 ) {
    $message = "このメールの宛先はすべて社外です。";
   } else {
    $message = "宛先がありません。";
   }
  }
  #result = dllfunc("Bypass_MessageBox"
     , hidemaruhandle(0)
     , $message
     , "送信前の宛先の確認"
     , #button );
 }
 if( #result != 1 && #result != 6 ) {
  #n = dllfunc("SetCancel", 1);
 }
 endmacro;

BookConvert:
 ##c = dllfunc("CountEmailList", $$1);
 ##i = 0;
 $$result = "";
 while( ##i < ##c ) {
  $$one = dllfuncstr("GetEmailList", $$1, ##i);
  $$email = dllfuncstr("SetEmailOnly", $$one);
  if( $$email == "" ) {
   #unknown_count = #unknown_count + 1;
   $unknown_list = $unknown_list + $$one + "\n";
  } else {
   $$group = dllfuncstr("FindBookGroupPath", $$email);
   if( $$group == "" ) {
    #unknown_count = #unknown_count + 1;
    $unknown_list = $unknown_list + $$one + "\n";
   } else if( leftstr($$group, 16) == "\\アドレス帳\\社内" ) {
    #inner_count = #inner_count + 1;
   } else if( leftstr($$group, 16) == "\\アドレス帳\\社外" ) {
    #outer_count = #outer_count + 1;
   } else {
    #unknown_count = #unknown_count + 1;
    $unknown_list = $unknown_list + $$one + "\n";
   }
  }
  ##i = ##i + 1;
 }
 return $$result;

[ ]
RE:26346 アドレス帳の切換えNo.26347
nishi さん 06/02/09 18:49
 
お忙しいところ,ありがとうございました.
さっそく試しました.

ただ,
社内も社外もいくつかのグループに分かれて保存されているため,
アドレス帳のパスを見るのではなく,
アドレス帳の備考3に,内部や外部などの情報を入れるようにして,
そのデータをみて振り分けるように変えてみました.

うまく動いているようです.

ほんとにありがとうございました.

[ ]