特定のメールを通常の転送するNo.00622
rn さん 16/11/10 19:27
 
ある条件(表題に指定の文字がある)のメールを受信した時に
指定の宛先に「そのまま転送」でなく「通常転送」を行いたいです

メールの振り分け機能でできそうなのですが、そのまま転送だと
私からの送信だとわからないので、通常の転送をしたいです

どのような設定を行えばできるでしょうか?
マクロの中でも探してみたのですが見つけられませんでした

[ ]
RE:00622 特定のメールを通常の転送するNo.00623
秀まるお2 さん 16/11/11 09:45
 
 メールを普通の「転送メール」で転送するのは、すみませんが現状マクロを使
わないと実現できません。

 マクロでやる場合の作戦としては・・・

 1.自動転送する用のフォルダを1つ作っておく。
 2.振り分け設定にて、自動転送したいメールをそのフォルダへ
   振り分けるよう設定しておく。
 3.自動転送用のマクロを作ってそれを「マクロ・マクロ登録...」
   の「自動起動」ページ中の「受信が一段落した時」に登録する。

 です。で、そのマクロの例を1つ掲載させていただきます。マクロの中の最初
の「$forward_to = 」以下の3行はご自身に併せて書き換える必要があります。

 自動転送や自動返信のご要望は多々あるので、なんとか振り分けだけで実現で
きるように出来ないか、考えてみます。

----------------自動転送マクロ------------------------------------
    //自動転送マクロのサンプル。
    //自動転送する用のフォルダにメールを振り分けるようすると、そこのメールを
    //転送します。
    //
    //書き換えが必要な箇所:
    //    $forward_to = "..."       → 転送先のメールアドレス
    //    $forward_template = "..." → 転送に使うテンプレート(別途作成する)
    //    $account = "..."          → 自動転送対象のメールアカウント
    //    $folder = "..."           → 自動転送対象のフォルダ
    //
    //このマクロは「マクロ・マクロ登録...」の「自動起動」ページの
    //「受信が一段落した時」に登録して使う用です。
    //
    //このマクロとは別に、自動転送するメール用の振り分け設定と、自動転送
    //用のテンプレートの作成も別途必要になります。
    //
    $forward_to = "xxxxx@xxxxx.co.jp";
    $account = "ご自身のアカウント名";
    $folder = "受信\\自動転送";         // 受信フォルダ配下の"自動転送"フォ
ルダ。

    loaddll "tkinfo.dll";
    #count = dllfunc("GetFolderMailCount", $account, $folder, "hot");
    if( #count == 0 ) {
        //新着メールなし
        endmacro;
    }
    $prev_account = dllfuncstr("CurrentAccount");
    $prev_folder = dllfuncstr("CurrentFolder");
    #n = dllfunc("SelectFolder", $account, $folder);
    while(1) {
        #n = dllfunc("SelectRecvMailInFolder");
        if( #n == 0 ) {
            break;
        }
        #n = dllfunc("MakeForward");
        #n = dllfunc("SetHeader", "To", $forward_to);
        #n = dllfunc("SendLater");
        #handle = hidemaruhandle(0);
        #n = dllfunc("SetMainWndTop");
        closehidemaruforced #handle;
    }
    #n = dllfunc("SelectFolder", $prev_account, $prev_folder);

    //受信した直後に即転送したい場合は以下の行をコメントじゃなくする。
    //#n = dllfunc("TransmitCustom", $account + ":S");
----------------自動転送マクロおわり------------------------------

[ ]
RE:00623 特定のメールを通常の転送するNo.00628
rn さん 16/11/14 13:30
 
秀まるお2 さん
早速のコメントありがとうございます

再質問(再要望)についてよろしくお願いします

<1>
転送時に社内品番を付与してから転送を行いたく、変換リストによる置換(HmfListR
eplace.hmf)の使用を考えています その場合、マクロのどの部分に「filter文」を
挿入すればよろしいでしょうか

<2>
また、変換リストによる置換(HmfListReplace.hmf)では、選択箇所のみの置換のよ
うですが、メール全体を置換対象にする方法をご教授願います

<3>
「$forward_template」を別途作成するとありましたが、どの様に作成するのでしょうか
アカウントごとの設定−テンプレート/署名で作成した場合、すべての転送に対して
適用されてしまいませんか  今回の転送の場合のみに適用したいです
また、マクロのどの部分に挿入すればよろしいでしょうか

よろしくお願いします

> メールを普通の「転送メール」で転送するのは、すみませんが現状マクロを使わ
>ないと実現できません。
>
> マクロでやる場合の作戦としては・・・
>
> 1.自動転送する用のフォルダを1つ作っておく。
> 2.振り分け設定にて、自動転送したいメールをそのフォルダへ
>   振り分けるよう設定しておく。
> 3.自動転送用のマクロを作ってそれを「マクロ・マクロ登録...」
>   の「自動起動」ページ中の「受信が一段落した時」に登録する。
>


[ ]
RE:00628 特定のメールを通常の転送するNo.00629
秀まるお2 さん 16/11/14 14:56
 
> <1>
> 転送時に社内品番を付与してから転送を行いたく、変換リストによる置換(HmfListR
> eplace.hmf)の使用を考えています その場合、マクロのどの部分に「filter文」を
> 挿入すればよろしいでしょうか

        #n = dllfunc("SetHeader", "To", $forward_to);

 の直後でいいと思います。(直前でもいいですが)

> <2>
> また、変換リストによる置換(HmfListReplace.hmf)では、選択箇所のみの置換のよ
> うですが、メール全体を置換対象にする方法をご教授願います

 変換モジュールによる変換は、範囲選択した部分を対象にしか実行できないの
で、メール全体を対象とするなら、

    gofiletop;
    beginsel;
    gofileend;
    endsel;

 としてメール全体を選択し、それからfilter文を実行すればいいと思います。

 「gofiletop +  beginsel + gofileend」だとメール本文をすべて選択します。
メールのヘッダも含めて選択するなら、

    moveto 0, -9999;
    beginsel;
    gofileend;
    endsel;

 になります。

> <3>
> 「$forward_template」を別途作成するとありましたが、どの様に作成

 すみません。これはマクロの間違いです。この行は不要でした。

 本当はテンプレートも個別指定するようなマクロにしようと思ったんですが、
テンプレートを個別指定して「転送メール」を実行する命令
(MakeForwardCustomのような関数)が存在しなくて実現不可でした。

 とりあえず、アカウント設定か、またはフォルダ毎設定で適当な転送用テンプ
レートを指定してもらわないとダメです。それか、何か個別にテンプレート指定
したい場合は、

        #n = dllfunc("MakeForward");

 の直後に

        #n = dllfunc("SwitchTemplate", "テンプレート名");

 みたいな形でテンプレート切り換えするしか無いです。

[ ]
RE:00629 特定のメールを通常の転送するNo.00643
rn さん 16/11/17 11:54
 
秀まるお2さま

ご教授 ありがとうございます

メール本文を選択して変換モジュールによる変換を行ってみたのですが

「変換リストの中に変換元または変換先文字列が空か、または区切り文字が入ってい
ない行があります  行番号=1」

とのエラーが出て変換できません

変換リストを確認してみたのですが、指摘のような内容はありませんでした ”変換
元,変換先”のようになっています
ちなみに、編集−変換−変換リストで置換 の操作で同じ変換リストを使った場合は
変換でします
具体的に、変換リストのどのようなところを確認すればよろしいでしょうか?


> 変換モジュールによる変換は、範囲選択した部分を対象にしか実行できないの
>で、メール全体を対象とするなら、
>
>    gofiletop;
>    beginsel;
>    gofileend;
>    endsel;
>
> としてメール全体を選択し、それからfilter文を実行すればいいと思います。
>


[ ]
RE:00643 特定のメールを通常の転送するNo.00644
秀まるお2 さん 16/11/17 13:50
 
 テストしてて、HmfListReplaceのバグを1つ見つけてしまいました。

 マクロを作成するのに、「キー操作の記録」と「キー操作の保存」を利用され
たりしてませんでしょうか。もしそれでマクロを生成されてたとすると、その
マクロのfilter文が間違った指定になってしまってると思います。

 filter文の第3パラメータは、たとえば

 filter "HmfListReplace", "ListReplace", "00000,C:\ReplaoceList.txt";

 みたいな感じで「コンマ」が1つ入ってからファイル名を指定しないといけな
いですが、「キー操作の記録」&「キー操作の保存」で作成すると、これが

 filter "HmfListReplace", "ListReplace", "0000C:\ReplaoceList.txt";

 のように、5桁必要なはずの数値が4桁で、しかもコンマが抜けてしまってま
す。結果、ファイル名の指定が無視されてしまうようです。

 もしそういうマクロになってしまっておられる場合は、パラメータの中にある
ファイル名の直前にコンマを入れれば直ると思います。

 他の可能性としては・・・

 もしかして、置換リスト用のファイルを「C:\Program files」配下のどこかに
置いてるとすると、いわゆるバーチャルストアという仕組みのせいで、間違った
ファイルが指定されたかのような扱いになる可能性があります。もしそういう指
定をされてる場合は、「ドキュメント」配下かどこか、別の所に変更してみて欲
しいです。

 その辺試してもダメでしたら、具体的なマクロの、filter文の所の内容だけで
も教えて欲しいです。

---------------------------
 HmfListReplace変換モジュールは、今日中に直してまたライブラリにアップ
ロードさせていただきます。

[ ]
RE:00644 特定のメールを通常の転送するNo.00645
秀まるお2 さん 16/11/17 14:47
 
 変換モジュールのバグ修正するついでに、置換リストでエラーになった時には
ファイル名も表示するように直しました。

 それで解決のヒントになるかもしれません。

 今アップロードしました。

    http://hide.maruo.co.jp/lib/hmconv/hmflistreplace120.html

[ ]
RE:00644 特定のメールを通常の転送するNo.00646
rn さん 16/11/17 18:50
 
秀まるお2さま

> マクロを作成するのに、「キー操作の記録」と「キー操作の保存」を利用された
>りしてませんでしょうか。

記録or保存ではなく、作成していただいたマクロにfilter文を追加しました


> filter文の第3パラメータは、
> その辺試してもダメでしたら、具体的なマクロの、filter文の所の内容

内容です(モジュールの説明テキストを参考にしました)
filter "HmfListReplace" , "ListReplace" , "00000,C:\\TuruKameData\\アカウン
ト名\\変換リスト.txt";


> HmfListReplace変換モジュールは、アップロード

新しいモジュールにしてみましたが同じエラーです

「変換リスト.TXT」は読めて(見つけられて)いるようです、、、
**************


[ ]
RE:00646 特定のメールを通常の転送するNo.00647
秀まるお2 さん 16/11/17 19:21
 
 filter文は正しいような気がします。

 あと確認するとしたら、その「変換リスト.txt」ファイルの中身を僕が調べる
しか無いような・・・

 試しに別のファイル、例えば

 a (タブ) あ

 みたいに、単純に"a"を"あ"に変換する1行だけのファイルを作って試してみ
るとか・・・。

 ファイルのエンコード形式は、Shift-JIS形式でやってみて、それでもダメな
らUnicode (UTF-16、BOMあり)で保存して試してみてどうでしょうか。

 あるいは、とりあえず秀丸メール上で実行するのが関係してるかもしれないの
で、そのfilter文1つだけのマクロを作って秀丸エディタ上で実行してみて、そ
れでうまくいくなら秀丸メールのエディタ・ウィンドウ上で実行してどうか試し
てみるとか。

 いろんな組み合わせ(秀丸エディタ上かどうか、別のファイルでどうか、
Shift-JISかUTF-16か等)でいろいろ試してうまくいくパターンとダメな
パターンを見極めていただければ、それが解決のヒントになりそうな気がします。
すみませんがその辺やってみて欲しいです。

 それと・・・もしかして秀丸メールのバージョンが最新(Version 6.58)でな
い場合は最新版に入れ替えてからテストお願いします。

[ ]
RE:00645 特定のメールを通常の転送するNo.00648
colder さん 16/11/17 21:55
 
すごくどーでもいいことなんですが、HmfListReplaceのソースコードを眺めていたら
24行目に以下のdefineマクロを見つけました
#define tostr(a) #a
で、これが361行目で
tostr(__LINE__)
こんな感じで使われています。
デバグ用のコードで使われているだけなのでこれで動作がおかしくなることはないで
すが、
現行のコードだと単に"__LINE__"という文字列が出力されるだけですが、これは想定
通りの動作なのでしょうか?
行番号を出力させようとしているのなら
以下のように#defineマクロを二重にしないといけないです。
#define tostr(a) tostr2(a)
#define tostr2(a) #a

[ ]
RE:00647 特定のメールを通常の転送するNo.00651
rn さん 16/11/18 09:03
 
秀まるお2さま

申し訳ありませんでした
単純な私の設定間違いでした

> filter文は正しいような気がします。
> 試しに別のファイル、例えば
> a (タブ) あ

を読んでハタと、、、
変換リストは、,(カンマ)区切りで作成しておりました

パラメータ設定を変更したら無事動きました
大変失礼しました


無事動き出したのですが、メール本文の中に半角カナ文字が含まれており、どうする
かのダイアログが表示されて、動作が止まってしまいました。「全般的な設定・上級
者向け・確認メッセージ・確認メッセージ2」
にて表示しないようにできますが、この設定だとすべてのメース送信のときに表示さ
れなくなってしまいます

今回の自動転送メールの時のみ、ダイアログを表示しないで全角半角に変換してから
送信するように設定することは可能でしょうか

何度も何度も申し訳ありませんが、ご教授お願いします

[ ]
RE:00648 特定のメールを通常の転送するNo.00652
秀まるお2 さん 16/11/18 09:16
 
 まいどどうもです。

 問題の箇所ですが、たしかにバグってるようでした。別のソースコードでは、
ちゃんと#define2回作戦になってました。

#define tostr(n) tostr_(n)
#define tostr_(n) #n

            ErrorMessage( "内部エラー line=" tostr(__LINE__) );

 みたいにしてるのがありました。何かコピペミスしたのかなぁと思います。

 ということで、今度アップロードする時には直しておきます。

[ ]
RE:00651 特定のメールを通常の転送するNo.00653
秀まるお2 さん 16/11/18 09:41
 
 半角カナの警告を出さないようにするのは、レジストリを書き換えて
EnvChangedDanger呼び出しする必要があります。それを実行したらまた元に戻す
作業も必要なので、ちょっと手間がかかります。

 マクロのサンプルを1つ掲載します。

    loaddll "tkinfo.dll";
    #n = dllfunc("NewMail");
    #n = dllfunc("SetHeader", "Subject", "テスト");
    #n = dllfunc("SetHeader", "To", dllfuncstr("CurrentHeader","From"));
    gofiletop;
    beginsel;
    gofileend;
    insert "ハンカクモジデス\n";   //ここは実際には半角カナです。

    //半角カナの警告を出さなくする
    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    #confirmPrev = getregnum("Confirm");
    if( (#confirmPrev & 2) != 0 ) {
        writeregnum "Confirm", #confirmPrev ^ 2;
        closereg;
        #n = dllfunc("ExecAtMain", "EnvChangedDanger");
    } else {
        closereg;
    }

    #success = dllfunc("SendLater");

    //半角カナの警告を元に戻す
    if( (#confirmPrev & 2) != 0 ) {
        openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
        writeregnum "Confirm", #confirmPrev;
        closereg;
        #n = dllfunc("ExecAtMain", "EnvChangedDanger");
    }

    if( #success != 0 ) {
        exit;
    }

 このマクロにある「半角カナの警告を出さなくする」と「半角カナの警告を元
に戻す」を、メール送信の処理(SendLaterまたはSendNow呼び出し)の直前/直
後に入れたらいいかと思います。

[ ]
RE:00653 特定のメールを通常の転送するNo.00655
秀まるお2 さん 16/11/18 10:13
 
 ちなみにですが、警告を出さなくしても、標準の設定だと半角カナは全角に変
換されて送信されます。

 半角のまま送信したい場合は、「全般的な設定・上級者向け・送信時の
エンコード」の「半角カナを送信可能にする」をONしないといけないです。

 マクロでそこの設定を書き換えることも可能です。必要ならサンプル作成可能
です。

[ ]
RE:00653 特定のメールを通常の転送するNo.00658
rn さん 16/11/18 18:18
 
秀まるお2さま

作成いただいたマクロを追加し無事動きました!
ありがとうございました

他のメールの転送についても応用いていこうと考え中です

標準機能への実装 期待しています

ありがとうございました


[ ]