自動返信機能が欲しいNo.00390
JR0LPL さん 07/07/15 19:47
 
お世話になっています。

早速ですが、自動返信機能が欲しくて投稿させて頂きました。

僕の考えているイメージなんですが、

アカウント毎の設定→メールの振り分け

の中に、from:メールアドレスが有った場合、

というような条件で、条件が合致した場合、あらかじめ用意しておいた
文面ファイルを自動返信する(加えて、メールの振り分け内で自動返信をON/OFFでき
る)

というような感じです。

文面ファイルは複数用意出来て、選択できると、もっと嬉しいです。

ご検討頂けないでしょうか?宜しくお願い致します。

[ ]
RE:00390 自動返信機能が欲しいNo.00391
davinci1958 さん 07/07/15 22:28
 

2007/07/15(日) 22:19:07

こんにちは、JR0LPLさん

ダヴィンチ@ユーザーです。

以下の実現方法として、2つ提案させて頂きます。

1)自動受信マクロによる対策

 マクロの自動起動を利用してマクロでfromアドレスが空ではないときに
 該当する返信テンプレートを指定して、自動返信する仕組みです。
 
 技術的には、Fromアドレスの取得と空かどうかの判別、テンプレート指定で
 返信するだけの処理です。

 但し、自動受信振り分けしたメールに対しては処理できません。
 
2)秀丸側の追加機能として対応

 ご要望の通り、受信振り分け時にあらかじめ用意した返信用の
 テンプレート(返信用の文面が記述されたもの)を自動返信に指定できるように
 します。

 どちらも返信内容を返信テンプレートに記述する方法です。
 
 但し、複数の返信用文面の切り換えは、振り分け設定メニューで
 切り換えるか、振り分け設定毎に設定します。
 
/*
** タイトル:『turukame.2:00390| 自動返信機能が欲しい』
** 発信日:2007年07月15日(日) 19:47:30
** 発信者:JR0LPLさん
*/
>お世話になっています。
>
>早速ですが、自動返信機能が欲しくて投稿させて頂きました。
>
>僕の考えているイメージなんですが、
>
>アカウント毎の設定→メールの振り分け
>
>の中に、from:メールアドレスが有った場合、
>
>というような条件で、条件が合致した場合、あらかじめ用意しておいた
>文面ファイルを自動返信する(加えて、メールの振り分け内で自動返信をON/OFFでき
>る)
>
>というような感じです。
>
>文面ファイルは複数用意出来て、選択できると、もっと嬉しいです。
>
>ご検討頂けないでしょうか?宜しくお願い致します。

--
メーラー: HidemaruMail 4.80 (WinNT,500)
OS: Windows2000 SP4

[ ]
RE:00391 自動返信機能が欲しいNo.00394
秀まるお さん 07/07/16 13:18
 
 秀丸メールに標準で自動返信の機能を付けるのはやらないでおこうと思います。
というのは、そういう自動返信の機能が悪用されると、たとえば特定の人をメー
ル爆弾攻撃したりするのに悪用出来てしまうからです。

 しいてなんとかしたいってことであれば、ダヴィンチさんの紹介されてるよう
に、何らかのマクロを使って自動処理させるって形でやって欲しいです。以前か
らそういう話題が何回か出てはいるで、具体的なマクロの例なんかも検索すれば
出てくると思います。

 過去ログサイトをgoogle検索するなどしてみると情報が出てくると思います。
もし見つからないようでしたら僕の方で代わりに探してお返事させていただきま
す。

[ ]
RE:00394 自動返信機能が欲しいNo.00395
JR0LPL さん 07/07/16 16:57
 
こんにちは。過去ログを見てみました。

ちょっと難しいかもしれませんが、マクロで挑戦してみたいと思い
ます。

とりあえず、用意した文面ファイルを開く所は作れたので、後は、
新着判断や、From:を抽出してTo:にセットしたり、試行錯誤してみ
ます。

判らない点は質問させて頂くと思いますが、よろしくお願い致します

ありがとうございました。

[ ]
RE:00390 自動返信機能が欲しいNo.00398
JR0LPL さん 07/07/17 12:00
 
秀まるお様、皆様、お世話になっています。

早速ですが、自動返信機能のマクロを作っていてサブルーチンのCALL方
法が分からないのでご教示頂けないでしょうか?

今、返信の文面、To: , From: をセットする部分を作りました。テスト
した所、思惑通りに動いているようなので、サブルーチンにしたいと思
います。

サブルーチン化してみた、自動返信の部分(まだ実際の返信は入れてありません。テ
スト中に送信すると困るので)です。

// 指定したFrom:が有った場合、文面及び To: , From をセットして送信

SendMail:
  $Subject="外出中です";  //返信文面ファイルに指定も兼ねる
  //#n = dllfunc("SetQuietMode", 1 ); ←最終的に完成したら入れる事
  #n = dllfunc("NewMail");
  #n = dllfunc("SetHeader", "To", $From);
  #n = dllfunc("SetHeader", "Subject", $Subject);
  gofiletop;
  beginsel;
  gofileend;
  delete;
  insertfile "E:\\TuruKameData\\AutoReplay\\"+$Subject+".txt";
// ここに今すぐ送信を入れる
  #n = dllfunc("SetQuietMode", 0 );
retuen;

これを、メインルーチンから呼び出したいと思っています。

メインルーチンでは、

While( dllfunc( "SelectRecvMail" ) ) {

を使って新着をチェックし、新着があれば、From:を抽出します。そし
て、こちらの指定したメールアドレスがFrom:に入っていたら上記サブ
ルーチンをCALLするような作りにしたいと考えています。

if ($From=="******1@******.ne.jp){
  //サブルーチンコール
  exit;
}

if ($From=="******2@******.ne.jp){
  //サブルーチンコール
  exit;
}

という感じに並べたいと思います。

ここで分からないのですが、if文内というか、サブルーチンをCALLする
には、どのような文法で書けば良いのでしょうか?

お手数ですが、お教え頂けないでしょうか?宜しくお願い致します。




>
>僕の考えているイメージなんですが、
>
>アカウント毎の設定→メールの振り分け
>
>の中に、from:メールアドレスが有った場合、
>
>というような条件で、条件が合致した場合、あらかじめ用意しておいた
>文面ファイルを自動返信する(加えて、メールの振り分け内で自動返信をON/OFFで
>きる)
>
>というような感じです。
>
>文面ファイルは複数用意出来て、選択できると、もっと嬉しいです。
>
>ご検討頂けないでしょうか?宜しくお願い致します。

[ ]
RE:00398 自動返信機能が欲しいNo.00399
Iranoan さん 07/07/17 12:45
 
 JR0LPL さん今日は、Iranoan です。
> if ($From=="******2@******.ne.jp){
>   //サブルーチンコール
>   exit;
> }
>
> という感じに並べたいと思います。
>
> ここで分からないのですが、if文内というか、サブルーチンをCALLする
> には、どのような文法で書けば良いのでしょうか?
if ($From=="******2@******.ne.jp){
  call SendMail;
  exit;
}
とすれば良いですよ。

 私なら exit 文を使わず。
     if ($From=="******1@******.ne.jp)call SendMail;
else if ($From=="******2@******.ne.jp)call SendMail;
else if ($From=="******3@******.ne.jp)call SendMail;
               :
               :
       //各種後始末
endmacro;
としますが。

[ ]
RE:00398 自動返信機能が欲しいNo.00400
Iranoan さん 07/07/17 12:50
 
 JR0LPL さん今日は、Iranoan です。
> if ($From=="******2@******.ne.jp){
>   //サブルーチンコール
>   exit;
> }
>
> という感じに並べたいと思います。
>
> ここで分からないのですが、if文内というか、サブルーチンをCALLする
> には、どのような文法で書けば良いのでしょうか?
if ($From=="******2@******.ne.jp){
  call SendMail;
  exit;
}
とすれば良いですよ。

 私なら
     if ($From=="******1@******.ne.jp)call SendMail;
else if ($From=="******2@******.ne.jp)call SendMail;
else if ($From=="******3@******.ne.jp)call SendMail;
                           :
                           :
//各種後始末
endmacro;
としますが。

[ ]
RE:00399 自動返信機能が欲しいNo.00401
JR0LPL さん 07/07/17 12:54
 
JR0LPLです。Iranoan さん、こんにちは。

早速のご教示ありがとうございました。これから挑戦してみようと思
います。

なるほど、else で並べる事も可能なんですね。こっちの方がスマー
トで良いと思うので、elseで並べてみます。

ただ、From:が少ない間は良いですが、多くなると、if文の羅列でか
っこ悪くなりますね(^^ゞ

メールアドレスをデータテーブルで持たせて、マクロ実行時に配列に
読ませて、if文判定を一個に出来れば理想ですけど、そういった事は
可能なのかなぁ…と思ってもいます。

とりあえず、

>     if ($From=="******1@******.ne.jp)call SendMail;
>else if ($From=="******2@******.ne.jp)call SendMail;
>else if ($From=="******3@******.ne.jp)call SendMail;

この方式でやってみます。

ありがとうございました。

[ ]
RE:00401 自動返信機能が欲しいNo.00402
Iranoan さん 07/07/17 13:15
 
 JR0LPL さん今日は、Iranoan です。
> ただ、From:が少ない間は良いですが、多くなると、if文の羅列でか
> っこ悪くなりますね(^^ゞ
 そうですね。
 そこまで考えるなら、最初から INI ファイルを利用する形
if( getininum( $ini, $sec, $$From ) )call SendMail;
とすればスマートになると思います。

[ ]
RE:00398 自動返信機能が欲しいNo.00403
JR0LPL さん 07/07/17 13:18
 
秀まるお様、皆様、お世話になっています。

Iranoanさんから、サブルーチンはcallで呼べば良いとご教示頂いた
ので、テストで簡単に作ってみましが、文法エラー(24)が発生しまし
た。

どこが悪いのが分からないので、毎度、教えてちゃんで、大変申し訳
ありませんが、以下のマクロで、間違っている部分をご指摘頂けない
でしょうか?宜しくお願い致します。

loaddll "tkinfo.dll";

$From="*******@******.ne.jp";

call SendMail;

endmacro;

// 指定したFrom:が有った場合、文面及び To: , From をセットして
送信

SendMail:
  $Subject="外出中です";  //返信文面ファイルの指定も兼ねる
  //#n = dllfunc("SetQuietMode", 1 ); ←最終的に完成したら入
れる事
  #n = dllfunc("NewMail");
  #n = dllfunc("SetHeader", "To", $From);
  #n = dllfunc("SetHeader", "Subject", $Subject);
  gofiletop;
  beginsel;
  gofileend;
  delete;
  insertfile "E:\\TuruKameData\\AutoReplay\\"+$Subject+".txt";
//完成したら、ここに今すぐ送信を入れる
  #n = dllfunc("SetQuietMode", 0 );
retuen;

[ ]
RE:00402 自動返信機能が欲しいNo.00404
JR0LPL さん 07/07/17 13:20
 
JR0LPLです。Iranoanさん、こんにちは。

> そこまで考えるなら、最初から INI ファイルを利用する形
>if( getininum( $ini, $sec, $$From ) )call SendMail;
>とすればスマートになると思います。

色々とアドバイスありがとうございます。こちらもマクロが完成した
ら、チャレンジしたいと思います。

[ ]
RE:00403 自動返信機能が欲しいNo.00405
秀まるお さん 07/07/17 13:22
 
> ので、テストで簡単に作ってみましが、文法エラー(24)が発生しまし
> た。

 24行目付近にエラーがあるってことになります。

> retuen;

 returnの間違いのようです。

[ ]
RE:00405 自動返信機能が欲しいNo.00406
JR0LPL さん 07/07/17 13:26
 
秀まるおさん、JR0LPLです。

> 24行目付近にエラーがあるってことになります。
>
>> retuen;
>
> returnの間違いのようです。

これは、恥ずかしい間違いをしました。ありがとうございました。

[ ]
RE:00398 自動返信機能が欲しいNo.00407
JR0LPL さん 07/07/17 14:09
 
秀まるお様、皆様、お世話になっています。

自動返信マクロのテストを重ねています。今度は関数エラーが発生して、また袋
小路に入ってしまったので、お助け下さい。

エラーは

TKINFO.DLL:エディタ上で実行できないTkinfo.dll呼び出しが行われました。
関数コード=21

という物です。以下に今テスト中のマクロを掲載しますので、添削お願い致しま
す。

秀丸メールのエディタが開いて、サブルーチンの実行は出来ているようなので、
メインルーチンに問題が有ると思われるのですが、悪い所に気が付きません。

loaddll "tkinfo.dll";
while( dllfunc( "SelectRecvMail" ) ) {

    $From = dllfuncstr("CurrentHeader", "Reply-To");
    if( $From == "" ) {
        $From = dllfuncstr("CurrentHeader", "From");
    }

    call SendMail;
}
endmacro;

// 指定したFrom:が有った場合、文面及び To: , From をセットして送信

SendMail:
  $Subject="外出中です";  //返信文面ファイルの指定も兼ねる
  //#n = dllfunc("SetQuietMode", 1 ); ←最終的に完成したら入れる事
  #n = dllfunc("NewMail");
  #n = dllfunc("SetHeader", "To", $From);
  #n = dllfunc("SetHeader", "Subject", $Subject);
  gofiletop;
  beginsel;
  gofileend;
  delete;
  insertfile "E:\\TuruKameData\\AutoReplay\\"+$Subject+".txt";
  //完成したら、ここに今すぐ送信を入れる
  #n = dllfunc("SetQuietMode", 0 );
return;

[ ]
RE:00407 自動返信機能が欲しいNo.00408
秀まるお さん 07/07/17 14:27
 
 マクロの中の1行毎に、message文を入れて調べたらいいと思います。

 例えば、

 loaddll "tkinfo.dll";
 message "tkinfo.dllロード通過";
 while( dllfunc( "SelectRecvMail" ) ) {
    message "SelectRecvMail通過";
    $From = dllfuncstr("CurrentHeader", "Reply-To");
    message "CurrentHeader関数通過、$From = " + $From;
    if( $From == "" ) {
        $From = dllfuncstr("CurrentHeader", "From");
        message "CurrentHeader関数通過2、$From = " + $From;
    }
    message "SendMail関数をcallします";
    call SendMail;
    message "SendMail関数から戻りました";
}
endmacro;

 ってな具合にしてデバッグすれば、具体的にどの行でエラーになってるか分か
ります。

[ ]
RE:00408 自動返信機能が欲しいNo.00409
JR0LPL さん 07/07/17 15:01
 
秀まるおさん、お世話になります。JR0LPLです。

> マクロの中の1行毎に、message文を入れて調べたらいいと思います。

このようにデバックすれば良いのですね。ありがとうございます。

早速やってみました。すべてが正常に終わって、

endmacro;

の部分でエラーが起きているようです。こうなると、どこが悪いのか、手に負え
なくなってしまいました。どこがおかしいのでしょうか?

エラーメッセージは

エラーは

TKINFO.DLL:エディタ上で実行できないTkinfo.dll呼び出しが行われました。
関数コード=21

です。

endmacro; を exit; にしてみたのですが、同じエラーでした。

loaddll "tkinfo.dll";
message "tkinfo.dllロード通過";
while( dllfunc( "SelectRecvMail" ) ) {
   message "SelectRecvMail通過";
   $From = dllfuncstr("CurrentHeader", "Reply-To");
   message "CurrentHeader関数通過、$From = " + $From;
   if( $From == "" ) {
       $From = dllfuncstr("CurrentHeader", "From");
       message "CurrentHeader関数通過2、$From = " + $From;
   }
   message "SendMail関数をcallします";
   call SendMail;
   message "SendMail関数から戻りました";
}
message "マクロを終了します";

endmacro;←ここでエラーになっている模様です。

message "endmacroを突き抜けました";←ここには飛んでこないのでサブルーチ
ンの二重実行は無い模様

// 指定したFrom:が有った場合、文面及び To: , From をセットして送信

SendMail:
  $Subject="外出中です";  //返信文面ファイルの指定も兼ねる
  //#n = dllfunc("SetQuietMode", 1 ); ←最終的に完成したら入れる事
  #n = dllfunc("NewMail");
  #n = dllfunc("SetHeader", "To", $From);
  #n = dllfunc("SetHeader", "Subject", $Subject);
  gofiletop;
  beginsel;
  gofileend;
  delete;
  insertfile "E:\\TuruKameData\\AutoReplay\\"+$Subject+".txt";
  //完成したら、ここに今すぐ送信を入れる
  #n = dllfunc("SetQuietMode", 0 );
return;

[ ]
RE:00409 自動返信機能が欲しいNo.00410
Iranoan さん 07/07/17 15:17
 
 JR0LPL さん今日は、Iranoan です。
> endmacro;
>
> の部分でエラーが起きているようです。
 これは DLL 関数ではないので、
> TKINFO.DLL:エディタ上で実行できないTkinfo.dll呼び出しが行われました。
のエラーには絶対なりません。メールごとに表示されたのは、表示されたのは、
> message "tkinfo.dllロード通過";
だけではありませんか? SelectRecvMail 関数は、エディタ・ウィンドウでは
使えませんよ。
 P.S NewMail 関数などを使っても、その後は開いたエディタ・ウィンドウ上
でマクロが実行されます。

[ ]
RE:00410 自動返信機能が欲しいNo.00411
JR0LPL さん 07/07/17 15:26
 
Iranoanさん、こんにちは。JR0LPLです。

>メールごとに表示されたのは、
>> message "tkinfo.dllロード通過";
>だけではありませんか?

何回も確認したのですが、

   message "SendMail関数をcallします";
   call SendMail;
   message "SendMail関数から戻りました";
}
message "マクロを終了します";

ここまではきちんと終了してまして(終了というのは、設定したメッセージが表
示されたという意味です)、マクロ終了時にエラーが出ます。


SelectRecvMail 関数から、エディタ・ウィンドウを呼び出しているのが、エ
ラーの原因と考えてよろしいでしょうか?

[ ]
RE:00410 自動返信機能が欲しいNo.00412
JR0LPL さん 07/07/17 15:35
 
Iranoanさん、こんにちは。JR0LPLです。
アドバイスありがとうございます。

サブルーチンCALLをSelectRecvMail関数の外部に出す事でエラーが無くなりまし
た。

以下のマクロでエラー回避出来ましたので、これから飾りを付けて行こうと思い
ます。ありがとうございました。

loaddll "tkinfo.dll";
message "tkinfo.dllロード通過";
while( dllfunc( "SelectRecvMail" ) ) {
    message "SelectRecvMail通過";
    $From = dllfuncstr("CurrentHeader", "Reply-To");
    message "CurrentHeader関数通過、$From = " + $From;
    if( $From == "" ) {
        $From = dllfuncstr("CurrentHeader", "From");
        message "CurrentHeader関数通過2、$From = " + $From;
    }
}

if ($From == "") endmacro;

message "SendMail関数をcallします";
call SendMail;
message "SendMail関数から戻りました";
endmacro;

message "exitを突き抜けました";

[ ]
RE:00402 自動返信機能が欲しいNo.00413
JR0LPL さん 07/07/17 15:58
 
秀まるおさん、みなさん、こんにちは。JR0LPLです。

お騒がせしていて、申し訳ありません。

Iranoan さんからアドバイス頂いた、

if( getininum( $ini, $sec, $$From ) )call SendMail;

というのを実装しようとしているのですが、マクロのヘルプにgetininum関数が
載っていませんでした。

具体的には、どのようにマクロ記述したら宜しいのでしょうか?

Q1:iniファイルの書式は?メールアドレスのみ書けば良い?
Q2:各パラメータは具体的に何を指定したら良い?
   $iniはiniファイルのファイル名ですか?
   $secは何でしょうか?
   $$Fromとは、iniファイルから自動取得されてメールアドレスが代入されるの  
   でしょうか?

お手数をおかけしますが、宜しくお願い致します。

[ ]
RE:00413 自動返信機能が欲しいNo.00414
Iranoan さん 07/07/17 16:11
 
 JR0LPL さん今日は、Iranoan です。
> マクロのヘルプにgetininum関数が
> 載っていませんでした。
 秀丸エディタのマクロヘルプを見てください。
     ^^^^^^^^
 秀丸エディタのマクロ・ヘルプは、秀丸メールのユーザが取り出して参照し
ても問題ないはずです。
http://hidemaruo.dip.jp:81/hidesoft/hidesoft_8/x13444.html#13486

[ ]
RE:00414 自動返信機能が欲しいNo.00415
JR0LPL さん 07/07/17 16:16
 
Iranoan さん、こんにちは。JR0LPLです。

秀丸「エディタ」のHELPですね。ライセンスが無いのでダウンロードしてHELPを
参照してから、アンインストールしたいと思います。

ありがとうございました。

[ ]
RE:00415 自動返信機能が欲しいNo.00444
たまちゃん さん 07/07/18 22:37
 
盛り上がっているところを管理者の視点からコメントさせていただきます。

バケーションメッセージなど自動返信の機能は便利である反面,注意しないとループ
を引き起こしたり余分なメッセージを配信してしまう可能性があります。

今回の場合は差し出し人が特定されていますが,

・相手もたまたま自動返信を使っている場合
・相手が自分も加入しているメーリングリストに投稿した場合
・相手のアドレスを詐称しているウイルスメールが多数来た場合

などの状況(3番目は性質が違いますが,冒頭で秀まるおさんが答えていらっしゃる
ことと通じます)が考えられます。

通常はメールサーバやメーリングリストサーバでループに陥らないように工夫を凝ら
しますが,今回の場合のようにクライアントが独自に自動返信の仕組みをつくるとす
り抜けてしまいます。ループに陥らないような仕組みがありますので,その点も考慮
されてはと老婆心ながら思います。

私が知っている範囲で初めて自動返信機能をつけたメールソフトはMac用ですが,Mag
ellan Proというソフトで

http://www.makie.com/ja/products/magellanpro/magellanproautomation.html

無限ループにならないような仕組みを設けています。

ご参考までに。

[ ]
RE:00444 自動返信機能が欲しいNo.00451
秀まるお さん 07/07/19 11:34
 
 ループにならないようにするためには、

Precedence: bulk

 のようなヘッダを入れてメールを送るといいようです。あと、自動応答する
メールの場合も、出来れば応答元のメールにPrecedences:ヘッダがあるかどうか
見て、それがあるなら自動応答しないようにするのがいいです。

 ご自身のメールアドレスが特定の人にしか知られてないような物であれば、そ
こまでしなくてもいいと思いますけど。メールアドレスを一般に公開して本格的
な自動応答をやるなのら、上記のような処理が必要になると思います。

[ ]
RE:00415 自動返信機能が欲しいNo.00452
JR0LPL さん 07/07/19 12:17
 
たまちゃんさん、秀まるおさん、こんにちは。JR0LPLです。

まとめてお返事します。

たまちゃん> 今回の場合は差し出し人が特定されていますが,

たまちゃん> ・相手もたまたま自動返信を使っている場合
たまちゃん> ・相手が自分も加入しているメーリングリストに投稿した場合
たまちゃん> ・相手のアドレスを詐称しているウイルスメールが多数来た場合

特定の個人にしか自動返信しないので、今回は特定のメールアドレス
でフィルターをかければ良いと考えていました。今回は、たまたま、
相手が自動返信機能の無い携帯電話とHotmailだけでしたので、安心
していましたが、Hotmailの場合、JBBHOT+Becky!で運用されたら、
自動返信される恐れがあるので、無限ループにしないように工夫した
いと思います。

メーリングリストに関しては、どこも加入してませんが、今後の事を
考えて、無限ループにならない対策を実装しておこうと思います。

迷惑メールで相手のアドレスが詐称されている場合も困るので、今回
の運用では、ISP提供によるスパムフィルター+秀丸メールの迷惑
メールフィルター+ウィルス対策ソフトのスパムフィルター+
AyanoAkira氏のBBUSO MK2 +日本語メールのみにマクロが反応の5重
のチェックをして、厳重に運用しています。(これでもすり抜けられ
たら、僕の能力では手の打ちようが無いです)

秀まるお> ループにならないようにするためには、

秀まるお> Precedence: bulk

秀まるお> のようなヘッダを入れてメールを送るといいようです
秀まるお>あと、自動応答するメールの場合も、出来れば応答元の
秀まるお>メールにPrecedences:ヘッダがあるかどうか見て、それ
秀まるお>があるなら自動応答しないようにするのがいいです

わかりました。アドバイスありがとうございます。たまちゃんさんの
回答でも書きましたが、今回は「たまたま」大丈夫でしたが、無限
ループはマズイと思いますので、アドバイス頂いた方法を実装したい
と思います

たまちゃんさん、秀まるおさん、ありがとうございました。

[ ]
RE:00452 自動返信機能が欲しいNo.00453
JR0LPL さん 07/07/19 13:12
 
みなさん、こんにちは。JR0LPLです。

無限ループにならいように対策を実装しまして実験してみました。

実験は同一ISP内のAアドレスとBアドレスを使いました

手順

1.BアドレスからAアドレスへメールを送信
2.AアドレスからBアドレスへ自動返信
3.Bアドレスで自動返信を受信
4.3番のヘッダを見ると「Prefereces: auto」が付いている

という事で成功なのですが、一点困りました。

3番の後、Bアドレスで受信した自動返信に、BアドレスからAアドレスに「手動」
で返信すると「Prefereces: auto」が消えてしまい、Aアドレスから、再び自動
返信されてしまいました。

これは仕方ないと判断して宜しいでしょうか?どうかご教示頂ければと思います。
(メールの世界のルールもネットで今調べているのですが、思うように情報が得
られていません)
仕方のないようなら、自動返信の文面に「このメールには絶対返信しないで下さ
い」の一行を付け加えてみようと思います。

後もう一点困っているのですが、このマクロを秀丸メールの「受信が一段落した
時」に登録しているのですが、秀丸メールの自動振り分けが働かなくなってしま
いました。なので、苦し紛れに、マクロ内で自動振り分けしていますが、賢く無
くて、情けないです。


尚、対策を実装したマクロは以下になります。

//----------------------------------------------------------
//                     メインルーチン
//----------------------------------------------------------

loaddll "tkinfo.dll";

$Dir  = dllfuncstr("HomeDir")+"AutoReplay\\";
$ini  = $Dir + "Addr.ini";

#n = dllfunc( "DoFilter", 3, 2, 0 ); // メールの振り分け

// 自動返信機能のON/OFF判定

$a = getinistr( $ini, "Flag" , "AutoReplay" );
if ( $a != "Y" ) endmacro;

// 新着メッセージから From: の抽出

while( dllfunc( "SelectRecvMail" ) ) {
        $s = dllfuncstr("CurrentHeader", "Precedence:");
        $s = dllfuncstr("ToLower", $s);
        if( $s != "bulk" && $s != "junk" && $s != "auto" ) {
            $From = dllfuncstr("CurrentHeader", "From");
        }
}

#n = dllfunc( "SwitchUnread" ); // 対象となったメールを未読にする

// iniファイルで指定したメールアドレス=$From なら自動返信

$From = dllfuncstr( "SetEmailOnly" , $From );

#n =  getininum( $ini, "Addr" , $From );
if (#n == 1) call SendMail;

endmacro;

//----------------------------------------------------------------
//                     サブルーチン(自動返信用)
//----------------------------------------------------------------
// 指定したFrom:が有った場合、文面及び Subject をセットして送信
//----------------------------------------------------------------

SendMail:

// iniファイルから指定メッセージの抽出

  $a = str ( getininum( $ini, "Flag", "ReplayMsg" ) );
  $Subject = getinistr( $ini, "ReplyMsg" , $a );
 
// メッセージ作成
 
  #n = dllfunc( "SetQuietMode" , 1 );
  #n = dllfunc( "MakeReply" );
  #n = dllfunc( "SetHeader" , "Subject" , $Subject);
  #n = dllfunc("SetHeader", "Prefereces", "auto" );
  gofiletop;  // 元々ある文章をALL削除
  beginsel;   //         "
  gofileend;  //         "
  delete;     //         "
  insertfile $Dir+$Subject+".txt"; // 文面挿入
 
  #n = dllfunc("SendNow"); // Message Send
  #n = dllfunc( "SetQuietMode" , 0 );
  #handle = hidemaruhandle(0);  //editor Window Close
  #n = dllfunc("SetMainWndTop"); // "
  closehidemaruforced #handle;  // "
 return;

[ ]
RE:00453 自動返信機能が欲しいNo.00458
K'zawa さん 07/07/19 17:37
 
JR0LPLさん、こんにちは。
K'zawaです。

>3番の後、Bアドレスで受信した自動返信に、BアドレスからAアドレスに「手動」
>で返信すると「Prefereces: auto」が消えてしまい、Aアドレスから、再び自動
>返信されてしまいました。

Precedenceじゃないですか?
サブルーチン内でも間違ってますけど。

あと、whileループのくくりがおかしいです。
新着メール1通ごとに実行されるべき処理がループ外に出ていて、
結果的に最後の1通しか見てないようです。

[ ]
RE:00458 自動返信機能が欲しいNo.00459
JR0LPL さん 07/07/19 17:57
 
K'zawaさん、こんにちは。JR0LPLです。

ご指摘ありがとうございます。サブルーチン内の Precedence 記述ミスは気が付
いて直しました。

まだ「手動」返信での検証はしてないので、明日にでもやってみます。今日は疲
れました。

あと、whileのくくりがおかしいという事なので、見直します。

ありがとうございました。

[ ]
RE:00458 自動返信機能が欲しいNo.00460
JR0LPL さん 07/07/19 19:04
 
K'zawaさん、みなさん、こんにちは。JR0LPLです。

ご指摘を受けた点を修正してみました。

while( dllfunc( "SelectRecvMail" ) ) {
……
}

に関しまして勘違いしていました。

「最初の新着メールをチェックしたら終わる」

と思い込んでいましたが、マクロヘルプをよく読んだら、新着メール数だけLoop
するんですね。

>>3番の後、Bアドレスで受信した自動返信に、BアドレスからAアドレスに「手動」
>>で返信すると「Prefereces: auto」が消えてしまい、Aアドレスから、再び自動
>>返信されてしまいました。

この件も検証してみましたが、やはり、「手動」返信をすると
「Precedence: auto」
がヘッダーから消えてしまうようです。秀丸メールで消えているのか、ISPの
サーバーが削除してしまっているのか、いますぐ判断出来ないのが残念な点です。

ISPにも問い合わせしてみます。

修正したマクロを示したいと思います。if文の羅列でド素人みたいな作りですが、
解りやすさを優先して書いてみました。

//----------------------------------------------------------
//                     メインルーチン
//----------------------------------------------------------

loaddll "tkinfo.dll";

$Dir  = dllfuncstr("HomeDir")+"AutoReplay\\";
$ini  = $Dir + "Addr.ini";

#n = dllfunc( "DoFilter", 3, 2, 0 ); // メールの振り分け

// 自動返信機能のON/OFF判定

$a = getinistr( $ini, "Flag" , "AutoReplay" );
if ( $a != "Y" ) endmacro;

while( dllfunc( "SelectRecvMail" ) ) {

    // text/plain かつ iso-2022-jp の判定
    // その他の日本語メール方式もあるが、しばらくは
    // このメール形式のみマクロが反応するようにする

    $s = dllfuncstr("CurrentHeader" , "Content-Type:");
    $s = dllfuncstr("ToLower", $s); // $s を小文字に変換
    if ( strstr( $s , "text/plain" )  < 0 ) goto next;
    if ( strstr( $s , "iso-2022-jp" ) < 0 ) goto next;

    // 自動返信して良いか判定

    $s = dllfuncstr("CurrentHeader", "Precedence:");
    $s = dllfuncstr("ToLower", $s);
    if ($s == "bulk") goto next;
    if ($s == "junk") goto next;
    if ($s == "auto") goto next;

    // 新着メッセージから From: の抽出

    $From = dllfuncstr("CurrentHeader", "From");

    // iniファイルで指定したメールアドレス=$From なら自動返信

    $From = dllfuncstr( "SetEmailOnly" , $From );

    #n =  getininum( $ini, "Addr" , $From );
    if (#n == 1) call SendMail;

    // 対象となったメールを未読にする

    #n = dllfunc( "SwitchUnread" );

next:

}

// 全般的な設定の標準アカウントにフォーカスを戻す

openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
$account = getregstr( "DefaultUser" );
closereg;
#n = dllfunc( "SelectFolder" ,  $account , "受信" );

endmacro;

//----------------------------------------------------------------
//                     サブルーチン(自動返信用)
//----------------------------------------------------------------
//                文面及び Subject をセットして送信
//----------------------------------------------------------------

SendMail:

// iniファイルから指定メッセージの抽出

  $a = str ( getininum( $ini, "Flag", "ReplayMsg" ) );
  $Subject = getinistr( $ini, "ReplyMsg" , $a );
 
// メッセージ作成
 
  #n = dllfunc( "SetQuietMode" , 1 );
  #n = dllfunc( "MakeReply" );
  #n = dllfunc( "SetHeader" , "Subject" , $Subject);
  #n = dllfunc("SetHeader", "Precedence", "auto" );
  gofiletop;  // 元々ある文章をALL削除
  beginsel;   //         "
  gofileend;  //         "
  delete;     //         "
  insertfile $Dir+$Subject+".txt"; // 文面挿入
 
  #n = dllfunc("SendNow"); // Message Send
  #n = dllfunc( "SetQuietMode" , 0 );
  #handle = hidemaruhandle(0);    //editor Window Close
  #n = dllfunc("SetMainWndTop");  //       "
  closehidemaruforced #handle;    //       "
 return;

[ ]
RE:00460 自動返信機能が欲しいNo.00461
davinci1958 さん 07/07/19 21:15
 

2007/07/19(木) 21:09:29

こんにちは、JR0LPLさん

ダヴィンチ@ユーザーです。

プログラミングスタイルについて、ご参考になれば幸いです。

/*
** タイトル:『turukame.2:00460| RE 00458 自動返信機能が欲しい』
** 発信日:2007年07月19日(木) 19:04:40
** 発信者:JR0LPLさん
*/
>    if ($s == "bulk") goto next;
>    if ($s == "junk") goto next;
>    if ($s == "auto") goto next;
上記は、
if ($s == "bulk") continue;
if ($s == "junk") continue;
if ($s == "auto") continue;
・・・に書き換えられます。
もちろんラベルのnext:は不要になります。

または、
if ($s == "bulk" || $s == "junk" || $s == "auto" ) {
        自動返信処理・・・
}
・・・とすると一層読みやすくなるでしょう。
自動返信処理を別関数にしてしまった方が尚いいかも知れません。^o^

--
メーラー: HidemaruMail 4.81beta2 (WinNT,500)
OS: Windows2000 SP4

[ ]
RE:00461 自動返信機能が欲しいNo.00462
JR0LPL さん 07/07/20 01:26
 
ダヴィンチさん、こんにちは。JR0LPLです。

アドバイスありがとうございます。

今回は、ifの行にあるgoto文をcontinue;に変更して様子を見たいと思います。
早速、マクロの一部の処理の位置を変えましてgoto文を消しました。gotoは使
いたく無かったので、大変助かりかりました。

>if ($s == "bulk" || $s == "junk" || $s == "auto" ) {
>        自動返信処理・・・
>}
>・・・とすると一層読みやすくなるでしょう。
>自動返信処理を別関数にしてしまった方が尚いいかも知れません。^o^

ご提案頂いたこちらの方は、マクロが安定したら、取り組んでみます。

ありがとうございました。

[ ]