|
秀まるお様
>
> 受信が終わった後のマクロ実行中に死んでるようです。マクロでのウィンドウ切り
>換えタイミングで死んでます。
>
> そのマクロの内容教えてください。
実行しているマクロは、最近Window切り替えでいろいろ質問させてもらっていた「届
いたメールの中で必要なものを転送する」マクロです。素人製作の非常にお恥ずかし
いマクロですが、添付いたします。
$transfer = "xxxxxx@address.ne.jp";// 通知を送るメールアドレス
$accountn = "仕事用";// 通知を送る時使用するアカウント名
$subject = "メール受信連絡";// 通知メールのタイトル
#Tell_time = 1;// 1:日時を付ける 0:日時を付けない
#Tell_mail = 1;// 1:送信者アドレスを付ける 0:送信者アドレスを付けない
#Tell_name = 1;// 1:送信者名を付ける 0:送信者名を付けない
#Tell_body = 32;// 通知メールに付ける本文のバイト数(0:本文を付けない)
// 通知するメールの[From]条件
$Trs_add[0] = "@vip.vip.jp";
$Trs_add[1] = "@daiji.vip.jp";
// 通知するメールの[Subject]条件
$Trs_sub[0] = "これは重要";
// ここから先は、変更する必要がありません。
#Trs_winh = -1;// 転送メールのハンドル
#Trs_mnum = 0;// 通知するメール数初期値
loaddll "TKInfo.dll";
$C_account =dllfuncstr("CurrentAccount");// 現在表示中のアカウント名保存
$C_folder =dllfuncstr("CurrentFolder");// 現在表示中のフォルダ名保存
#C_mail =dllfunc("MailIndex");// 現在表示中のメール番号保存
if(dllfunc("IsTuruKameMain")){// 鶴亀の状態チェック
if (dllfunc("SetMainWndTop")){// メインウインドウをトップに移動できれば
#InTray = 0;// メインウインドウ表示中
} else {// できなければ、常駐状態
#n=dllfunc("RestoreWindow");// 一時的に鶴亀起動
#InTray = 1;
}
} else {
message "メインウインドウ以外でこのマクロは実行できません";
endmacro;
}
if (dllfunc("RecvMailCount") < 1) goto abort;
while(dllfunc("SelectRecvMail")){
#n=dllfunc("RestoreWindow");
$from = dllfuncstr("CurrentHeader", "From");// 送り主の解読
$from_mail = dllfuncstr("SetEmailOnly", $from);
$from_name = dllfuncstr("SetNameOnly", $from);
$o_sub = dllfuncstr("CurrentHeader", "Subject");// 元の題名の解読
#Mst_tell = 0;// 通知するフラグ
#i = 0;// 条件のカウントクリア
while($Trs_add[#i] != ""){// 送り主のチェック
#ret = strstr($from, $Trs_add[#i]);
if (#ret != -1) #Mst_tell = #Mst_tell+1;
#i = #i + 1;
}
#i = 0;// 条件のカウントクリア
while($Trs_sub[#i] != ""){// 題名のチェック
#ret = strstr($o_sub, $Trs_sub[#i]);
if (#ret != -1) #Mst_tell = #Mst_tell+1;
#i = #i + 1;
}
if (#Mst_tell > 0){
#Trs_mnum = #Trs_mnum+1;
$T_sub[#Trs_mnum] = $o_sub;
$T_from_mail[#Trs_mnum] = $from_mail;
$T_from_name[#Trs_mnum] = $from_name;
if (#Tell_body != 0) {
#n=dllfunc("SelectPane", 2);
if( browsemode ) browsemodeswitch;
moveto 0,0;
beginsel;
right #Tell_body;
copy;
beginclipboardread;
$T_body[#Trs_mnum] = getclipboard;
while( $T_body[#Trs_mnum] == "\x0A")$T_body[#Trs_mnum] = getclipboard;
if (rightstr($T_body[#Trs_mnum], 1) == "\x0A")
$T_body[#Trs_mnum] = leftstr($T_body[#Trs_mnum], (strlen($T_body[#Trs_mnu
m])-1));
#bl = strlen($T_body[#Trs_mnum]);
$body_tmp = getclipboard;
while(($body_tmp != "") && (#bl < #Tell_body)){
if( $body_tmp != "\x0A") $T_body[#Trs_mnum] = $T_body[#Trs_mnum] + " " + $bo
dy_tmp;
#bl = strlen($T_body[#Trs_mnum]);
$body_tmp = getclipboard;
if (rightstr($body_tmp, 1) == "\x0A") $body_tmp = leftstr($body_tmp, (strlen
($body_tmp)-1));
}
$T_body[#Trs_mnum] = leftstr($T_body[#Trs_mnum], #Tell_body);
}
}
}
if (#Trs_mnum > 0){// 通知すべきメールがあったら
#n =dllfunc("NewMail");// 通知用メール作成
#Trs_winh =hidemaruhandle(0);
$s =dllfuncstr("SetHeader","To", $transfer);
$s =dllfuncstr("SetHeader","Subject", $subject);
#n =dllfunc("SetEditorAccount", $accountn);
moveto 0,0;
while(#Trs_mnum > 0){
insert "[" + $T_sub[#Trs_mnum] + ":";
if (#Tell_mail == 1) insert $T_from_mail[#Trs_mnum];
if (#Tell_name == 1) insert "<" + $T_from_name[#Trs_mnum] + ">";
if (#Tell_body != 0) insert " " + $T_body[#Trs_mnum];
insert "]";
insertreturn;
#Trs_mnum = #Trs_mnum - 1;
}
beginsel;
gofileend;
delete;
if (#Tell_time != 0){// 受信した日時を付加する
insert "以上のメールを[";
insert date;
insert time;
insert "]に受信しました";
insertreturn;
}
#n =dllfunc("SendLater");
#n =dllfunc("SetMainWndTop");
closehidemaruforced(#Trs_winh);
}
abort:
#n =dllfunc("SelectFolder", $C_account , $C_folder);// 最初見ていたメールへ移動
#n =dllfunc("SetMailIndex", #C_mail);
if (#InTray == 1) #n = dllfunc("Exit");// 常駐していたなら元に戻す
endmacro;
|
|