受信メールを加工して自動転送したいですNo.37637
プロキオン さん 10/01/15 12:09
 
みなさま

プログラムはできませんが、パソコンができる者がすくなく
社内担当となっている者です。
相談させて下さい。

システムから出されるエラーメッセージがあります。
それを加工して、各利用者に自動転送したいです。
加工対象は、件名と本文に複数あります。

メール転送ソフトや、メールソフトを探して見つかっただけ試しましたが、
思うようなものがありませんでした。
一番柔軟性があって、できそうなのが秀丸メールでした。

試しましたのは、
メールの転送を手作業で行えば、送信時のマクロ自動起動で、
本文の不要文字の削除、置き換えができました。件名はできませんでした。
(マクロの記録で書き出されたものを参考に、replaceallでやりました)

ただ、自動で行いたいため、メールの振り分けで「そのまま転送」にしましたが、
送信時のマクロ自動起動は作用しませんでした。


メールの振り分けで「そのまま転送」を行いつつ、
件名と本文の不要文字削除と文字置換えを行いたいのですが、
お助けいただけないでしょうか。

[ ]
RE:37637 受信メールを加工して自動転送しNo.37639
秀まるお2 さん 10/01/15 13:35
 
 受信したメールを加工して、それを「そのまま転送」で転送する、という作戦
がいいんじゃないかと思います。

 マクロとしては、まず、起動のタイミングとしては、「受信が一段落した時」
になります。

 そして、メールを加工するためには、SelctRecvMailまたは
SelectRecvMailInFolder関数を使ってループする形になります。

 マクロのやり方として、SelectRecvMailでループさせて、BeinEditMailで編集
許可してreplaceallfast関数などで編集し、SaveEditMailで保存して、次にそれ
を「そのまま転送」

マクロの例:

    loaddll "tkinfo.dll";
    if( dllfunc("RecvMailCountShow") == 0 ) {
        endmacro;
    }
    #wantsend = 0;
    while( dllfunc("SelectRecvMail") ) {
        #n = dllfunc("BeginEditMail");
        if( readonly ) {
            readonlyswitch;
        }
        if( browsemode ) {
            browsemodeswitch;
        }
        replaceallfast "test", "replaced";
        #n = dllfunc("SaveEditMail", 0, 1);
        #n = dllfunc("MakeResentForward", "xxxx@xxx.com", "sendlater");
        #wantsend = 1;
    }
    if( #wantsend != 0 ) {
        #n = dllfunc("StartSendRemainAll");
    }

 みたいな感じでいけると思います。

 replaceallfastおよびreplaceall分は、メール本文しか置換しません。メール
のSubject:ヘッダを加工するには、

   $s = dllfuncstr("CurrentHeader", "Subject:");

 のようにしてヘッダを取得して、その$s変数を適当に加工してから

   #n = dllfunc("SetHeader", "Subject:", $s);

 のようにするのがいいかと思います。あるいは、

    gofileend;
    beginsel
    moveto 0, -9999;
    replaceallfast "test", "replaced", inselect;

 のように、本文+ヘッダをすべて選択してから「inselect」付きで全置換する
のがいいと思います。

 ということでどうでしょ?

 各関数については「秀丸メール・マクロヘルプ」の方も参照してほしいです。
あと、関数名をgoogle検索すると、過去にここの会議室に出てきたマクロのサン
プルなんかも出てくると思います。その辺も参考になると思います。



 それと…、上記サンプルマクロは、今急いで書いただけのマクロなので、実際
にそのまま動くという保証は無いです。もし間違ってたらすみません。

[ ]
RE:37639 受信メールを加工して自動転送しNo.37640
プロキオン さん 10/01/15 16:35
 
ご返信ありがとうございます!

本文の置換えを、マクロの自動起動でやるところまでできました。
件名の置換えでつまづいています。

件名は最初の18文字が不要ですので、以下のようにしてみましたが、
件名全部が消えて空欄になってしまいます。

 $s = dllfuncstr("RootHeader", "Subject:");
 $s = rightstr($s, strlen($s) - 18 );
 #n = dllfunc("SetHeader", "Subject:", $s);

上の3行は
        replaceallfast "test", "replaced";
      →ここに入れています
        #n = dllfunc("SaveEditMail", 0, 1);

[ ]
RE:37640 受信メールを加工して自動転送しNo.37641
秀まるお2 さん 10/01/15 16:45
 
 メールを改変する処理なので、RootHeaderじゃなくてCurrentHeader関数でな
いとダメかと思います。

    $s = dllfuncstr("CurrentHeader", "Subject:");
    $s = midstr( $s, 18, 9999 );
    #n = dllfunc("SetHeader", "Subject:", $s);

 みたいな感じでいいと思います。

[ ]
RE:37641 受信メールを加工して自動転送しNo.37642
プロキオン さん 10/01/15 17:14
 
ありがとうございます。
最初の返信にもそのように書いていただいていました。

いろいろ試行錯誤しいていたときに
re.macを参考にしていたので、取り違えてしまいました。

思い通りできるようになりました!
ありがとうございました!!!

[ ]