返信時に元メールの宛先(複数)の名前を引No.16347
うさぎ さん 04/01/24 15:33
 
タイトルのようなことをしたいのですが、標準のテンプレート関数
では難しいようなのでお知恵を拝借させて下さい。
具体的には以下のようなことです。

元のメール(受信メール)のTo:ヘッダが、
To:Aさん<hoge@hoge>,自分<zzz@zzz>,Bさん<abc@xyz>
の場合、このメールに対する返信テンプレーで$(SetNameOnly,$(RootHeader,"To"))
を指定すると"Aさん"だけが
結果として引用されますが、ここで"Aさん,自分,Bさん"という
引用(アドレス抜きで)をするためにはどうすればいいでしょうか。

当方マクロを作ったこともないため、お教え頂ければと思います。  

[ ]
RE:16347 返信時に元メールの宛先(複数)のNo.16351
Iranoan さん 04/01/24 22:43
 
 うさぎさん今日は、Iranoan です。
 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです。
> 元のメール(受信メール)のTo:ヘッダが、
> To:Aさん<hoge@hoge>,自分<zzz@zzz>,Bさん<abc@xyz>
> の場合、このメールに対する返信テンプレーで$(SetNameOnly,$(RootHeader,"To"))
> を指定すると"Aさん"だけが
> 結果として引用されますが、ここで"Aさん,自分,Bさん"という
> 引用(アドレス抜きで)をするためにはどうすればいいでしょうか。
 まず
> $(SetNameOnly,$(RootHeader,"To"))
の部分を、
$(ExecMacro,"make2.mac")$-
$(RootHeader,"To")
としてください。そして、末尾の内容を make2.mac という名前で、マクロ用
フォルダに保存してください。マクロ用フォルダ等マクロについての詳細は、
ヘルプを御覧ください。なおマクロの仕様は次の通りです。
(1) 返信元の To ヘッダのうち名前部分だけ取り出す
(2) From と一致しているアドレスは除外
(3) 複数のアドレスは「,」で区切る
(4) 取り出した名前の最後には「さん」を付加
//--------------------------------- make2.mac ------------------------------
---------
#x = x;
#y = y;
loaddll "tkinfo.dll";
disabledraw;
gofiletop;
#reg_search = searchmode;
$search = searchbuffer;
#search = searchoption;
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
writeregnum "SelectFound",1;
envchanged;
closereg;
$to = dllfuncstr( "RootHeader", "To" );
$from = dllfuncstr( "SetEmailOnly", dllfuncstr( "CurrentHeader", "From" ));
searchdown2 $to;
delete;
if( !#reg_search ){
  openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
  writeregnum "SelectFound",#reg_search;
  envchanged;
  closereg;
}
setsearch $search, #search;
#j = dllfunc("CountEmailList", $to );
while( #i < #j ){
  if( dllfuncstr( "SetEmailOnly", dllfuncstr("GetEmailList", $to, #i ) ) !=
$from ){
    $tmp = dllfuncstr( "SetNameOnly", dllfuncstr("GetEmailList", $to, #i ) );
    $name = $name + ", " + $tmp + "さん";
  }
  #i = #i + 1;
}
freedll;
insert rightstr( $name, strlen( $name ) - 2 );
moveto #x, #y;

[ ]
RE:16351 返信時に元メールの宛先(複数)のNo.16361
秀まるお2 さん 04/01/24 23:50
 
 SetNameOnlyMultiとかSetEmailOnlyMultiとかの関数を追加するか、またはそ
もそもSetNameOnly等で複数メールアドレスを処理できるようにすればいいよう
な気もしますが…。それはそれで、今ちょっとスレッド表示の作り直しをしてる
関係で、当分(あと2ヶ月くらい+安定するまでさらに2ヶ月くらい?)対応で
きません。

 (ってことで、Iranoanさんの方に頼ってくださいと言うしかないかも)

[ ]
RE:16361 返信時に元メールの宛先(複数)のNo.16368
山田健一 さん 04/01/25 15:05
 
  秀まるお2 さん、こんにちは。

> SetNameOnlyMultiとかSetEmailOnlyMultiとかの関数を追加するか、またはそ
>もそもSetNameOnly等で複数メールアドレスを処理できるようにすればいいよう
>な気もしますが…。

 上記が実現できたとしても、Aさん、Bさん、Cさん というように さん を付け
るのは難しいでしょう。

> (ってことで、Iranoanさんの方に頼ってくださいと言うしかないかも)
 これに1票!


山田健一@鶴亀ユーザー
 http://homepage3.nifty.com/yamada_ken1/

[ ]
RE:16351 返信時に元メールの宛先(複数)のNo.16369
うさぎ さん 04/01/25 16:01
 
Iranoanさん、アドバイスおよびマクロありがとうございます。
実は訳あって某Outlook標準の返信ヘッダと同じ書式が作りたかった
のです。つまり、返信/転送元メールのFrom/To/Ccヘッダに対して
名前だけ(名前が付いていない場合はアドレス?)を全員分(自分も
含めて)引用する。

なので、教えて頂いて大変恐縮なのですが、

>(2) From と一致しているアドレスは除外
>(4) 取り出した名前の最後には「さん」を付加

この2点については必須ではありませんでした。
なので、上記2点を変更する方法と、From/Ccに対しても同じ動作が
出来るように考えてみたいと思います。

誤解を招き易い書き方をして申し訳ありませんでした。
重ねてご指導を頂く場合はよろしくお願いします。

また上記変更について、ご経験からアドバイスを頂ければと存じます。

[ ]
RE:16361 返信時に元メールの宛先(複数)のNo.16370
うさぎ さん 04/01/25 16:10
 
秀まるお2さんこんにちわ。
事前に調べましたらβ版の改編履歴で
>tkinfo.dllのSetNameOnly、SetEmailOnly関数で、コンマで区切られた
>メールアドレスを指定した場合に、コンマ以降を無視するようにした。
とありましたので、何かの理由でなくなった機能なのかなと勝手に考え、
こちらで質問させて頂いた次第です。
もし無理なくサポートされるのであれば嬉しく思います。

[ ]
RE:16369 返信時に元メールの宛先(複数)のNo.16373
Iranoan さん 04/01/25 22:25
 
 うさぎさん今日は、Iranoan です。
> 実は訳あって某Outlook標準の返信ヘッダと同じ書式が作りたかった
> のです。つまり、返信/転送元メールのFrom/To/Ccヘッダに対して
> 名前だけ(名前が付いていない場合はアドレス?)を全員分(自分も
> 含めて)引用する。
 前回のマクロの変更すればよいです。From が複数というのは考えられない
ので、To/Cc についてだけ考えると、テンプレートの変更部分は
$(ExecMacro,"make2.mac")$-
$(RootHeader,"To")
$(RootHeader,"Cc")
の様にして、マクロは末尾のように書き換えます。

 P.S もしこれ以上の変更が必要でしたら、マクロの投稿はどうしても長文に
なりますし、初心者の方は引いてしまうかもしれないので、
http://www.maruo.co.jp/turukame/2/
に改めて投稿して頂けると良いかと思います。
//--------------------------- make2.mac ------------------------------
#x = x;
#y = y;
loaddll "tkinfo.dll";
disabledraw;
#reg_search = searchmode;
$search = searchbuffer;
#search = searchoption;
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
writeregnum "SelectFound",1;
envchanged;
closereg;
call NameOnly "To";
call NameOnly "Cc";
freedll;
if( !#reg_search ){
  openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
  writeregnum "SelectFound",#reg_search;
  envchanged;
  closereg;
}
setsearch $search, #search;
moveto #x, #y;
endmacro;

NameOnly:
  $$addr = dllfuncstr( "RootHeader", $$1 );
  if( $$addr == "" )return;
  gofiletop;
  searchdown2 $$addr;
  if( !result )return;
  delete;
  ##i = dllfunc("CountEmailList", $$addr ) - 1;
  while( ##i >= 0 ){
    $$name = dllfuncstr( "SetNameOnly",
      dllfuncstr("GetEmailList", $$addr, ##i ) ) + ", " + $$name;
    ##i = ##i - 1;
  }
  insert leftstr( $$name, strlen( $$name ) - 2 );
  return;

[ ]
RE:16370 返信時に元メールの宛先(複数)のNo.16377
秀まるお2 さん 04/01/26 18:00
 
>tkinfo.dllのSetNameOnly、SetEmailOnly関数で、コンマで区切られた
>メールアドレスを指定した場合に、コンマ以降を無視するようにした。

 これはたぶん、複数メールアドレスを指定した場合におかしな動作になってい
たのを直しただけだと思います。改版する前は、たぶん、コンマ区切りで複数
メールアドレス入りの場合に誤動作してて、うまくNameOnly/EmailOnlyにならな
いケースがあったんだと思います。

 一応、マクロでGetEmailList等を使って対処できるので、それでうまく回避し
て欲しいと思いつつも、将来的にはSetEmailOnlyMulti/SetNameOnlyMulti関数を
追加する等の対策をしたいと思います。(覚えていたら)

[ ]
RE:16377 返信時に元メールの宛先(複数)のNo.16387
山田健一 さん 04/01/27 10:42
 
  秀まるお2 さん、こんにちは。

> 一応、マクロでGetEmailList等を使って対処できるので、それでうまく回避し
>て欲しいと思いつつも、将来的にはSetEmailOnlyMulti/SetNameOnlyMulti関数を
>追加する等の対策をしたいと思います。(覚えていたら)

 それでは、SetNameOnlyMulti関数を作るときには 付加文字列 と 区切り文字
のパラメーターを追加して欲しいです。

例 山田 <xxxxxx@hoge.com> , 大田 <xxxx@hoge.com>
のとき、
SetNameOnlyMulti(" さん","、")
      ↓
山田 さん、 大田 さん
(付加文字列を 名前の後ろに付け、区切りには指定した区切り文字を使用す
る)

山田健一@鶴亀ユーザー
 http://homepage3.nifty.com/yamada_ken1/

[ ]
RE:16387 返信時に元メールの宛先(複数)のNo.16396
秀まるお2 さん 04/01/27 22:23
 
 さん付けとか区切りコンマ文字の変換までやるとなると、じゃぁってことで他
にも多数の要望が出されて、これまたサポート業務の負担がどんどん増えていく
ような気がして怖いですけど…。

 つまり、マクロでないと出来ないことを、どこまでテンプレート関数標準でや
るかって話になる訳なんですけど。

 とりあえず、SetEmailOnlyMultiとSetNameOnlyMultiによる、単純な複数メー
ルアドレス対応だけ、将来的にやる予定ってことにします。それ以上のことはマ
クロでってことにしたいと思います。


[ ]