お願い:マクロ作成方法指南No.37987
dszhm さん 10/03/05 18:39
 
OS:Win XP SP3
秀丸エディタ:8.00 Beta41
秀丸メール:5.33
です。
あるメールマガジンの複数日分を一括受信しようとするとエラーになってしまい、ま
た、受信できたものも内容が壊れてしまうことがあります。
1つ(1日)分ずつ受信すればそのようなことが発生しないので、マクロでそれを実現
しようとしたのですが、メールを1通ずつ受信する方法がわかりませんでした。
識者の方にご教示願えればと思います。
よろしくお願いします。

[ ]
RE:37987 お願い:マクロ作成方法指南No.37988
秀まるお2 さん 10/03/05 21:29
 
 「設定・アカウント毎の設定...」の「メールサーバー」ページにある「メー
ル受信の高速化」がもしONになっているなら、それをOFFにすればうまくダウン
ロード出来るようになるかなぁと思います。

 そこがOFFでもダメということでしたら、メールサーバーがおかしいのですか
ね。だとしたら、「送受信・リモートメール...」の所から1通ずつ手作業でダ
ウンロードする、というのがノーマルな解決策ということになるかなぁと思いま
す。

 マクロでやるとしたら、リモートメール一覧の中で、1つ1つのメールを「ダ
ウンロード対象」としてから「リモートメール実行」ってことを繰り返しやった
らいいんじゃないかと思いますけども、それをやるマクロというのは、内部のコ
マンドコード知ってる人でないと作られないです。なので僕の方で作ってみまし
た。



 まず、「設定・アカウント毎の設定...」の左下にある「上級者向け設定」を
ONにした上で、さらに設定一覧から「上級者向け・その他」を選択します。そこ
の一番下に、「リモートメール一覧をフォルダとして表示する」があるのでそれ
をONにします。

 そうすると、アカウントの直下の一番下の所に「Remote」というフォルダが出
てきます。まずはそこを選択させます。

 そして、「送受信・リモートメール...」を実行します。すると最新のリモー
トメール一覧が取得されます。

 そして、問題は、そこにある未読メールを1通ずつダウンロードするというこ
とで、それは以下のマクロで出来ます。

    loaddll "tkinfo.dll";
    #count = dllfunc("MailCount");
    #i = 0;
    while( #i < #count ) {
        #n = dllfunc("SetMailIndex", #i);
        #unread = dllfunc("GetMailFlag", "unread");
        if( #unread == 1 ) {
            #n = sendmessage(hidemaruhandle(0), 0x111, 40343, 0 );
            #n = sendmessage(hidemaruhandle(0), 0x111, 40342, 0 );
            #n = dllfunc("TransmitCanceled");
            if( #n != 0 ) {
                message "キャンセル";
                break;
            }
        }
        #i = #i + 1;
    }
    endmacro;

 上記マクロの40343というのは「現在のメールをダウンロード対象にする」と
いうコマンドで、40342というのはリモートメールの「実行」操作のコマンドで
す。

 受信してる最中にPauseキーを押して中断すれば、マクロも中断します。

 これでどうでしょうか。

 ちょっと難易度は高いと思いますけど。

[ ]
RE:37988 お願い:マクロ作成方法指南No.38007
dszhm さん 10/03/08 14:07
 
メルマガが貯まって試してみるまで待っていたため、報告が遅れてしまい、申し訳あ
りません。

> 「設定・アカウント毎の設定...」の「メールサーバー」ページにある「メー
>ル受信の高速化」がもしONになっているなら、それをOFFにすればうまくダウン
>ロード出来るようになるかなぁと思います。
ご教示いただいた↑の方法でうまくいったみたいです。
しばらく、この方法で様子を見たいと思います。

お願いついでに、もう1つお願いします。
この設定を一時的に行って受信するマクロを作ってみましたが、以下の内容でよろし
いでしょうか?
----------- ここから -------------
$targetAccount = "????";
#nSts = dllfunc( "SelectFolder", $targetAccount, "受信" );

#nSts = dllfunc("LoadAccountProp", $targetAccount );
#svFlyingRecv = dllfuncstr("GetAccountProp", "fFlyingRecv");
#nSts = dllfunc("SetAccountProp", "fFlyingRecv", 0 );
#nSts = dllfunc("SaveAccountProp");

#nSts = dllfunc("Receive");

#nSts = dllfunc("LoadAccountProp", $targetAccount );
#nSts = dllfunc("SetAccountProp", "fFlyingRecv", #svFlyingRecv );
#nSts = dllfunc("SaveAccountProp");
---------- ここまで ---------------

[ ]
RE:38007 お願い:マクロ作成方法指南No.38008
秀まるお2 さん 10/03/08 14:28
 
 見た感じはそれでいいと思いますが、「メール受信の高速化」は、常にOFFに
して運用した方が安全じゃないかと思います。

 アンチウィルスソフトのメール検索とか、あと、通信経路に介在するタイプの
迷惑メールフィルター/セキュリティ系フィルターがあるとダメな例が多いです。

 あと、メール受信の高速化がONになってるかどうかは、送受信のやりとり記録
での、最初のLISTコマンド/UIDLコマンドの送り方で分かります。

 高速化ONの場合だと、LISTコマンドを送ったらすぐに(その応答を待たずに)
UIDLコマンドを送ります。

 OFFの場合は、LISTコマンドの応答が返ってきてからUIDLコマンドを送ります。

■ONの場合:
S LIST
S UIDL
R +OK ...
R ...(XXXXバイト)
R +OK
R ...(XXXXバイト)


■OFFの場合:
S LIST
R +OK ....
R ...(XXXXバイト)
S UIDL
R +OK
R ...(XXXXバイト)

[ ]
RE:38008 お願い:マクロ作成方法指南No.38012
dszhm さん 10/03/08 15:24
 
> 見た感じはそれでいいと思いますが、「メール受信の高速化」は、常にOFFに
>して運用した方が安全じゃないかと思います。
 今までそのメルマガ以外では問題が起きていないので、
 「高速化」は、ON のままとしてメルマガ受信時だけ
 見ていただいたマクロを使用して受信を行うようにします。

 お手数をおかけしました、ありがとうございました。

[ ]