特定キーワードに反応してポップアップNo.05225
cuma さん 02/05/10 07:04
 
秀まるお様へ
また要望なのですが、ご検討お願いします。

業務用に複数の方々からメールが毎日飛んできます。
その中で、

特定の人から来たメール
または
特定キーワードを含んだメール
が受信された場合に、注意書きをポップアップしたいんです。

たとえば利用方法としては

3年前に仕事を頂いた顧客の中で、次回はこんな点に注意
しなければなあと思っていた人がいます。

その人のアドレスを登録しておくと、時間何年か後で急に
再度の依頼メールを受けた場合。「XXな点を注意して
商談」などのポップアップが上がればトラブルを未然に防止
可能となります。

またメールアドレスが特定出来なくても、本文中に特定の地名
がある場合、「この地域は要注意」などのポップアップがあれば
良い事もあります。


[ ]
RE:05225 特定キーワードに反応してポップNo.05226
三月 さん 02/05/10 07:50
 
>特定の人から来たメール
>または
>特定キーワードを含んだメール
>が受信された場合に、注意書きをポップアップしたいんです。
>
  :
>またメールアドレスが特定出来なくても、本文中に特定の地名
>がある場合、「この地域は要注意」などのポップアップがあれば
>良い事もあります。
>

あまり実用的でない気がします。
複数のメールが届いた時、どのメールに対するポップアップかわかりますか?
10個とか来た場合に全てポップアップ?

それよりも、振分けで自動でメモを挿入してヘッダの簡易表示で
メモを見れるようにすればいいんじゃないでしょうか?

[ ]
RE:05226 特定キーワードに反応してポップNo.05229
cuma さん 02/05/10 09:20
 
 cumaです。

三月さん、補足ありがとうございます。

>あまり実用的でない気がします。
>複数のメールが届いた時、どのメールに対するポップアップかわかります
>か?
>10個とか来た場合に全てポップアップ?

ここは私の前提がミスでした。
受信時にポップアップでは無かったです。

受信後、メール一覧でクリックした時点(=プレビュー時点)にポップアップ
が希望のタイミングでした。
この条件でご検討お願い致します。

>それよりも、振分けで自動でメモを挿入してヘッダの簡易表示で
>メモを見れるようにすればいいんじゃないでしょうか?

これは駄目なんです。
この部分も私の要求仕様がいい加減だったので申し訳ございません。

表示させたい内容は以下です。

文字数は数文字程度から200文字程度となります。

具体例としては

ビジネス実用例:

「前回はこのお客様は、作業担当としてXXさんを代理派遣したため
今回は万難廃して自分が対応したい。対応が難しい日程の場合は前回
代理時のトラブルを考慮してご予約を受けるべきでは無い」

とか

プライベート実用例:

「XXさんには、以前にレーダー探知機の性能評価を依頼されていた
未だに回答してないけど、継続調査中であるニュアンスを伝えたい。」

「ZZさんは、パナソニック派と考えてメール交換」

みたいな文章を表示したいのです。

実はBecky2ではプラグインで実現されているようです。
ビジネス用途に使う場合には自分の記憶力を補う上で便利な機能だと
思うのです。

もちろん、別なソフトで注意事項を書き留めておいて、メール受けたら
アドレス等から検索してもいいのですが、膨大なメールが来た時などは
検索が面倒になり、うっかり大事な懸案事項を忘れて回答したり、相手の
好みを忘れて回答とかしてしまいそうです。

メールを見る時に相手に応じた注意事項が表示されたら助かります。

[ ]
RE:05229 特定キーワードに反応してポップNo.05230
PATIO さん 02/05/10 09:40
 
>もちろん、別なソフトで注意事項を書き留めておいて、メール受けたら
>アドレス等から検索してもいいのですが、膨大なメールが来た時などは
>検索が面倒になり、うっかり大事な懸案事項を忘れて回答したり、相手の
>好みを忘れて回答とかしてしまいそうです。
>
>メールを見る時に相手に応じた注意事項が表示されたら助かります。

受信メールのプレビュー時に自動起動するマクロがあれば、
マクロで何とかできるかもしれないですね。
ただ、メールをクリックするたびにマクロが動くのは遅くなりそうで
いやな気はしますね。
せめて、受信メールをエディタで開いたら位にしたいところです。
話としては既に出ていてもおかしくない話(自動起動マクロの件)なので
案外この辺が理由で実装されていないのかも。

[ ]
RE:05230 特定キーワードに反応してポップNo.05232
cuma さん 02/05/10 10:22
 
 cumaです。
 
 PATIOさんおはようございます。

>受信メールのプレビュー時に自動起動するマクロがあれば、
>マクロで何とかできるかもしれないですね。
>ただ、メールをクリックするたびにマクロが動くのは遅くなりそうで
>いやな気はしますね。
>せめて、受信メールをエディタで開いたら位にしたいところです。

なるほど。なるほど。

そうだ!
返信メール画面を開いた時ならば、エディタで開いた時と同じでしょうか?
つまり返信を書く時点で注意事項が分かればいいので。

どうでしょう?
このタイミングならマクロで出来そうでしょうか?

OKだったら、マクロの概略回答いただけると「大」幸せです!
すでにご存じの通りマクロに関して馬鹿丸出しの私なので0から作成は
まだまだ遠いようなんです。

[ ]
RE:05232 特定キーワードに反応してポップNo.05235
Kengo さん 02/05/10 11:54
 
> 返信メール画面を開いた時ならば、エディタで開いた時と同じでしょうか?
> つまり返信を書く時点で注意事項が分かればいいので。

[マクロ(M)]→[マクロ登録(E)...]→[自動起動]の「送信用のエディタ
起動時(E)]に登録してやればいいのでは?
#私は、ヘッダいじる系のマクロを動かしてます。

[ ]
RE:05232 特定キーワードに反応してポップNo.05237
Kengo さん 02/05/10 14:42
 
> 返信メール画面を開いた時ならば、エディタで開いた時と同じでしょうか?
> つまり返信を書く時点で注意事項が分かればいいので。

でっちあげてみました♪

・「送信用のエディタ起動時(E)]に登録
・とりあえず[返信]した時だけに限定(してあるつもり)
・ヘッダーにも本文にもヒットします
・検索ダイアログの設定や文字列によってはミスヒットがあるかも
 ('.'が正規表現でマッチした、とか)
・マクロに直接メッセージを埋め込んでいるのがアレですが、
 そこは「でっちあげ♪」なので

------------------------------------------------------------
loaddll "TKInfo.dll";

#n = dllfunc( "MailType" );
if( #n != 1 ) {
    // [返信]以外はここで終わり
    freedll;
    endmacro;
}

call CheckMessage "xxx@hoge.xx.jp", "メッセージ";
call CheckMessage "xxx@hoge.xx.jp", "こうやれば\n改行もできる。";
call CheckMessage "xxx@hoge.xx.jp", "最大何文字かは・・・知らない。";

// 本文先頭に移動
gofiletop;

freedll;
endmacro;

// 文字列を検索してメッセージ表示する
// 見つかればTRUEを返す
// $$1 = 検索する文字列
// $$2 = 表示するメッセージ
CheckMessage:
    // ヘッダ先頭に移動
    moveto 0,-9999;
    // 検索
    searchdown $$1;
    ##r = result;
    if( ##r ) {
        message $$2;
    }
return ##r;

[ ]
RE:05235 特定キーワードに反応してポップNo.05243
cuma さん 02/05/10 21:16
 
 cumaです。

アドバイスありがとうございます。
マクロが出来ればそこに登録ですね。

>> 返信メール画面を開いた時ならば、エディタで開いた時と同じでしょう
>> か?
>> つまり返信を書く時点で注意事項が分かればいいので。
>
>[マクロ(M)]→[マクロ登録(E)...]→[自動起動]の「送信用のエディタ
>起動時(E)]に登録してやればいいのでは?
>#私は、ヘッダいじる系のマクロを動かしてます。

[ ]
RE:05237 特定キーワードに反応してポップNo.05244
cuma さん 02/05/10 21:16
 
 cumaです。

Kengoさん、ひな形ありがとうございます。ひな形がいただけたことで自分自身
で進めるよりはずっとずっとターボが効きました。と言うよりも自力で0から考
えるのはまだ不可能でした。

表示させたいメッセージをどうすれば簡単に設定可能か?
また検索文字列も複数簡単に都度設定するには?

など今後の課題があるのかもしれませんが、実際に運用段階に持ち込むまでは何
かとあるかと思うのですが、気長によろしくお願いいたします。

取り急ぎ御礼でした。


>> 返信メール画面を開いた時ならば、エディタで開いた時と同じでしょう
>> か?
>> つまり返信を書く時点で注意事項が分かればいいので。
>
>でっちあげてみました♪
>
>・「送信用のエディタ起動時(E)]に登録
>・とりあえず[返信]した時だけに限定(してあるつもり)
>・ヘッダーにも本文にもヒットします
>・検索ダイアログの設定や文字列によってはミスヒットがあるかも
> ('.'が正規表現でマッチした、とか)
>・マクロに直接メッセージを埋め込んでいるのがアレですが、
> そこは「でっちあげ♪」なので
>
>------------------------------------------------------------
>loaddll "TKInfo.dll";
>
>#n = dllfunc( "MailType" );
>if( #n != 1 ) {
>    // [返信]以外はここで終わり
>    freedll;
>    endmacro;
>}
>
>call CheckMessage "xxx@hoge.xx.jp", "メッセージ";
>call CheckMessage "xxx@hoge.xx.jp", "こうやれば\n改行もできる。";
>call CheckMessage "xxx@hoge.xx.jp", "最大何文字かは・・・知らない。";
>
>// 本文先頭に移動
>gofiletop;
>
>freedll;
>endmacro;
>
>// 文字列を検索してメッセージ表示する
>// 見つかればTRUEを返す
>// $$1 = 検索する文字列
>// $$2 = 表示するメッセージ
>CheckMessage:
>    // ヘッダ先頭に移動
>    moveto 0,-9999;
>    // 検索
>    searchdown $$1;
>    ##r = result;
>    if( ##r ) {
>        message $$2;
>    }
>return ##r;

[ ]
RE:05232 特定キーワードに反応してポップNo.05247
hi_sugar さん 02/05/10 22:24
 
cumaさん、こんにちは。hi_sugarです。

ポップアップメッセージを出すことの代案として以下のアイディアはどうでしょ
うか。
1.草稿フォルダに"覚書"なるフォルダを作成し、そこに特定アドレス向けの覚書メー
ルを作り保存する。(これは実際には送信しません。)
2.返信メール作成時(送信時に自動的に起動するマクロで)に、返信メールのToヘッ
ダーにあるアドレスをもった覚書フォルダにあるメールを検索しそれを表示する。

以下はメールアドレスから覚書メールを表示するサンプルマクロです。

※注意
  以下のマクロでは覚書フォルダの先頭にあるメールは検索対象からはずれてしまい
ます。次バージョンではそれを補う関数が追加される予定ですので、
"<---注意"の"FindDown"を”FindDownInclude"に置き換えてください。

//------- ここから ---------------
  $memo = "草稿\\覚書" ;
  loaddll "tkinfo.dll";
  if( dllfunc( "MailType" ) != 1 ) goto End ; // 返信でなければ終了
// To リストの取得
  $$to = dllfuncstr("CurrentHeader", "To" );
  ##i = 0 ;
  #to_num  = dllfunc("CountEmailList", $$to);
  while ( ##i < #to_num ) {
    $to_list[##i] = dllfuncstr("SetEmailOnly",
                           dllfuncstr("GetEmailList", $$to, ##i));
    ##i = ##i + 1 ;
  }
// 鶴亀本体のハンドル取得
  #main_handle  = dllfunc("MainWnd") ;
  #rep_handle   = hidemaruhandle(0) ;
// 鶴亀本体へ
  setactivehidemaru #main_handle ;
  $restoreaccount= dllfuncstr( "CurrentAccount" ) ;
  $restorefolder= dllfuncstr( "CurrentFolder" ) ;
  if (! dllfunc( "SelectFolder", "", $memo ) ) {
    message "フォルダの選択に失敗しました。" ;
    goto MainEnd ;
  }
  if (dllfunc("IsThreadView")) ##n = dllfunc( "SetThreadView", 0);
  #memo_num = dllfunc("MailCount") ;
  if ( #memo_num == 0 ) goto MainEnd; // 覚書なければ終了
  ##i = 0 ;
  #memmo_cnt = 0 ;
  while ( ##i < #to_num ) {
    $target = "(\"" + $to_list[##i] +
              "\",target=to),subfolder=1,inmail=0";
    if (! dllfunc("SetFindPack",$target) ) goto MainEnd ;
    ##n = dllfunc("SetMailIndex",0) ;
    disableerrormsg ; // 音を消す
    if ( dllfunc("FindDown") ) {         // <--注意 鶴亀Ver 1.86まで
      while (1) {
        ##n = dllfunc("OpenMail") ;   // 覚書を開く
        setactivehidemaru #main_handle ;
        #memo_cnt = #memo_cnt + 1 ;
        disableerrormsg ; // 音を消す
        if ( ! dllfunc("FindDown") ) break ;
      }
    }
    ##i = ##i + 1 ;
  }
  enableerrormsg ;

MainEnd:
  ##n = dllfunc( "SelectFolder", $restoreaccount,  $restorefolder );
  setactivehidemaru #rep_handle ;
  if ( #memo_cnt != 0 ) {
    message "覚書メールが"+str(#memo_cnt)+"通あります。";
  }
End:
  freedll ;
  endmacro ;
//----- ここまで------------------

※特定キーワードポップアップの場合は覚書フォルダにキーワードをSubjectとした
メールを作成しておき、それが元メールにふくまれているか逆に検索したらどうでし
ょうか。

補足:
  私も草稿フォルダに各種メモ類をたくさんおいてあります。それらはほとんど
は実際に送信するものではありません。そこで誤送信防止のために、送信しない
メールのtoヘッダーの先頭に"!"を入れておき、後で送信/今すぐ送信時に起動す
るマクロとして以下のマクロを登録してあります。
 
//------- ここから ---------------
loaddll "tkinfo.dll";
$to = dllfuncstr("CurrentHeader", "To" );
if (strstr($to,"!") == 0) {
message "このメールは送信できません。";
##n = dllfunc("SetCancel", 1);
}
freedll ;
endmacro ;
//----- ここまで------------------

よろしかった参考にしてください。


[ ]
RE:05247 特定キーワードに反応してポップNo.05248
cuma さん 02/05/10 23:05
 
hi_sugarさん、こんばんは

 cumaです。

>1.草稿フォルダに"覚書"なるフォルダを作成し、そこに特定アドレス向け
>の覚書メー
>ルを作り保存する。(これは実際には送信しません。)
>2.返信メール作成時(送信時に自動的に起動するマクロで)に、返信メー
>ルのToヘッ
>ダーにあるアドレスをもった覚書フォルダにあるメールを検索しそれを表
>示する。

これはおもしろい発想ですねえ。
実際には覚え書き以外にも効果ありそうです。

私は草稿に書きかけていても、後から同じ人から着たメールがあると、うっかり
と後から着たメールには即レスしてしまって、以前にいただいたメールへの返信
は草稿にとどまったまま。。。

なんてミスもあります。

本マクロでは、そのような草稿での送信漏れチェックにも使えそうです。
次バージョンで関数が追加されると実用段階と言う事ですね。

>
>※特定キーワードポップアップの場合は覚書フォルダにキーワードを
>Subjectとした
>メールを作成しておき、それが元メールにふくまれているか逆に検索した
>らどうでし
>ょうか。

こちらはまだ良く理解出来ないのですが、でもまず最初は冒頭の新アイディアを
頂いて行こうと思います。

また最後の補足事項もありがとうございます。
実はグッドタイミングでした。

草稿を利用すると言う事で、ご送信が気になってました。
忙しい時期などうっかり送信対象になるような操作をするようなおそれがあった
のですが、しかし草稿に覚え書きを書く場合は!マークを入れるなんていいです
ね。うっかりしてもマクロでエラーメッセージを出すのもいいですね。

当面、この覚え書きフォルダ作戦で試験運用してみようと思います。
感謝感謝です。

[ ]
RE:05247 特定キーワードに反応してポップNo.05250
cuma さん 02/05/11 08:25
 
 cumaです。
 
hi_sugarさん、大成功です。
ひな形提供をありがとうございました。
この位の大きなマクロになると正直私は確実な理解が出来ないレベルです。

何となく理解しながらヘルプを検索しながら作業しました。
でもやはり理解出来ない事があります。
お手数ですが以下の点を補足ご教授頂けないでしょうか?

Q1:以下のマクロで「★印」の部分ですが、どのような意味の処理なので
   しょうか?

Q2:覚書フォルダを他のアカウントの覚書フォルダに指定したい場合は
   どうなるでしょうか?
   
Q3:マクロの流れがわからなくて、私が暫定的にmessage文を沢山入れて
   おりますが、これを配列の中身を表示させたい場合などは、どのように
   書けばよろしいでしょうか?出来れば配列「to_list」を配列数分だけ
   リストみたいに出せるといいのですが。

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

// 覚え書きマクロ  hi_sugarさんアドバイス
  $memo = "草稿\\覚書" ;
  loaddll "tkinfo.dll";
  if( dllfunc( "MailType" ) != 1 ) goto End ; // 返信でなければ終了

// To リストの取得
  $$to = dllfuncstr("CurrentHeader", "To" ); //現在メール(返信)から
                                             // Toを取り出している
  ##i = 0 ; //一番目の数値型ローカル変数を初期化
  #to_num  = dllfunc("CountEmailList", $$to); //返信メールtoから
                                              //アドレス個数カウント
  while ( ##i < #to_num ) { // To複数,区切りなら個数分まで繰り返し
  //名前だけ削除してアドレス本体は配列に入れる
    $to_list[##i] = dllfuncstr("SetEmailOnly",
                           dllfuncstr("GetEmailList", $$to, ##i));
    ##i = ##i + 1 ;
  }

message "返信アドレス取り出し完了";

// 鶴亀本体のハンドル取得
  #main_handle  = dllfunc("MainWnd") ;
  #rep_handle   = hidemaruhandle(0) ;

message "鶴亀ハンドル取得完了";

// 鶴亀本体へ
  setactivehidemaru #main_handle ;
  $restoreaccount= dllfuncstr( "CurrentAccount" ) ;//現在アカウント
  $restorefolder= dllfuncstr( "CurrentFolder" ) ;  //現在フォルダ
                                                   //これは処理完了時に

                                                   //に戻す為の現状の保

message "鶴亀のアカウントフォルダ現状の保存";

// 覚書フォルダを選択
  if (! dllfunc( "SelectFolder", "", $memo ) ) {
    message "フォルダの選択に失敗しました。" ;
    goto MainEnd ;
  }

message "覚書フォルダ選択完了";

  //覚書フォルダがスレッド表示なら一覧に切り替え
  if (dllfunc("IsThreadView")) ##n = dllfunc( "SetThreadView", 0);
  #memo_num = dllfunc("MailCount") ;  //一覧表示メール個数
  if ( #memo_num == 0 ) goto MainEnd; // 覚書なければ終了

message "覚書0件以外と判断";

  ##i = 0 ;
  #memo_cnt = 0 ;
  while ( ##i < #to_num ) {  //返信メールTo個数分
 
    //★ここで"(\""とか記述している意味が不明です。
    $target = "(\"" + $to_list[##i] +
              "\",target=to),subfolder=1,inmail=0";
    //subfolder=1--->サブフォルダも含める
    //inmail=--->フォルダ内
    if (! dllfunc("SetFindPack",$target) ) goto MainEnd ;

    //0指定は一覧中の一番上のメールを選択
    ##n = dllfunc("SetMailIndex",0) ;
    disableerrormsg ; // 音を消す

    //下方向検索ヒットすると1が戻る
    if ( dllfunc("FindDown") ) {         // <--注意 鶴亀Ver 1.86まで
      while (1) {    //ヒットしてれば繰り返す

message "覚書とToヒットしたよ";

        ##n = dllfunc("OpenMail") ;   // 覚書を開く
        setactivehidemaru #main_handle ;
        #memo_cnt = #memo_cnt + 1 ;
        disableerrormsg ; // 音を消す
        if ( ! dllfunc("FindDown") ) break ;
      }
    }
    ##i = ##i + 1 ;
  }
  enableerrormsg ;

MainEnd:
message "終了処理開始";
  ##n = dllfunc( "SelectFolder", $restoreaccount,  $restorefolder );
  setactivehidemaru #rep_handle ;
  if ( #memo_cnt != 0 ) {
    message "覚書メールが"+str(#memo_cnt)+"通あります。";
  }
End:
  freedll ;
  endmacro ;
//----- ここまで------------------

[ ]
RE:05250 特定キーワードに反応してポップNo.05251
hi_sugar さん 02/05/11 09:21
 
cumaさん、おはようございます。hi_sugarです。

>Q1:以下のマクロで「★印」の部分ですが、どのような意味の処理なので
>   しょうか?

 $targetに代入したい文字列が ("xxxx@abc.com",target=to)....
 といった場合、ダブルコーテーションをマクロ中の文字列としていれるために
 エスケープ文字(文字列の終わりと識別するために)\をその前に入れます。
 ※秀丸マクロヘルプの文字列をみてください。

>Q2:覚書フォルダを他のアカウントの覚書フォルダに指定したい場合は
>   どうなるでしょうか?
 先頭で
 $account = "hogehoge" ; // アカウント名
 と指定しておき、

  if (! dllfunc( "SelectFolder", $account, $memo ) ) {
                                ^^^^^^^^^^
    message "フォルダの選択に失敗しました。" ;
    goto MainEnd ;
 としてください。

>Q3:マクロの流れがわからなくて、私が暫定的にmessage文を沢山入れて
>   おりますが、これを配列の中身を表示させたい場合などは、どのように
>   書けばよろしいでしょうか?出来れば配列「to_list」を配列数分だけ
>   リストみたいに出せるといいのですが。

とりあえず中をすべてみたいなら、

  ##i = 0 ;
  $to_listup = "" ;
  while ( ##i < #to_num ) {
    $to_listup = $to_listup + " " + $to_list[##i] ;
    ##i = ##i + 1 ;
  }
  message $to_listup ;
 
では、がんばってください。

[ ]
RE:05251 特定キーワードに反応してポップNo.05252
cuma さん 02/05/11 19:58
 
hi_sugarさん、こんばんは

重ね重ねのアドバイスありがとうございます。
それもすごい素早い回答で驚きました。

早速勉強させて頂きます。

PS
 これから仙台から静岡まで仕事で移動となります。
 パソコン操作は仙台帰宅後となるので明後日以降となりそうです。
 それから勉強再会です!

[ ]
RE:05251 特定キーワードに反応してポップNo.05258
cuma さん 02/05/13 18:32
 
 cumaです。
 
 hi_sugarさん、こんばんは
 
>とりあえず中をすべてみたいなら、

うまく行きました。
ありがとうございます。この方法で今後も色々なマクロ勉強に使えます。

[ ]
RE:05247 特定キーワードに反応してポップNo.05275
cuma さん 02/05/15 07:43
 
 cumaです。

hi_sugarさん、おはようございます。

>ます。次バージョンではそれを補う関数が追加される予定ですので、
>"<---注意"の"FindDown"を”FindDownInclude"に置き換えてください。

今朝ほどバージョンアップを見つけて置換しました。
FindDownInclude

にしたところ、マクロのループが抜けられなくなったような気配なのです。
何回もお手数をおかけしますが、アドバイスいただければ幸いです。

[ ]
RE:05275 特定キーワードに反応してポップNo.05276
hi_sugar さん 02/05/15 08:46
 
こんにちは、cumaさん。hi_sugarです。

>今朝ほどバージョンアップを見つけて置換しました。
>FindDownInclude
>
>にしたところ、マクロのループが抜けられなくなったような気配なのです。
>何回もお手数をおかけしますが、アドバイスいただければ幸いです。

 最初の1個目(<--注意の行)のみ置換してください。(そのつもりで書いたつ
もりだったのですけど)
 2個目も置換するといつまでたっても同じメールが検索(hit)します。
 
 ※自分で試した限りは上記でOkでした。
 

[ ]
RE:05276 特定キーワードに反応してポップNo.05282
cuma さん 02/05/15 12:37
 
hi_sugarさん、こんにちは

 cumaです。

> 最初の1個目(<--注意の行)のみ置換してください。


なるほど。了解です。
良く見れそのような指示ですねえ。
うっかりしておりました。

それにしても毎回素早い回答ありがとうございます。

[ ]