特定受信メールをカスタマイズして自動転No.38425
てらん さん 10/05/04 21:00
 
ある特定アドレス@(複数)から来たメールの場合、それを受信したアドレスAから、
下記の処理が自動できるようにマクロでできるのでしょか?

1.特定アドレス@(複数)から着信した場合のみ、次の処理をする。その他のアド
レスから来たものは、何もしない。

2.着信したメールの本文のみAから転送(送信元@のアドレスを転送先へは送信し
ない)する。※転送先Bからは、アドレスAから通知されたものと認識されるものと
する。

3.転送先Bへ、BCCアドレスで数十人へ転送する。又は、転送先Bの各アドレスへ
1通づつ数十人へ送信する。 ※秀丸メールで数十人への同時転送ができるかどうか
が不明ですので、各アドレス毎に本文を送信したほうが良いのかと思いまして???

何卒、よろしくお願いいたします。

[ ]
RE:38425 特定受信メールをカスタマイズしNo.38430
秀まるお2 さん 10/05/04 22:47
 
 とりあえず、振り分けでの「そのまま転送」のアクションを使うのが一番簡単
だと思います。

 振り分けでの「そのまま転送」では不十分ということでしたら、マクロで転送
関係の処理をやることでなんとか出来るとは思います。

 似たような話は以前にもあったので、例えば過去ログサイトとかgoogleとかで
いろいろキーワードを指定して検索すると、マクロのサンプルもそれなりに出て
くると思います。その辺を参考にしていただくといいんじゃないかと思います。

> ※秀丸メールで数十人への同時転送ができるかどうか
> が不明ですので

 秀丸メール側には転送出来る先の制限は無いですが、メールサーバー側が、大
量の人へのメール送信を拒否してしてしまうケースはあります。例えばフリー
メール(Yahoo!メールやgmail)の場合だと、制限を受ける可能性があります。

 普通のメールサーバーなら、数十人でダメってことは無いと思います。

[ ]
RE:38430 特定受信メールをカスタマイズしNo.38437
てらん さん 10/05/06 16:58
 
秀まるお2さん、ご回答ありがとうございました。


> とりあえず、振り分けでの「そのまま転送」のアクションを使うのが一番簡単
>だと思います。

「そのまま転送」で試しているのですが、送信先が Bcc へ登録できず、To のみ登録
ができるようですが、何かおかしいのでしょうか?
転送先設定時に、アドレス帳が表示されて、一旦「編集モード」にして、再度「選択
モード」へ変更して、Bccへ登録しても、消えてしまうようです。

また、転送されたメールを見ると、Toとfromは、最初に送信した内容と同じもで、転
送したメールのアドレスがfromとして表示されません。(Toがfromへ移動しません。)

この設定が通常なのでしょうか?

お手数をお掛けしたしますが、教えてください。
何卒、よろしくお願い致します。

[ ]
RE:38437 特定受信メールをカスタマイズしNo.38440
秀まるお2 さん 10/05/06 17:23
 
 振り分けでの「そのまま転送」は、From:やTo:ヘッダは書き換えなくて、それ
とは別に、「Resent-To:」というヘッダ(またはResent-Bcc:ヘッダ)を使って
転送する物です。

 送信済みフォルダに入っている送信済みメールのヘッダを「すべて表示」にし
て見ると、たしかにResent-ToまたはResent-Bcc:ヘッダがあって、そこに宛先が
入っていると思います。

 「ファイル・そのまま転送...」で転送するテストをしていただいてもその辺
の仕組みが理解いただけるかなぁと思います。あと、そこのヘルプとかも見て欲
しいです。それと、googleで「resent-to」で検索すると、resent-toというヘッ
ダを使った転送についての話がいろいろ出てくると思います。

[ ]
RE:38440 特定受信メールをカスタマイズしNo.38442
てらん さん 10/05/06 19:34
 
ありがとうございます。

From:やTo:を変更するには、マクロで対応するしかないということですね。

こちらの都合で、送信元が表示されると問題になりますので、From:を変更する必要
がありますので、いまからマクロを勉強してみます。

お手数をお掛けいたしました。

[ ]
RE:38442 特定受信メールをカスタマイズしNo.38451
てらん さん 10/05/07 16:08
 
マクロ登録の自動起動の中にある「受信が一段落した時」にマクロを設定してヘッダ
を変更した後、転送しようと試みていますが、うまくいきません。

現在、次のマクロを設定してみましたが、メールを送信する際、『TKIFO.DLL:エディ
タ上で実行できないTKInfo.dll呼び出しが行われました。 関数コード=21』という
エラーが表示されてしまいます。
別の方法でも試みた見たのですが、沢山のエラーが出てきて手に負えません。
もしよろしければ、アドバイスをお願い致します。

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

if( dllfunc("RecvMailCountShow") == 0 ) {
      endmacro;
}

while( dllfunc("SelectRecvMail") ) {
  $from = dllfuncstr("CurrentHeader", "From");
  $from = dllfuncstr("SetEmailOnly", $from);

  if( $from =="aaa@yyyy.co.jp"){
  #n = dllfunc("MakeResentForward", "bbbb@yyyyy.co.jp", "open", "");
  #n = dllfunc( "DeleteHeader", "Return-Path" );
  #n = dllfunc( "DeleteHeader", "Received" );
  #n = dllfunc( "DeleteHeader", "Authentication-Results" );
  #n = dllfunc( "DeleteHeader", "Message-ID" );
  #n = dllfunc( "DeleteHeader", "X-Mailer" );
  #n = dllfunc( "DeleteHeader", "X-MimeOLE" );
  #n = dllfunc( "DeleteHeader", "Return-Path" );
  #n = dllfunc( "DeleteHeader", "Received" );
  #n = dllfunc( "DeleteHeader", "Authentication-Results" );
  #n = dllfunc( "DeleteHeader", "Message-ID" );
  #n = dllfunc( "DeleteHeader", "Thread-Index" );
  #n = dllfunc( "DeleteHeader", "X-Spam" );
  #n = dllfunc( "DeleteHeader", "X-AnalysisOut" );
  #n = dllfunc( "DeleteHeader", "Content-Type" );
  #n = dllfunc( "DeleteHeader", "Resent-Message-Id" );
 
  #n = dllfunc("SetHeader","From","ccccc@yyyyy.co.jp");
  #n = dllfunc("SendNow");
  }
}
endmacro;
//------

[ ]
RE:38451 特定受信メールをカスタマイズしNo.38452
秀まるお2 さん 10/05/07 16:20
 
 秀丸メールのマクロは一種のプログラミング言語のような物ではあるんですが、
残念ながら、デバッグの機能は無いです。なので、しいてバグの原因調査をする
には、例えば昔のBASIC時代でのprint入れまくり作戦、みたいな感じでやらない
とダメです。

> 現在、次のマクロを設定してみましたが、メールを送信する際、『TKIFO.DLL:エディ
> タ上で実行できないTKInfo.dll呼び出しが行われました。 関数コード=21』という
> エラーが表示されてしまいます。

 このエラーがどこで起きてるのか調べるには、とにかく1ステップずつ実行し
ては止めて、みたいなことをやればいいです。

 具体的には、

  $from = dllfuncstr("CurrentHeader", "From");
  message "CurrentHeader関数追加";
  $from = dllfuncstr("SetEmailOnly", $from);
  message "SetMailOnly関数追加";

 みたいな感じにすればいいです。そうやっていけば、最終的にどの文を実行し
てエラーになってるのか分かると思います。

[ ]
RE:38452 特定受信メールをカスタマイズしNo.38453
秀まるお2 さん 10/05/07 17:17
 
 エラーの原因ですが、

  #n = dllfunc("SendNow");

 とした後にそのままwhile( dllfunc("SelectRecvMail") )の所を実行すると、
エディタ・ウィンドウ上でSelectRecvMail関数が実行されて、結果エラーになる
のだと思います。

 そもそも、受信が一段落した時用のマクロでSendNowを呼び出すこと自体が問
題ありだと思うので、SendNowじゃなくてSendLaterにしないとダメだし、それと、
エディタを終了してもなおマクロ実行するように、

   #handle = hidemaruhandle(0);
   #main = dllfunc("MainWnd");
   setactivehidemaru #main;
   closehidemaruforced #handle;

 みたいな処理を入れないとダメだと思います。

 それと、そもそもSelectRecvMailでメール1つ1つ選択してたら効率悪いので、
転送したい対象メールだけ特定フォルダに振り分けるようにして、
RecvMailCountInFolderやSelectRecvMailInFolderを使った方が効率がいいと思
います。

[ ]
RE:38452 特定受信メールをカスタマイズしNo.38454
秀まるお2 さん 10/05/07 17:18
 
 それとさらに、MakeResetForwardで作成したメールのTo:を書き換えても、そ
こにはメールは届きません。

[ ]
RE:38454 特定受信メールをカスタマイズしNo.38455
てらん さん 10/05/07 18:37
 
ありがとうございました。
緊急性がありますので、専用PCで定期受信を数分毎に実行させる予定です。よって、
来ても1回の処理に実行されるのが、1〜2通だと思われます。
取り急ぎ、ご指摘のように、次のようにマクロを変更した結果、転送先が1箇所であ
れば、無事動くようになりました。
しかし、ご指定のように、ToやResent-Toへ数件のメールアドレスを入れても複数へ
は送信されません・・・・


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

if( dllfunc("RecvMailCountShow") == 0 ) {
      endmacro;
}

while( dllfunc("SelectRecvMail") ) {
  $from = dllfuncstr("CurrentHeader", "From");
  $from = dllfuncstr("SetEmailOnly", $from);

  if( $from =="aaa@yyyy.co.jp"){
  #n = dllfunc("MakeResentForward", "bbbb@yyyyy.co.jp", "open", "");
  #n = dllfunc( "DeleteHeader", "Return-Path" );
  #n = dllfunc( "DeleteHeader", "Received" );
  #n = dllfunc( "DeleteHeader", "Authentication-Results" );
  #n = dllfunc( "DeleteHeader", "Message-ID" );
  #n = dllfunc( "DeleteHeader", "X-Mailer" );
  #n = dllfunc( "DeleteHeader", "X-MimeOLE" );
  #n = dllfunc( "DeleteHeader", "Return-Path" );
  #n = dllfunc( "DeleteHeader", "Received" );
  #n = dllfunc( "DeleteHeader", "Authentication-Results" );
  #n = dllfunc( "DeleteHeader", "Message-ID" );
  #n = dllfunc( "DeleteHeader", "Thread-Index" );
  #n = dllfunc( "DeleteHeader", "X-Spam" );
  #n = dllfunc( "DeleteHeader", "X-AnalysisOut" );
  #n = dllfunc( "DeleteHeader", "Content-Type" );
  #n = dllfunc( "DeleteHeader", "Resent-Message-Id" );

  #n = dllfunc("SetHeader","From","ccccc@yyyyy.co.jp");
  #n = dllfunc("SetHeader","Resent-To","d1@yyyyy.co.jp;xx@yyyyy.co.jp;〜xx@y
yyyy.co.jp");

  #n = dllfunc("SendLater");

  #handle = hidemaruhandle(0);
  #main = dllfunc("MainWnd");
  setactivehidemaru #main;
  closehidemaruforced #handle;
  }
}
endmacro;
//------


MakeResentForwardでは、複数の転送は、無理なのでしょうか?
MakeResentForwardコマンドで、複数のメールアドレスを記入しておくと、13件まで
であればエディタが起動し(13件以上はエラーとなります)その分の変更と送信処理
をすればよさそうなのですが、数十件の転送先を考えていますので、これでは不可能
となります。

もし、MakeResentForwardで数十件のアドレスへ送信できないようであれば、受信時
に上記のマクロを起動させ
  #n = dllfunc("MakeResentForward", "bbbb@yyyyy.co.jp", "open", "");
の部分のメールアドレスを自分自身にして、再度自分自身から来たメールに対しては、
”振り分け”で「そのまま転送」で数十件のアドレスへ送信という2段階の処理にす
る必要があるということでしょうか?

いろいろと申し訳ございませんが、何卒、よろしくお願い致します。

---以下の内容はコミュニテックス会議室システムにより付加されました。
本文中のメールアドレスは伏せ字に変換されました。伏せ字にしたくない場合
はメールアドレスを""で囲んで書き込んでください。

[ ]
RE:38455 特定受信メールをカスタマイズしNo.38458
秀まるお2 さん 10/05/07 23:07
 
 MakeResentForwardじゃなくてMakeForwardで「転送メール」にしたらいいんじ
ゃないかと思いますが…。

 MakeResentForwardでやるにしても、宛先はセミコロンで区切るんじゃなくて、
コンマ区切りで指定したらいいんじゃないかと思います。そうすると1通転送す
るのに1通のメールで複数宛先に転送出来ます。

[ ]
RE:38458 特定受信メールをカスタマイズしNo.38463
てらん さん 10/05/08 15:44
 
ありがとうございました。

> MakeResentForwardでやるにしても、宛先はセミコロンで区切るんじゃなくて、
>コンマ区切りで指定したらいいんじゃないかと思います。そうすると1通転送す
>るのに1通のメールで複数宛先に転送出来ます。

カンマ区切りで1回の処理で転送できるようになりました。

お世話になりました。

[ ]