	¾(ޤʬǤʤä)ĤΤ

------------------------------------------------------------
I	

1	
1.1	fmlΥޥɤڡ
1.2	ոѥɥ쥹
1.3	᡼MIMEʬDecodeƤޤ
1.4	confirm γǧå MAINTAINER ž

2	åˤĤ
2.1	å르ꥺ
2.2	åѤˤʤäƤlockfileäƤ⤤Ǥ

3	spool 
3.1	spool ϲ¸ƤΡ
3.1	fml Ϥ줿Τ spool/ ¸Ǥޤ
3.2	ס˵򤿤ʤ
3.3	̤ͣΥס read permission
3.4	סˤեMIMEѴ
3.5	mget Ǥ spool βΥե mh ʳɤ

4	¾
4.1	˻ĤƤɬפΤեϡ
4.2	ΰĤΣ̤ͣߤ(ˤ餺)
4.3	ֹ椬ꥻåȤͣ

5	Ҥä
5.1	NT ΰۤ (pop version)

6	summary ե
6.1	summary file format ѹ

7	Subject Ϥä
7.1	äɤƬˤֹդ롩

II	󥿥륵ФȤISPΥӥȤ

III	examples

8	examples
8.1	site*ph sample (mnews ML)
------------------------------------------------------------


I	

1	

1.1	fmlΥޥɤڡ
	http://www.infosite.ne.jp/fml/

    in fml-support: Count: 01585
    From: Yuao Tanigawa <yuao@infonia.or.jp>
    >   fmlΥޥɤڡäƤߤޤURL
    
    

1.2	ոѥɥ쥹

ոѥɥ쥹MLǤơäƤͤˡ֤ո꤬Ȥ
ޤֻϤФ餯ԤäƤ͡פȼưǱ롣

¤:
ΤƤïǤOKСʳƤMLή
ƼԤguideե֤ʼưϿϤʤˡ

config.ph 1:

    ### sample configuration ###
    $PERMIT_POST_FROM              = "anyone";
    
    # YOU CAN EDIT MANUALLY AFTER HERE.
    $START_HOOK = q# 
       if (! &MailListMemberP($From_address)) { &GuideRequest(*Envelope);} 
    #;

config.ph  2:
guide ǤϤʤguideȤ̤Ѱդե֤
إå⥫ޥ

From: $MAIL_LIST
Subject: Thanks you for your mail

    ### sample configuration ###
    $PERMIT_POST_FROM              = "anyone";
    
    # YOU CAN EDIT MANUALLY AFTER HERE.
    $RECRUIT_ACK_STATEMENT = "Thanks you for your mail";
    $RECRUIT_ACK_FILE      = "$DIR/recruit_reply";
    
    $START_HOOK = q#
        if (! &MailListMemberP($From_address)) {
    	&DEFINE_FIELD_OF_REPORT_MAIL('From', $MAIL_LIST);
            &SendFile($From_address, $RECRUIT_ACK_STATEMENT, $RECRUIT_ACK_FILE);
        }
    #;

1.3	᡼MIMEʬDecodeƤޤ
See also: Japanese 2 

Ǥϡ᡼MIMEʬDecodeƤޤϤɤ뤫
㤨Сfml.pl  sub GetFieldsFromHeader

    if ($USE_LIBMIME && ($MailHeaders =~ /ISO\-2022\-JP/o)) {
        require 'libMIME.pl';
	$Summary_Subject = &DecodeMimeStrings($Summary_Subject);
    }



    if ($USE_LIBMIME && ($MailHeaders =~ /ISO\-2022\-JP/o)) {
        require 'libMIME.pl';
	$Summary_Subject = &DecodeMimeStrings($Summary_Subject);
	$MailBody = &DecodeMimeStrings($MailBody);
    }

ʸǤդ ISO-2022-JP ǻϤޤʬMIME decodeޤ

1.4	confirm γǧå MAINTAINER ž

fml-support: 08960

Q: fml μưϿΥ⡼ɤ confirmation 򤷤ƤȤޤλ
confirm γǧåƼԤФֿޤ򡢴԰
Ԥֿ뤳ȤˤϿλ褦ʷˤˤϤ
ɤǤ礦

Q: ԰ž᡼

  (᡼ʸ):

	confirm 200010302002481472410938048 Tomoyo Daidouji

򲣼ꤷơԤΥ᡼ؤ elena-ctl äƤ
ȤǤǤ礦ΤˤȤϤǤʤǤɡ
HOOK Ĥв꤬Ǥޤ :-) Υ᡼ֻ򤹤OK 

    $FML_EXIT_HOOK = q#
       if (! &MailListMemberP($From_address)) {
            $Envelope{'message:h:to'} = $MAINTAINER;
       }
    #;

2	åˤĤ

2.1	å르ꥺ
See also: internals 6.9 

FML uses flock(2) in default. If you use flock(2), set

	$USE_FLOCK    = 1; (default 1)

ꤹ flock system call å˻Ȥޤ

	$USE_FLOCK    = 0;

Ȥ link(2) Ȥ˥åȤǤޤǥեȤflockǤ

2.2	åѤˤʤäƤlockfileäƤ⤤Ǥ

¿(Ť)եϾäƤ⤤ǤäƤץ˴ط
ƤΤ򤱤Ǥλ rm -f var/run/lockfile.v7 (
֤դ餫˰ְʾŤϤ)äƤեäƤ
ΤɤǤ
3	spool 

3.1	spool ϲ¸ƤΡ

줿Ǥget ʤɤμ󤻻ƱΤ֤褦ˡ
줿ΤƱΤ¸Ƥޤ
fml Ϥ줿ΤȤϰ㤤ޤ

3.1	fml Ϥ줿Τ spool/ ¸Ǥޤ

ץϤޤ

expire Ƥ⤤ʤ $USE_LOG_MAIL  on ˤ(Υ᡼) 
var/Mail/ βƤޤ

⤷ spool.orig Ȥ˸򤺤äƤʤ顢ʤ󤸤Ǥ
͡ա $ID  $START_HOOK ǤϤޤޤäƤʤΤǡκǸ HOOK ѤƤޤ

$FML_EXIT_HOOK = q#
	my ($f) = "$SPOOL_DIR.orig/$ID";
	-d "$SPOOL_DIR.orig" || mkdir("$SPOOL_DIR.orig", 0700);
	if (open($f, "> $f)) {
		print $f $Envelope{'Header'}."\n".$Envelope{'Body'};
		close($f);
	}
#;

3.2	ס˵򤿤ʤ

DISK­ʤǵ򤿤᤺ˤʤ

	$NOT_USE_SPOOL = 1;

ꤷƤ󤽤ξϸŤμǤޤ
()

3.3	̤ͣΥס read permission

̴̾ͣԤθ¤ fml äƤޤƣ̤ͣƤΥե
ϴ԰ʳοͤʤͤˤʤäƤޤ

㳰Ȥƥ᡼󥰥ꥹȤ directory Ǥ htdocs Ϥ٤Ƥοͤ
ɤ褦ˤʤäƤޤ httpd ɤΥ桼¤äƤ뤫
狼ʤǤ(̾ nobodyȤäƤ)

ƥˤĤƤ internals 9

3.4	סˤեMIMEѴ

lib/MIME/rmime Ȥäơ/bin/sh ʤ

	for file in *
	do
	   mv   $file     $file.org
	   perl rmime $file.org > $file
	done

餤ǣϣˤǤ礦
Ȥꤢ .org ĤΤХååפ˻ĤɤĤ:-)

nkf -m Ǥ⤤

3.5	mget Ǥ spool βΥե mh ʳɤ

lib/Utilities/packmbox.pl Ȥäơ

	(cd spool; packmbox.pl ) > ~/mbox

Ȥơmbox ĤСˤơ/bin/Mail ʤ Rmail ʤ
ȤǤǤ礦

4	¾

4.1	˻ĤƤɬפΤեϡ

ޤˤɤɬפʬǤʹޤmakefml install Ȥ
core ʬͥ󥹥ȡ뤵ޤ

makefml ǥ󥹥ȡ뤹 document ޤdocuments 礭
Ǥ󥹥ȡ doc βˤޤȤޤäƤΤǡϾäƹ
󡣥ɥȤϡwww.fml.org 򸫤뤫 doc/html פ
ʤäפȤϤꤦǤ礦 www ǤϾ˺ǿǤ
ƤȤդƤISPΥȤäƤ
ʤɤʤISP¦ǤϤʤʬüΥǥ˰ܤƤȤ椦
⤢ޤ

ʳ˲äƤϵǽɤޤǻȤ˰¸ƤΤǰ쳵
ˤϤޤ󡣤 document ʳǳ 1M 餤Ǥʤߤ

	doc 	ɥ
	libexec üʤ fml_local Ȥޤ
		fmlserv 뤫äܤ⤷ʤ
	bin 	fml ΤϻȤʤ user ٱ program 

etc, sbin, cf ϾäǤ

;̤ǤFML.ORGΣ̤ͣĴ٤ȤMLΥۡ 1000  4M 
餤ɬפɾƤȤߤǤ

4.2	ΰĤΣ̤ͣߤ(ˤ餺)

ߤʤǥХå⡼ɤˤȤߤޤ:)

/etc/aliases Խ¾̵ˤȤΤ褤Ǥ礦

    elena: elena-admin
    elena-ctl: elena-admin
    elena-admin: fml

4.3	ֹ椬ꥻåȤͣ

εƿܤǤʬ褦Σ򶭤
ֹ򣰤᤹Ĥޤ

	Subject: [elena 00100]



	Subject: [elena 00000]

ˤ櫓Ǥ

ֹ¿Υե˴طƤޤ
seq ϵֹΥ󥿤log  summary ˤϵȤ
ǡϿƤޤ
spool  seq å򤷤ƤΤǡspool ѤƤޤʤ
ʣƤȤ顼ȯޤ
δطե̾ѤƤޤޤ
ѡ II ΥƥȤιܤǣ̤ͣꥻåȤä򤷤ޤ
ȸŪˤƱǤ

Τ褦 shell script ǤĤä cron ( .ref{cron} Ỳ) 
ղ󤷤ƤߤȤǤȤ⤤ޤ
    #!/bin/sh
    
    ml=elena
    
    date=`date -u +%C%y%m%d`
    
    /usr/local/fml/makefml lock $ml 60 &
    
    cd /var/spool/ml/$ml || exit 1
    
    for file in seq spool summary log
    do
       if [ -f $file ];then
            mv $file $file.$date
       fi
    done

5	Ҥä

5.1	NT ΰۤ (pop version)

Q: NT4 POPfmlMLѤƤޤ
   POPSMTPФΥɥ쥹ѹ줿ˤϤɤѹޤ

	C:\fml\_fml\pop

Ȥե POP SMTPФ̾񤭹ޤƤޤ
ԽƲ

6	summary ե

6.1	summary file format ѹ

98/09/10 10:19:28 [1:hoge-admin] ƥ
98/09/10 16:52:23 [2:hoge@hoge.hoge] ǤȤ



98/09/10 10:19:28 [1] ƥ
98/09/10 16:52:23 [2] ǤȤ

Τ褦˥ɥ쥹򵭺ܤʤ褦ˤ硢Τ褦 HOOK Ĥ
եޥåȤ򥳥ȥǤ롣ñˤˡϤʤ

    $DISTRIBUTE_SUMMARY_HOOK = q#
     	&Append2(sprintf("%s [%d:%s] %s", 
     			 $Now, $ID, substr($MAINTAINER, 0, 15), $s),
     		 $SUMMARY_FILE);
    #;

7	Subject Ϥä

7.1	äɤƬˤֹդ롩

fml-support: 07772 

Q: åɤƬεˤ Subject: ֹ̤򿶤ꡢֿ᡼
   ؤƤ Subject: Ϥʤ

A: ȤƤݤΤ褦Ǥ

   1: Subject: [ML:1] η̾
   2: Subject: Re: [ML:1] η̾
   3: Subject: Re: [ML:1] η̾
   4: Subject: [ML:4] ̤η̾
   5: Subject: Re: [ML:4] ̤η̾

ʤ鼡 HOOK Ǥޤ

   $SMTP_OPEN_HOOK = q#
       if ($Envelope{'h:subject:'}  =~ /^\s*Re:/i) {
           $Envelope{'h:Subject:'} = $Envelope{'h:subject:'};
   	undef $SUBJECT_FREE_FORM;
       }
   #;

4 ܤ [ML:2] ȥȤƤۤʤ顢
뵭ֹȤ̤˥Ȥ뤷ޤ
㤨̤ sequence եĤäƥȤ򤷤Ƥޤ

       $SMTP_OPEN_HOOK = q`
           undef $SUBJECT_FREE_FORM;
           if ($Envelope{'h:subject:'}  =~ /^\s*Re:/i) {
               $Envelope{'h:Subject:'} = $Envelope{'h:subject:'};
           } else {
               $SEQ_SUBJ_FILE = "$DIR/seqsubj";
               &Touch($SEQ_SUBJ_FILE) unless -f $SEQ_SUBJ_FILE;
               $IDSUBJ = &GetFirstLineFromFile($SEQ_SUBJ_FILE);
               $IDSUBJ++;
               &Write2($IDSUBJ, $SEQ_SUBJ_FILE);
               #&Log("IDSUBJ=[$IDSUBJ]");
               $Envelope{'h:Subject:'} =~ s/^\s+//;
               $Envelope{'h:Subject:'} = "[$BRACKET:$IDSUBJ] $Envelope{'h:Subject:'}";
           }
       `;
    
    : Ǥưޤ顼åԽʬȤޤ
    
II	󥿥륵ФȤISPΥӥȤ

III	examples
8	examples

8.1	site*ph sample (mnews ML)

    # ޥɥ᡼դեåΥեޡ
    $FACE_MARK     = '(^_^)/~';
    
    # Ȥ᡼Ǥۤ
    $AUTO_REGISTRATION_LINES_LIMIT = -1;
    
    # إåΡX-: פ̤ˤ
    $SUPERFLUOUS_HEADERS = 1;	# preserve more header fields
    
    # MIME б
    $USE_LIBMIME   = 1;		# when use MIME Extension in libMIME.pl
    
    # spool  MIME ǥɤƤ񤭹
    $MIME_DECODED_ARTICLE = 1;	# do MIME decoding, then spool
    
    # ޥɥ᡼Ǥ뤫ɤǧԿ
    $COMMAND_CHECK_LIMIT = 1;	# the first 3 lines is checked for
     				# mistakes whether the command mode or not?
     				# at &Parsing in fml.pl, 
    
    # ޥɤñʤ륷󥿥å顼ηٹ
    $USE_WARNING = 1;		# ޥɤñʤ륷󥿥å顼ηٹ
    
    # ޤȤΤȤ mh/burst Ѥˤ
    $USE_RFC934    = 1;		# inMatomeokuri, use mh/burst for the split
    
    # ѥ̾ѹ(ΤȤ =* 򥳥ԡɤ)
    $OBJECTIVE_FILE = "$DIR/=objective"; 	# objective file
    $GUIDE_FILE    = "$DIR/=guide";		# the guide file of our Mailing List 
    $HELP_FILE     = "$DIR/=help";		# the help file for useful commands
    $DENY_FILE     = "$DIR/=deny";		# attention to illegal access
    $FAIL_FILE     = "$DIR/=fail";		# attention to illegal access
    $WELCOME_FILE  = "$DIR/=welcome";	# could be "$DIR/welcome"
    
    # ʬŪ log ȤʬΥ
    $MGET_LOGFILE  = "$DIR/log_mget";	# log file for mget routine
    
    # äȤѹ(ä˸̤Ϥʤ)
    $Subject       = '(No Subject in original)';	# Subject field
    
    # SMTP ͥĥä HELO ΤȤ localhost ̾
    $Envelope{'macro:s'} = 'localhost';
    
    # ٥ bulk ˤ
    $PRECEDENCE     = 'bulk';
    
    # ơ󤹤λ
    @NEWSYSLOG_FILES = ("$MSEND_RC.bak", "$MEMBER_LIST.bak", "$ACTIVE_LIST.bak",
                        "${LOGFILE}_archive", "${LOGFILE}_matome");
    
    # åפX-: ץե
    $SKIP_FIELDS = '|X-Nsubject|X-Confirm-Reading-To';
    
    # ȥեå
    $START_HOOK = q#
         # ȥ᡼륢ɥ쥹?
        if ($CONTROL_ADDRESS && ($Envelope{'mode:chk'} =~ /$CONTROL_ADDRESS/i)) {
             # Ͽ?
            if ($Envelope{'Body'} =~ /subscribe/io
                  && $Envelope{'Body'} !~ /unsubscribe/io) {
                &use('utils');
                &AutoRegist(*Envelope);
                $DO_NOTHING = 1;
            }
            $Envelope{'mode:uip'} = 'on'
         # ޥɥ⡼ɤ?
         # ( ML ǤΤǥޥɥ᡼դƤʤ)
        } elsif ($Envelope{'mode:uip'}) {
            &Logging("Unsupport Command Mail");
            &SendFile($From_address, 
                      "Unsupport Command Mail this Address $ML_FN", $FAIL_FILE);
            $DO_NOTHING = 1;
         # ̤
        } else {
            &Distribute;
            $DO_NOTHING = 1;
        }
    #;
    
    # SMTP ϻΥեå
    $SMTP_OPEN_HOOK = q#
         # ᡼ To: եɤ¸
        $Envelope{'h:To:'}       = $Envelope{'h:to:'}
              || $Envelope{'h:apparently-to:'} || "$MAIL_LIST $ML_FN";
         # Reply-To: Ū˽񤭴
        $Envelope{'h:Reply-To:'} = $Envelope{'h:reply-to:'} = $MAIL_LIST;
         # MIME ʤ Subject: ǥɤ
        if ($USE_LIBMIME && $Envelope{'MIME'}) {
            &use('MIME');
            $Envelope{'h:Subject:'} = &DecodeMimeStrings($Envelope{'h:Subject:'});
        }
    #;
    
    # إåɲäեå
    $HEADER_ADD_HOOK = q#
         # X-Nsubject: եɤν
         # ( ML Ǥ X-Nsubject:  Subject: Ʊ)
        if ($Envelope{'x-nsubject:'}) {
            if ($STRIP_BRACKETS) {
                $_ = $Envelope{'x-nsubject:'};
                local($r)  = 10;
    
                s/\[$BRACKET:\d+\]\s*//g;
    
                while (s/Re:\s*Re:\s*/Re: /gi && $r-- > 0) { ;}
    
                $Envelope{'x-nsubject:'} = $_;
            }
            if ($USE_LIBMIME && $Envelope{'MIME'}) {
                &use('MIME');
                $Envelope{'x-nsubject:'} =
                      &DecodeMimeStrings($Envelope{'x-nsubject:'});
            }
            $body .= "X-Nsubject: [$BRACKET:$ID] $Envelope{'x-nsubject:'}\n";
        }
    #;
    
    # libtraffic Υեå(Ū)
    $TRF_NAME_HOOK = q#
        $name =~ s/umura@solan\.chu/umura@nn.solan./oi;
    #;


		INDEX

packmbox.pl                                ...   3.5 
$USE_FLOCK                                 ...   2.1 
סˤեMIMEѴ         ...   3.4 
ס˵򤿤ʤ                   ...   3.2 
