受信確認No.22053
imahn さん 05/03/09 14:18
 
IMAHN と申します.いつも,秀丸および鶴亀メールを快適に使っております.また,
2年くらい前に質問した添付ファイル一括保存も重宝しております.

今日は,受信確認(開封通知)に関して質問をさせてください.

相手から私へメールが送られてきたときに
「メールを受け取りました」
というメールを送信したいのです.

もっと具体的には,振り分けられたフォルダ内のすべてのメールに対してい一斉に受
信確認のメールを送りたいのですが,何か方法はございますでしょうか?

[ ]
RE:22053 受信確認No.22056
秀まるお2 さん 05/03/09 14:55
 
 受信したメールすべてについて受信確認のメールを送るのはやめた方がいいと
思います。というのは、そういう受信確認のメールが迷惑メールになる可能性が
あるからです。というのは、例えばウィルスによってばらまかれたメールについ
てもそういう返信がなされると、それが、偽装された送り主に届いてしまうから
です。

 届いたメールの中から適当な物を複数選択してマクロ実行して返信するってこ
となら、例えばこんなマクロで出来ます。

    loaddll "tkinfo.dll";
    $account = dllfuncstr("CurrentAccount");
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) break;
        $to = dllfuncstr("CurrentHeader", "Reply-To");
        if( $to == "" ) {
            $to = dllfuncstr("CurrentHeader", "From");
        }
        if( $to != "" ) {
            $cmd = "turukame.exe unsentmail "
                    + "Account=\"" + $account + "\" "
                    + "Subject=受信の通知 "
                    + "To=\"" + $to + "\" "
                    + "Body=\"メールを受け取りました。\"";
            $id = dllfuncstr("CurrentHeader", "Message-Id");
            if( $id != "" ) {
                $cmd = $cmd + " In-Reply-To=\"" + $id
                     + "\" References=\"" + $id + "\"";
            }
            runsync2 $cmd;
        }
    }
    #n = dllfunc("UnlockSelection", 1);

[ ]
RE:22056 受信確認No.22059
imahn さん 05/03/09 16:29
 
早速の回答ありがとうございます.早速試してみましたが,この方法で大丈夫です.

> 受信したメールすべてについて受信確認のメールを送るのはやめた方がいいと>思
>います。

というご指摘に関しては,振り分け設定によって送られてくるメールが特定化されて
いてるのでそのような懸念はないと思いますが,このマクロの方法がより確実なので
安心して使うことができます.

とりあえずは,上記で解決なのですが,もう少し手を加えたいです.
メールの件名(Subject)を「[受信確認]相手のメールの件名」
本文(Body) を

 メールを受信しました。
 署名(アカウントごとの個別指定)

のようにしたいです.そこで,作っていただいたマクロをいろいろいじってみました.
メールの件名はうまくできましたが,署名がうまくできません.よろしければご教示
いただければと思います.

以下,改変してみました.

  loaddll "tkinfo.dll";
    $account = dllfuncstr("CurrentAccount");
    $subject = dllfuncstr("CurrentHeader","Subject");
  $sign = dllfuncstr("LoadTemplate", "sign", ""); %ここがおかしいらしい
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) break;
        $to = dllfuncstr("CurrentHeader", "Reply-To");
        if( $to == "" ) {
            $to = dllfuncstr("CurrentHeader", "From");
        }
        if( $to != "" ) {
            $cmd = "turukame.exe unsentmail "
                    + "Account=\"" + $account + "\" "
                    + "Subject=\"[受信確認] " + $subject + "\" "
                    + "To=\"" + $to + "\" "
                    + "Body=\"メールを受け取りました。\n " + $sign + "\" ";
            $id = dllfuncstr("CurrentHeader", "Message-Id");
            if( $id != "" ) {
                $cmd = $cmd + " In-Reply-To=\"" + $id
                     + "\" References=\"" + $id + "\"";
            }
            runsync2 $cmd;
        }
    }
    #n = dllfunc("UnlockSelection", 1);



[ ]
RE:22059 受信確認No.22060
秀まるお2 さん 05/03/09 16:56
 
 コマンドラインのBody=では、複数行の本文指定は出来ません。複数行指定す
るなら、BodyFile=を使わないといけないです。

 BodyFile=にて指定するには、あらかじめメール本文用のファイルが生成され
てるか、またはマクロからファイルを生成してやらないといけないです。マクロ
からファイルを生成するには、一度エディタを起動するしかありません。(また
は田楽DLLを使うか)

 とりあえず、固定のファイルを用意しておいて、BodyFile=でそのファイル名
を指定するって作戦はどうでしょ?

[ ]
RE:22060 受信確認No.22061
imahn さん 05/03/09 18:06
 
以下のように修正してみたところ,所望の結果が得られました.
ありがとうございました.

  loaddll "tkinfo.dll";
    $account = dllfuncstr("CurrentAccount");
    $subject = dllfuncstr("CurrentHeader","Subject");
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) break;
        $to = dllfuncstr("CurrentHeader", "Reply-To");
        if( $to == "" ) {
            $to = dllfuncstr("CurrentHeader", "From");
        }
        if( $to != "" ) {
            $cmd = "turukame.exe unsentmail "
                    + "Account=\"" + $account + "\" "
                    + "Subject=\"[受信確認] " + $subject + "\" "
                    + "To=\"" + $to + "\" "
                    + "bodyfile=\"D:\\Program Files\\TuruKame\\bodyfile.txt\
" ";
            $id = dllfuncstr("CurrentHeader", "Message-Id");
            if( $id != "" ) {
                $cmd = $cmd + " In-Reply-To=\"" + $id
                     + "\" References=\"" + $id + "\"";
            }
            runsync2 $cmd;
        }
    }
    #n = dllfunc("UnlockSelection", 1);

[ ]
RE:22061 受信確認No.22062
imahn さん 05/03/09 18:27
 
先ほどの方法だと,複数メールを選択したときに
メールの件名がおかしくなっていましたので以下のように修正しました.
これで大丈夫だと思います.

  loaddll "tkinfo.dll";
    $account = dllfuncstr("CurrentAccount");
    $bodyfile = "D:\\Program Files\\TuruKame\\bodyfile.txt";
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) break;
        $to = dllfuncstr("CurrentHeader", "Reply-To");
        if( $to == "" ) {
            $to = dllfuncstr("CurrentHeader", "From");
        }
        if( $to != "" ) {
     $subject = dllfuncstr("CurrentHeader", "Subject");
            $cmd = "turukame.exe unsentmail "
                    + "Account=\"" + $account + "\" "
                    + "Subject=\" [受信通知] " + $subject + "\" "
                    + "To=\"" + $to + "\" "
                    + "BodyFile=\"" + $bodyfile + "\" ";
            $id = dllfuncstr("CurrentHeader", "Message-Id");
            if( $id != "" ) {
                $cmd = $cmd + " In-Reply-To=\"" + $id
                     + "\" References=\"" + $id + "\"";
            }
            runsync2 $cmd;
        }
    }
    #n = dllfunc("UnlockSelection", 1);

[ ]
RE:22062 受信確認No.24327
imahn さん 05/09/20 15:26
 
こんにちは。Imahnです。
以前、質問した受信通知のマクロの件ですが、
久しぶりに実行しようとしたら、
起動しませんでした。
秀丸メールになってマクロの変更点などがあるのでしょうか?
>先ほどの方法だと,複数メールを選択したときに
>メールの件名がおかしくなっていましたので以下のように修正しました.
>これで大丈夫だと思います.
>
>  loaddll "tkinfo.dll";
>    $account = dllfuncstr("CurrentAccount");
>    $bodyfile = "D:\\Program Files\\HimedamuMail\\bodyfile.txt";%パスを変更
>    #n = dllfunc("LockSelection");
>    while(1) {
>        #n = dllfunc("EnumSelection", 1);
>        if( #n == 0 ) break;
>        $to = dllfuncstr("CurrentHeader", "Reply-To");
>        if( $to == "" ) {
>            $to = dllfuncstr("CurrentHeader", "From");
>        }
>        if( $to != "" ) {
>     $subject = dllfuncstr("CurrentHeader", "Subject");
>            $cmd = "turukame.exe unsentmail "
>                    + "Account=\"" + $account + "\" "
>                    + "Subject=\" [受信通知] " + $subject + "\" "
>                    + "To=\"" + $to + "\" "
>                    + "BodyFile=\"" + $bodyfile + "\" ";
>            $id = dllfuncstr("CurrentHeader", "Message-Id");
>            if( $id != "" ) {
>                $cmd = $cmd + " In-Reply-To=\"" + $id
>                     + "\" References=\"" + $id + "\"";
>            }
>            runsync2 $cmd;
>        }
>    }
>    #n = dllfunc("UnlockSelection", 1);

[ ]
RE:24327 受信確認No.24329
秀まるお2 さん 05/09/20 15:49
 
 秀丸メールになっても特にマクロの動作には仕様変更は無いはずです。

>    $bodyfile = "D:\\Program Files\\HimedamuMail\\bodyfile.txt";%パスを変更

 ここですが、もし鶴亀メールから秀丸メールにアップグレードインストールし
た場合りら、プログラム用フォルダは従来通り「TuruKame」というフォルダ名に
なっているはずだと思います。そこを確認してみてほしいです。

[ ]
RE:24329 受信確認No.24330
imahn さん 05/09/20 15:57
 
秀丸メールのパスは現在、
D:\Program Files\HidemaruMail
です。鶴亀メールを削除して秀丸メールをインストールしたのですが、
誤って
bodyfile.txt
を削除していましたが、それ以外は触っていません。
マクロは別フォルダにも保存していたので
それを上記フォルダにコピーしました。

具体的な症状としては、

1)To に相手のメールアドレスが記入されない。
2)Subjectは正しく記入される
3)本文は、何も記入されない

です。

> 秀丸メールになっても特にマクロの動作には仕様変更は無いはずです。
>
>>    $bodyfile = "D:\\Program Files\\HimedamuMail\\bodyfile.txt";%パスを変更
>
> ここですが、もし鶴亀メールから秀丸メールにアップグレードインストールし
>た場合りら、プログラム用フォルダは従来通り「TuruKame」というフォルダ名に
>なっているはずだと思います。そこを確認してみてほしいです。

[ ]
RE:24330 受信確認No.24331
秀まるお2 さん 05/09/20 16:22
 
 こちらで同じようなマクロを作成してテストした限りは、ちゃんと未送信フォ
ルダに適当なメールが入りました。

 はて、なんでしょ?

 とりあえず、

    runsync2 $cmd;

 としている所の直前に、

    message $cmd;

 を入れてみて、たしかにコマンドラインが目的通りになっているかどうか確認
してみるというのはどうでしょ?

 もし、コマンドラインが間違っているようなら、何か、CurrentHeader関数か
何かの動作が期待通りでないってことになるかと思います。

 あと、Windowsのスタートメニューの「ファイル名を指定して実行...」から同
じコマンドラインを指定してみて、それでたしかに目的のメールが生成されるか
どうか確認してみると何か分かるかもしれないです。たとえば、

 "D:\program files\hidemarumail\turukame.exe" unsentmail to="abc"

 というコマンドライン指定をしてみて、それでたしかにTo:が"abc"のメールが
生成されるかどうか確認してみるとか。

 ちなみに僕の所でテストしたのは秀丸メールV4.55β2です。

[ ]
RE:24330 受信確認No.24332
秀まるお2 さん 05/09/20 16:23
 
 もしかして、プログラム用ファイル(turukame.exe等)を手でコピーしたり移
動したりしたのでしたら、DLLファイルをコピー/移動し忘れてるかもしれない
です。たとえばtkinfo.dllファイルが古いバージョンのものだったりすると、マ
クロの動作全体がおかしくなります。

 もしかしてそういうことでしたら、もう一度秀丸メールの最新版をインストー
ルし直してみてほしいです。

[ ]
RE:24331 受信確認No.24334
imahn さん 05/09/20 17:10
 
以下の事を行ってみましたがダメでした。

1)秀丸と秀丸メールをアンインストールしました(フォルダも完全消去)
2)最新版の秀丸と秀丸メールをインストールしました。
3)マクロのテストを実行し、動作を確認しました。
4)コマンドラインから "D:\program files\hidemarumail\turukame.exe" unsentm
ail to="abc"
を実行し、動作を確認しました。
5)受信通知のマクロ(初期バージョン)を実行しましたが、同様の症状ができまし
た。to や本文が空白。
6)toの前に"aaa"のテキストを入れてみるとaaaは表示されるが、toは表示されませ
んでした。

(初期バージョン)

    loaddll "tkinfo.dll";
    $account = dllfuncstr("CurrentAccount");
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) break;
        $to = dllfuncstr("CurrentHeader", "Reply-To");
        if( $to == "" ) {
            $to = dllfuncstr("CurrentHeader", "From");
        }
        if( $to != "" ) {
            $cmd = "turukame.exe unsentmail "
                    + "Account=\"" + $account + "\" "
                    + "Subject=受信の通知だよ " %文字列を変えました
                    + "To=\"aaa" + $to + "\" " %aaa を加えました
                    + "Body=\"メールを受け取りました。\"";
            $id = dllfuncstr("CurrentHeader", "Message-Id");
            if( $id != "" ) {
                $cmd = $cmd + " In-Reply-To=\"" + $id
                     + "\" References=\"" + $id + "\"";
            }
            runsync2 $cmd;
        }
    }
    #n = dllfunc("UnlockSelection", 1);

[ ]
RE:24334 原因判明--受信確認No.24336
imahn さん 05/09/20 18:01
 
受信確認マクロがうまくいかない原因が判明しました。

念のためテストメールを受信してマクロを実行したら
うまく動作したので、
うまくいかなかったメールとを比較したら
受信メールのFromが
"山田太郎"<xxxxxx@hogehoge.com>
となっており、ダブルクォテーションが
入っているとうまく動作しないようです。

問題はこれをどのように修正すればよいかということのようです。



[ ]
RE:24336 原因判明--受信確認No.24337
imahn さん 05/09/20 19:00
 

さしあたりの回避策として

$to = dllfuncstr("CurrentHeader", "Return-Path");

のようにFrom をReturn-Path
に変更するとうまくいきますが、
あまり最善の解決策のような気がしません。
(ありえないとは思いますが、Return-Pathが違っている場合とか)

相手に返信アドレスを登録させることが一番なんでしょうが・・・

一般に
From や Subject などのヘッド部分ににエスケープ文字を含んでいるとき

これを変数にする方法があれば教えていただければと思います。


>受信確認マクロがうまくいかない原因が判明しました。
>
>念のためテストメールを受信してマクロを実行したら
>うまく動作したので、
>うまくいかなかったメールとを比較したら
>受信メールのFromが
>"山田太郎"<xxxxxx@hogehoge.com>
>となっており、ダブルクォテーションが
>入っているとうまく動作しないようです。
>
>問題はこれをどのように修正すればよいかということのようです。
>
>

[ ]
RE:24337 原因判明--受信確認No.24342
秀まるお2 さん 05/09/21 09:29
 
 From:ヘッダにダブルクォーテーション記号か入っているケースはまったく想
定してませんでした。そもそものマクロのバグですみませんでした。

 で、その、秀丸メール起動時コマンドラインでの、to=XXXXの中で
ダブルクォーテーション記号そのものを指定する方法ですが、特別な裏技を使わ
ないと指定できないことが分かってしまいました。以下にサンプルマクロを掲載
するので、そのように直してほしいです。

    loaddll "tkinfo.dll";
    $account = dllfuncstr("CurrentAccount");
    $bodyfile = "D:\\Program Files\\TuruKame\\bodyfile.txt";
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) break;
        $to = dllfuncstr("CurrentHeader", "Reply-To");
        if( $to == "" ) {
            $to = dllfuncstr("CurrentHeader", "From");
        }
        if( $to != "" ) {
            call UrawazaConv $to;
            $to = $$return;
            $subject = dllfuncstr("CurrentHeader", "Subject");
            $subject = " [受信通知] " + $subject;
            call UrawazaConv $subject;
            $subject = $$return;
            $cmd = "turukame.exe unsentmail "
                    + "Account=\"" + $account + "\" "
                    + "Subject=" + $subject + " "
                    + "To=" + $to + " "
                    + "BodyFile=\"" + $bodyfile + "\" ";
            $id = dllfuncstr("CurrentHeader", "Message-Id");
            if( $id != "" ) {
                $cmd = $cmd + " In-Reply-To=\"" + $id
                     + "\" References=\"" + $id + "\"";
            }
            runsync2 $cmd;
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    endmacro;


UrawazaConv:
    ##len = strlen($$1);
    ##i = 0;
    $$ret = "\"\x01";
    while( ##i < ##len ) {
        $$p = midstr( $$1, ##i, 1 );
        ##p = ascii($$p);
        if( (##p >= 0x81 && ##p <= 0x9F)
         || (##p >= 0xE0 && ##p <= 0xFC) ) {
            $$ret = $$ret + midstr( $$1, ##i, 2 );
            ##i = ##i + 1;
        } else if( $$p == "\"" ) {
            $$ret = $$ret + "%22";
        } else if( $$p == "%" ) {
            $$ret = $$ret + "%25";
        } else {
            $$ret = $$ret + $$p;
        }
        ##i = ##i + 1;
    }
    $$ret = $$ret + "\"";
    return $$ret;

[ ]
RE:24342 原因判明--受信確認No.24344
imahn さん 05/09/21 14:25
 
正しく動作いたしました。助かりました。ありがとうございました。

> From:ヘッダにダブルクォーテーション記号か入っているケースはまったく想
>定してませんでした。そもそものマクロのバグですみませんでした。

職場の ActiveMail から送信されるメールにダブルクォテーションが
自動で挿入されるみたいです。
こうしたケースは稀なのかもしれませんが、私も勉強になりました。

重ねて御礼申し上げます。

[ ]