自動返信、自動応答No.10493
iwsaver さん 06/09/17 10:23
 
iwsaverと申します。
初めての投稿であり、何か言動に問題があるようでしたらご指摘ください。
検索をかけて調べて見たのですが、やはりよくわからないので質問させて頂きます。

以下のことを実現したいのですが、何とかなるものなのでしょうか?
1.自動応答で本文中に記載のあるその都度変化するメールアドレス
  宛てに定型文で発信する。
  一般的なメールソフトでは自動返信はFromへの返信しかできないと
  思うのですが、秀丸メールならなんとかできそうな気がするのですが..

2.さらに1.を発展させて、本文の内容に応じて、ある関数のようなもの
  で返信内容を一部加工して発信する。
  例えば、本文中に数字列があったとして、それをある関数で置き換え 
  その内容を追加して発信する。

他のメールソフトも含め、色々検索してみたのですがよくわからない状況です。宜し
くお願いします。

[ ]
RE:10493 自動返信、自動応答No.10494
iwsaver さん 06/09/17 10:34
 
度々失礼します。

perlを少しかじりかけており、何かよい手法、考え方、サンプル的なものがあるよう
でしたら、それを含めご教示頂ければ幸いです。
宜しくお願いします。

[ ]
RE:10494 自動返信、自動応答No.10495
秀まるお さん 06/09/17 12:16
 
 マクロを使えば出来ます。

 基本的に、秀丸エディタのマクロを自作しないと無理なので、それはそれで、
プログラミングの知識がある程度無い段階でいきなり挑戦するのは非常に難しい
と思います。

 適当なサンプルは無いと思います。しいて近い物として、自動的に返信メール
を生成するとかって物ならあるかもしれませんけど。

[ ]
RE:10495 自動返信、自動応答No.10496
iwsaver さん 06/09/17 12:32
 
早速お返事頂き有難うございます。
自力で少し挑戦してみるしかないということですかね。無理そうだったら諦めます。

[ ]
RE:10496 自動返信、自動応答No.10497
秀まるお さん 06/09/17 13:12
 
 ちなみに2つ程ヒントを書きますと…。

 受信したメール毎にマクロでアクションを起こすには、SelectRecvMail関数か、
またはSelectRecvMailInFolder関数を使います。

 メールを生成するには、NewMail関数をMakeReply関数を使う他に、秀丸メール
のコマンドラインでunsentmailを指定する方法もあって、どちらかというとコマ
ンドラインを使った方が便利だと思います。

[ ]
RE:10497 自動返信、自動応答No.10500
iwsaver さん 06/09/18 09:02
 
アドバイス有難うございます。勉強しながらやってみます。

[ ]
RE:10497 自動返信、自動応答No.10501
iwsaver さん 06/09/18 22:42
 
本文にメールアドレスがひとつだけ記載されているのですが、そのメールアドレスに
メールを送るために、本文にあるメールアドレスの抜き出しが必要です。正規表現を
使って検索して文字列を返す必要があるのですが、よい関数ををお教え願えません
か?HELPを見てみたのですが、よくわからないため、宜しくお願いします。

[ ]
RE:10497 自動返信、自動応答No.10502
iwsaver さん 06/09/19 06:10
 
下記のマクロを作成してError処理は別としてデフォルトアドレスへのメール送信ま
ではできたのですが、元メールの本文からのメールアドレスの抜き出し方とヘッダー
To:の書き換えが良くわかりません?お忙しいところ申し訳ありませんが、アドバイ
ス頂けませんか?

-------------------------------------------

    loaddll "tkinfo.dll";

    //対象フォルダへ移動
    #n = dllfunc( "SelectFolder", "xxxx", "xxxx" );
    //送受信直後のメール数カウント
    #count = dllfunc("RecvMailCount");

    while ( #count >= 1 ) {

      //メールの取得
      #n = dllfunc( "SelectRecvMailInFolder" );
      //本文からの返信アドレスの検出 未完
      $s = dllfuncstr("RootBody");
        //[\w\d_-]+@[\w\d_-]+\.[\w\d._-]+

      //メールの作成
            run "turukame.exe unsentmail Subject=xxxx" +
            "template=\"xxxx\"" +
            "To=xxx@xxx.xxx";

     
        //#n = dllfunc("BeginEditMail");
        //$s = dllfuncstr( "SetHeader", "To", $new_to );
        //#n = dllfunc("SaveEditMail", 0, 0 );
 
      //メールの送信
      #n = dllfunc("SendRemainAll");

      #count = #count - 1;
    }

---------------------------------------------

[ ]
RE:10501 自動返信、自動応答No.10503
秀まるお さん 06/09/19 10:51
 
 メールアドレスを探す正規表現は、例えば

\<[!$%&*\-./0-9;?a-z^_~]+@[\-.0-9a-z_~]+\.[\-.0-9a-z_~]+\>

 とかがいいんじゃないかと思います。

 マクロとしては、

    gofiletop;
    #count = 0;
    while(1) {
        searchdown2
           "\\<[a-z0-9_.\\-]+@[a-z0-9_\\-]+\\.[a-z0-9_\\-.]+\\>"
         , regular, nocasesense;
        if( !result ) {
            break;
        }
        $email[ #count ] = gettext(foundtopx,foundtopy
              ,foundendx, foundendy);
        message $email[ #count ];
        #count = #count + 1;
    }

 とか。

[ ]
RE:10502 自動返信、自動応答No.10504
秀まるお さん 06/09/19 10:55
 
 #count >= 1 でループさせたらダメだと思いますけど。

 if( dllfunc("RecvMailCount") != 0 ) {
     #n = dllfunc("SelectFolder", "xxxx", "xxx");
     if( dllfunc("RecvMailCountInFolder") != 0 ) {
         while( dllfunc("SelectRecvMailInFolder") ) {
             ....
         }
         #n = dllfunc("StartSendRemain");
     }
 }

 みたいな感じにしたらいいと思いますが…。

[ ]
RE:10503 自動返信、自動応答No.10505
秀まるお さん 06/09/19 10:59
 
 gettextした後で、

 moveto foundendx, foundendy;

 を入れてやらないとダメみたいです。

[ ]
RE:10504 自動返信、自動応答No.10510
iwsaver さん 06/09/20 08:41
 
色々アドバイス有難うございます。
お蔭様でそれなりに動作するようになったのですが、未だ質問があります。

User側で作成したフォルダをセレクトしたいのですが、上手くいってないらしく下記
で"0"が返ってきます。ちなみにCurrentAccountでCurrentFolderで調べても問題あり
ませんし、下記"User\xxxx"を"受信"にすると"1"が返ってきます。どこが問題なので
しょうか?

#n = dllfunc( "SelectFolder", "アカウント", "User\xxxx" );
message str(#n) ;

宜しくお願いします。

[ ]
RE:10510 自動返信、自動応答No.10511
秀まるお さん 06/09/20 08:52
 
 マクロの中の文字列では、「\」は「\\」と書く必要があります。

 #n = dllfunc( "SelectFolder", "アカウント", "User\\xxxx" );

 とすれば、たぶんうまく動作すると思います。

[ ]
RE:10511 自動返信、自動応答No.10512
iwsaver さん 06/09/21 02:59
 
色々有難うございました。動作するものができました。

[ ]
RE:10512 自動返信、自動応答No.10513
iwsaver さん 06/09/21 03:58
 
お手を煩わして申し訳ありませんが、再度質問です。自動応答のメール本文作成を以
下のようにしていますが、本文の中に元文を加工したものを挿入したいのですが、挿
入の仕方を教えて頂けませんか?
例えば$textをテンプレートの特定の個所に入れたいとかいった場合です。
$textをテンプレートに入れただけじゃだめですよね。HELPに記載があるならその場
所をお教え下さい。宜しくおねがいします。

run "turukame.exe unsentmail Subject=xxxx " +
    "template=\"xxxx\"" +
    "To=\"" + $to + "\"" ;

[ ]
RE:10513 自動返信、自動応答No.10514
秀まるお さん 06/09/21 09:07
 
 テンプレートにマクロの変数を渡すことは出来ないです。

 やるとしたら、そもそもテンプレートは使わずに、ファイルを経由させる方法
かなぁと思います。マクロでなんとかがんばってメール本文相当の物をファイル
に出力し、それをBodyFile=XXXXって形でコマンドライン指定する作戦かなぁと
思います。

 ファイルに出力するには、例えば

   #n = dllfunc("NewMail");
   #n = dllfunc("SwitchHeaderView", 0);
   ... 本文作成 ...
   saveas "c:\\temp.txt";
   #h = hidemaruhandle(0);
   #n = dllfunc("SetMainWndTop");
   closehidemaruforced #h;

 みたいにするのが一般的です。それか田楽DLLとかの助けを借りるか。


 他にも1つ手がありますが、それのテストをしていたら1つ問題が…。作戦と
して、例えばコマンドラインで、

 "x-memo=" + $text

 みたいな指定をしつつ、テンプレートでは

 $(CurrentHeader,X-Memo)

 を使って、最後に

 $(DeleteHeader,X-Memo)

 とする方法ですけど、これは、コマンドラインのnewmailだとうまくいきます
が、unsentmailだとダメでした。そもそもunsentmailでtemplate=指定を使った
場合、テンプレート中の$(...)命令が全部無視されてしまうようです。あと、テ
ンプレート名に日本語があるとダメみたいだし。それはそれでバグのつもりで調
べてみます。

[ ]
RE:10514 自動返信、自動応答No.10515
秀まるお さん 06/09/21 09:30
 
 というか、そもそもそこまで苦労するくらいなら、コマンドラインを使うんじ
ゃなくて、

  #n = dllfunc("SetQuietMode", 1);
  #n = dllfunc("NewMail");
  #n = dllfunc("SetHeader", "X-memo", $test );
  #n = dllfunc("SwitchTemplate", "テスト");
  #n = dllfunc("SendLater");
  #handle = hidemaruhandle(0);
  #n = dllfunc("SetMainWndTop");
  closehidemaruforced( #handle );
  #n = dllfunc("SetQuietMode", 0);

 にするとか。

 ある程度複雑なメールをマクロで作成しようと思ったら、エディタを起動させ
るしか無いかなぁと思います。

 あと、コマンドラインでunsentmail template="XXX"を指定した場合のテンプ
レート中の$(...)命令が実行されないバグは直すので、それを直したバージョン
まで待っていただいて、X-Memo:ヘッダ経由で処理させる作戦を使っていただく
のがいいかもしれません。

[ ]
RE:10515 自動返信、自動応答No.10522
iwsaver さん 06/09/22 08:06
 
エディタを起動させる方法で目的を達成することができました。詳細にしかもすぐに
サポート頂き有難うございました。どうやって実現すべきか途方にくれていたところ
に貴殿の作成した秀丸メールはすばらしい答えを出してくれました。本当に感謝して
おります。今後ともよろしくお願いします。

[ ]