フィルタリング3 ヘッダの書き換え

ある特定のユーザだけヘッダを書き換えて配信する 
差出人をメーリングリストのアカウント名に変更したい 
メンバーとメンバー外で Reply-To の付加方法を変える 
メールヘッダーのReply-toを$From_address, $MAIL_LISTに書き換える 
腐った Message-Idを矯正 
Cc: を元メールの Cc:,From にしたい 
オリジナルのFrom:を本文に付け加える
Subject: に [ML-NAME:数字] が書いてあったら、タグをつけない
Reply-To: を消してしまうには



●ある特定のユーザだけヘッダを書き換えて配信する
【fml-help:00874】

$START_HOOK = q#
	if ( &Lookup( $From_address, "hiddenlist")) {
		&DEFINE_FIELD_FORCED('From' , '置換後のアドレス');
		$mess_ID = &GET_ORIGINAL_HEADER_FIELD_VALUE('Message-Id' );
		$mess_ID =~ s/隠したいユーザ名/置換後/i;
		&DEFINE_FIELD_FORCED('Message-Id' , $mess_ID);
	}
   #;
hiddenlist: 隠したいメールアドレスのリストファイル
 s/隠したいユーザ名/置換後/i;  iは念のため
ドメイン内で置換えたのでユーザ名だけで処理している
注意点
置換後のアドレスは自分が管理できる、存在するアドレスにしないと
エラーが出たときにループしたり他に迷惑を掛けたりする原因になる。


●差出人をメーリングリストのアカウント名に変更したい
【fml-help:00472】

単にヘッダの From: を ML 宛てに書き替えるのであれば以下のHOOK

$SMTP_OPEN_HOOK = %
  $Envelope{'fh:from:'} = $MAIL_LIST;
%;


●メンバーとメンバー外で Reply-To の付加方法を変える
【fml-support:06240】

メーリングリストのメンバーでない人の投稿の場合には Reply-To を削除するが、
投稿する人が Reply-To を設定したらそちらが優先される設定

例1:
   $START_HOOK =q#
      if (&MailListMemberP($From_address)) {
	  unless (&GET_HEADER_FIELD_VALUE('reply-to')) {
	           &DEFINE_FIELD_FORCED("reply-to", $MAIL_LIST);
	  }
      }
      else {
           &DELETE_FIELD("reply-to");
      }
   #;

例2:

   $START_HOOK =q#
      if (&MailListMemberP($From_address)) {
	  unless ( $Envelope{'oh:reply-to:'} ) {
	           &DEFINE_FIELD_FORCED("reply-to", $MAIL_LIST);
	  }
      }
      else {
           &DELETE_FIELD("reply-to");
      }
   #;


●メールヘッダーのReply-toを$From_address, $MAIL_LISTに書き換える
【fml-help:00254】

$START_HOOK = q#
  &DEFINE_FIELD_FORCED("reply-to", "$From_address, $MAIL_LIST");
#;

config.ph は fml が起動されたときに評価されます。
この時点ではまだメールを読み込んでいないので、
$From_address はまだ設定されていません。

したがって、メールを読み込んでから DEFINE_FIELD_FORCED を
実行するようにすればいいわけです。


●腐った Message-Idを矯正
【fml-support:07765】

#sitedef.ph に以下の設定を記述。
$HEADER_ADD_HOOK = q#
    if ($FORCED_BAD_MESSAGE_ID && $e{'h:Message-Id:'} !~ /.*@.*\..*/) {
        &DEFINE_FIELD_FORCED("X-Orig-Message-Id", $e{'h:Message-Id:'});
        &DEFINE_FIELD_FORCED("X-Orig-Message-Id-Info", 
        "Original posted mail had wrong Message-Id.\n\t
         Then forced correct one on system.\n\t
         If you are a contributor, must fix setting for your MUA.");
        $e{'h:Message-Id:'}  = &GenMessageId;
    }
#;
#この機能を有効にしたいメーリングリストの config.ph に
$FORCED_BAD_MESSAGE_ID = 1;
#を記述。
#
#ただしこのままだと X-Orig-Message-Id とかのヘッダが、
#ヘッダ部分の一番下に配置される形になって気持ち悪かったので、
#sitedef.ph で @HdrFieldsOrder を定義し直して、
#適当な位置に配置されるように設定しました。


●Cc: を元メールの Cc:,From にしたい
【fml-support:07933】

$SMTP_OPEN_HOOK = q`
    if ($Envelope{'h:Cc:'}) {
        &DEFINE_FIELD_FORCED('Cc', "$Envelope{'h:Cc:'}, $From_address");
    } else {
        &DEFINE_FIELD_FORCED('Cc', $From_address);
    }
`;
# このままでは、From: を Cc: に書いて投稿する人は Cc に自分が
# ダブるとか、Cc: の後に余計な空白が入るとか、いろいろ小細工の余地が
# 残っていると思います。適宜整形してください。


●オリジナルのFrom:を本文に付け加える
【fml-help:01521】

$START_HOOK = q%
	   $Envelope{'Body'} = $From_address ."\n". $Envelope{'Body'};
%;
#携帯電話などへの配送の際に From を書き換えて固定して、
#実際の From は本文中に埋め込む用途に使用


●Subject: に [ML-NAME:数字] が書いてあったら、タグをつけない
【fml-help:01695】

$HEADER_ADD_HOOK .= q{
  my($subject) ;
  $subject = $Envelope{'h:subject:'} ;
  if ( $subject =~ /\[ML-NAME:\d+\]/ )
  {
    $Envelope{'h:Subject:'} = $subject ;
  }
};


●Reply-To: を消してしまうには
【fml-support:09408】

$START_HOOK = q{
	&DELETE_FIELD('Reply-To');
};