受信時にマクロを自動実行させる方法につNo.34315
kahara さん 08/06/28 00:51
 
kahara と申します。

受信時(自動、手動問わず)に、受信したメール全てに対して、
特定のマクロを実行することが可能でしょうか?

可能である場合、どのようなマクロとして、どのような自動起動
設定を行えばよいのでしょうか?

現在、受信後のメールに対して、範囲指定した複数メールに対し
て処理を行わせるマクロを作成いたしました。
(具体的には、拡張ヘッダの追加処理)

この処理を、メール受信時に自動的に実行させたいと考えていま
す。
これは、この処理の後、追加した拡張ヘッダによる受信時の振り
分け設定が可能であることを前提としています。

このようなマクロ設定が可能でしょうか?

[ ]
RE:34315 受信時にマクロを自動実行させるNo.34317
秀まるお2 さん 08/06/28 09:44
 
 すべての受信したメール対象にってことであれば、SelectRecvMailを使えばい
いです。特定フォルダの中にある受信したメール対象なら、
SelectRecvMailnFolderがあります。詳しくはヘルプを参照ください。

 SelectRecvMail関数を使うとメール用フラグの「新着メール」がOFFになると
いう欠点がありますけど。

 受信したメール1つ1つ選択しながら動作する形になるので、見た目的にはか
なりかっこわるい動作になってしまいます。

[ ]
RE:34315 受信時にマクロを自動実行させるNo.34319
EA11R さん 08/06/28 11:08
 

EA11R@一般ユーザです。

> 受信時(自動、手動問わず)に、受信したメール全てに対して、
> 特定のマクロを実行することが可能でしょうか?
気に召す方法か分かりませんけど、僕のやっている方法を…。
今動かしているのは、日本語のメールの文字コードをISO-20022-JPに統一
させるものです。

・対象の振り分け設定で「振り分けコマンドの時のみ有効とする」をチェック
・マクロの最後で振り分けを実行

この方法だと、付与したメールのヘッダも対象にした振り分けも可能かと。
ただ、受信フォルダに一度入って、その後、メールを1つ1つ選択するのは同じ
なので見かけ上格好悪い、ってのは変わらないかと。
ウィンドウの再描画を禁止させていると、マシになるかもしれませんが。


> 可能である場合、どのようなマクロとして、どのような自動起動
> 設定を行えばよいのでしょうか?
タイミングは受信が一段落した時、です。
振り分けの設定に全部手を入れる必要がある、とか面倒ですけど。

[ ]
RE:34317 受信時にマクロを自動実行させるNo.34321
kahara さん 08/06/28 15:17
 
kaharaと申します。

> SelectRecvMail関数を使うとメール用フラグの「新着メール」がOFFになると
>いう欠点がありますけど。

 #n = dllfunc("SelectRecvMail");
として処理した後に、
 #n = dllfunc("SwitchUnread" );
を実行しても有効とならないようですが、同一マクロ内での
動作の規制のようなものが行われているのでしょうか?

最初に
 #c = dllfunc( "RecvMailCount" );
で受信メール数をカウントしておいて、その分
 #n = dllfunc("SelectRecvMail");
で処理しながら、われながら安直だとは思いながらも、
 #n = dllfunc("SwitchUnread" );
で未読処理が出来ないかやってみたのですが、全受信メール
に目的の処理はされていながら、一つも未読状態にはなって
いません。

[ ]
RE:34319 受信時にマクロを自動実行させるNo.34322
kahara さん 08/06/28 17:17
 
kaharaと申します。
EA11Rさん、コメントありがとうございます。


>・対象の振り分け設定で「振り分けコマンドの時のみ有効とする」をチェック
>・マクロの最後で振り分けを実行
>
>この方法だと、付与したメールのヘッダも対象にした振り分けも可能かと。

処理対象メールは、
 #n = dllfunc("SelectRecvMail");
で取得されているのでしょうか?

ご指摘のように、フォルダ移動を行わせている全ての振り分け
設定を【振り分けコマンド時のみ】としなければいけないのが、
ちとネックですね。
マクロの最後で振り分けさせるということで、ついでに振り分
けの高度な動作の指定で【未読にする】にすれば、まあまあか
なぁと思ったら、未読には出来ませんでした、、

今検討中のマクロでは、
 #n = dllfunc("SelectRecvMail");
を使っていますが、目的別のフォルダに受信時自動振り分けし
ており、未読が消えてしまうと、何のメールが来たかまったく
分からなくなるので、このやり方では実用的ではなさそうです。


>> 可能である場合、どのようなマクロとして、どのような自動起動
>> 設定を行えばよいのでしょうか?
>タイミングは受信が一段落した時、です。

#n = dllfunc("SelectRecvMail");
の存在を知らなかったことと、受信時には振り分け設定が働い
てしまうと思い込んでいたので、受信後では遅いかな、と思っ
ていました。

[ ]
RE:34321 受信時にマクロを自動実行させるNo.34323
capa さん 08/06/28 18:18
 
capa%秀丸メールユーザです。

秀まるおさんが書かれているように SelectRecvMail 自体は
メール用フラグの「新着メール」をOFFにするだけであって、
未読メールを既読にするわけではありません。

kaharaさんのマクロですべて既読になってしまうのは
不要な SwitchUnread を使用しているためだと思われます。


ただ「最後まで表示したら既読に」している場合など、未読から既読へ
の自動切り替えについての設定次第では、SelectRecvMailによって既読
になってしまうことはありえます。

なので、ユーザ毎の設定によらず処理したメールを未読にするには

if( !dllfunc( "IsUnread" ) ){
  #n = dllfunc( "SwitchUnread" );
}

などとすればよいのではないでしょうか。

[ ]
RE:34323 受信時にマクロを自動実行させるNo.34325
kahara さん 08/06/28 21:40
 
kaharaと申します。
capaさん、コメントありがとうございます。


>秀まるおさんが書かれているように SelectRecvMail 自体は
>メール用フラグの「新着メール」をOFFにするだけであって、
>未読メールを既読にするわけではありません。
>
>kaharaさんのマクロですべて既読になってしまうのは
>不要な SwitchUnread を使用しているためだと思われます。

勝手に新着メールフラグ=未読メールと勘違いしていました。
 #n = dllfunc("SwitchUnread" );
を削除して、未読状態のままであることが確認できました。
ありがとうございます。

ヘルプを読み直しました。
 #n = dllfunc("SelectRecvMail");
により、アイコンやフォルダ枠が水色とならなくなるようで
すが、未読メールの確認においては気になりません。

[ ]
RE:34325 受信時にマクロを自動実行させるNo.34326
秀まるお2 さん 08/06/28 22:41
 
 "SelectRecvMail"でgoogle検索するといろいろサンプルマクロが出てくると思
うので、その辺も参考にして欲しいです。

[ ]
RE:34319 受信時にマクロを自動実行させるNo.34328
kahara さん 08/06/29 23:05
 
kaharaと申します。

ご教示いただいた点を含めていろいろ試行錯誤し、一応希望
どおりのマクロ及び振り分け設定が可能となりました。

当方の利用仕様では、今回追加する拡張ヘッダでの振り分け
設定ではなく、それ以外のフォルダ移動の振り分け設定の方
が優先で構わないので、マクロの中で、当該メールが「受信」
フォルダにある時だけ振り分け関数を実行する、という作戦
が取れました。
コメントありがとうございました。

マクロで個別メールデータ変更処理させると、さすがに遅い
ですねぇ、、

[ ]
RE:34322 受信時にマクロを自動実行させるNo.34329
EA11R さん 08/06/29 23:24
 

EA11R@一般ユーザです。

> kaharaと申します。
> EA11Rさん、コメントありがとうございます。
いえいえ、あまり差し障りのないところだったので^^;

解決されたみたいなので、以下の点のみ
> 処理対象メールは、
>  #n = dllfunc("SelectRecvMail");
> で取得されているのでしょうか?
そんな便利な命令があったんですね。
単純に、受信フォルダに残っているメールを、SetMailIndex 命令で一番上から
選択して文字コードの変更、ヘッダの削除をやってます。
今更ですが、SelectRecvMail 命令でも同じことができそうですね。


ではでは

[ ]