Each sub filter system is enabled/disabled independently.
use_SERVICE_filter = yes SERVICE_filter_functions = function_A function_B use_function_A = yes function_A_rules = rule_01 urle_02
# Descriptions: how to inform the rejected message
# when the filter system rejects.
# We prefer string not mime/multipart to avoid parsing by MUA.
# History: string in 4.0.
# Value: SELECT ( multipart string )
# Examples: string
article_post_restrictions_reject_notice_data_type = string
=head2 filter
# Descriptions:
# History: fml8 rearragena fml4 filter functions and integrates them
# into one.
# Roughly speaking, fml8 filter is composed of the following
# $USE_DISTRIBUTE_FILTER
# $INCOMING_MAIL_SIZE_LIMIT
# ADD_CONTENT_HANDLER()
# functions.
# Value: YES_OR_NO
# Examples: yes
use_article_filter = yes
# Descriptions:
# History:
# Value: MIX (
# article_size_filter
# article_header_filter
# article_non_mime_filter
# article_mime_component_filter
# article_text_plain_filter
# article_spam_filter
# article_virus_filter
# )
# Examples:
article_filter_functions = article_size_filter
article_header_filter
article_non_mime_filter
article_mime_component_filter
article_text_plain_filter
article_spam_filter
article_virus_filter
=head2 size based filter
# Descriptions: use size based filter.
# History: no
# Value: YES_OR_NO
# Examples:
use_article_size_filter = yes
# Descriptions: size based filter rules.
# first match.
# permit post if no rule matched.
# History:
# Value: MIX ( check_header_size
# check_body_size
# permit
# )
# Examples:
article_size_filter_rules = check_header_size
check_body_size
permit
=head2 header base filter
# Descriptions: use header based filter ?
# History: disabled by default.
# "yes" always if $USE_DISTRIBUTE_FILTER is yes.
# Value: YES_OR_NO
# Examples:
use_article_header_filter = yes
# Descriptions: header filter rules.
# first match.
# permit post if no rule matched.
# History: fml4 has no check_date rule.
# Value: MIX (
# check_message_id
# check_date
# permit
# )
# Examples:
article_header_filter_rules = check_message_id
check_date
permit
=head2 filter for non MIME structure
# Descriptions: dummy
# History: disabled by default.
# !MIME of 4.0 content filter.
# Value: YES_OR_NO
# Examples:
use_article_non_mime_filter = yes
# Descriptions: dummy
# History:
# Value: MIX ( permit reject_empty_content_type )
# Examples: permit
article_non_mime_filter_rules = permit
# Descriptions: MIME structure based filter
# History: 4.0 content filter. disabled by default.
# Value: YES_OR_NO
# Examples:
use_article_mime_component_filter = yes
# Descriptions: file of filter rules
# History: @CONTENT_HANDLER
# Value: FILE
# Examples:
article_mime_component_filter_rules = $fml_config_dir/mime_component_filter
=head2 filter for text/plain
# Descriptions: use text/plain filter, which is a simple syntax checker.
# History: 4.0's EnvelopeFilter.
# half of the following rules applied when
# $USE_DISTRIBUTE_FILTER is enabled.
# Value: YES_OR_NO
# Examples:
use_article_text_plain_filter = yes
# Descriptions: filter rules of text/plain filter.
# first match.
# permit post if no rule matched.
# History: See kern/libenvf.pl for more detail.
# [DISABLED BY DEFAULT]
#
# reject_not_iso2022jp_japanese_string
# <=> FILTER_ATTR_REJECT_INVALID_JAPANESE
# reject_old_fml_command_syntax
# <=> FILTER_ATTR_REJECT_COMMAND
# reject_japanese_command_syntax
# <=> FILTER_ATTR_REJECT_2BYTES_COMMAND
#
# [ENABLED BY DEFAULT]
#
# reject_null_mail_body
# <=> FILTER_ATTR_REJECT_NULL_BODY
# reject_invalid_fml_command_syntax
# <=> FILTER_ATTR_REJECT_INVALID_COMMAND
# reject_one_line_message
# <=> FILTER_ATTR_REJECT_ONE_LINE_BODY
# reject_ms_guid
# <=> FILTER_ATTR_REJECT_MS_GUID
#
# Note: permit by default
# Value: MIX (
# reject_not_iso2022jp_japanese_string
# reject_null_mail_body
# reject_one_line_message
# reject_old_fml_command_syntax
# reject_invalid_fml_command_syntax
# reject_japanese_command_syntax
# reject_ms_guid
# permit
# )
# Examples:
article_text_plain_filter_rules = reject_not_iso2022jp_japanese_string
reject_null_mail_body
reject_one_line_message
reject_old_fml_command_syntax
reject_invalid_fml_command_syntax
reject_japanese_command_syntax
reject_ms_guid
permit
=head2 external SPAM filter
# Descriptions: use external spam checker.
# disabled by default.
# add flag to header and go through if the message looks a spam.
# History: none
# Value: YES_OR_NO
# Examples: no
use_article_spam_filter = no
# Descriptions: action if the message looks a spam.
# History: none
# Value: MIX ( reject ignore header_rewrite )
# Examples: header_rewrite
article_spam_filter_rules = header_rewrite
# Descriptions: external spam checker.
# if plural drivers specified, try them sequentially.
# History: none
# Value: MIX ( spamassasin spamc bogofilter )
# Examples: bogofilter
article_spam_filter_drivers = bogofilter
# Descriptions: external virus checker. disabled by default.
# History: none
# Value: YES_OR_NO
# Examples: no
use_article_virus_filter = no
# Descriptions: action if virus found.
# History: none
# Value: MIX ( reject ignore header_rewrite )
# Examples: reject
article_virus_filter_rules = reject
# Descriptions: external virus checker.
# if plural drivers specified, try them sequentially.
# History: none
# Value: MIX ( clamscan )
# Examples: clamscan
article_virus_filter_drivers = clamscan
=head2 inform the filter rejection
# Descriptions: infor the filter rejection ?
# History: halfly hard-coded in fml 4.0.
# notice is always sent to maintainer,
# but not to sender by default.
# $FILTER_NOTIFY_REJECTION controlls notice to sender.
# Value: YES_OR_NO
# Examples: yes
use_article_filter_reject_notice = yes
# Descriptions: recipients to inform
# History: halfly hard-coded in fml 4.0.
# notice is always sent to maintainer,
# but not to sender by default.
# $FILTER_NOTIFY_REJECTION controlls notice to sender.
# Value: MIX ( maintainer sender )
# Examples: maintainer sender
article_filter_reject_notice_recipients = maintainer
sender
# Descriptions: how fml refer the rejeced message.
# We prefer string not multipart to avoid parsing of MUA.
# History: string in fml 4.0.
# Value: SELECT ( multipart string )
# Examples: string
article_filter_reject_notice_data_type = string
# Descriptions:
# History:
# Value: YES_OR_NO
# Examples:
use_article_spam_filter = no
# Descriptions: list up driver names used as spam checker.
# History: none
# Value: MIX ( spamassassin spamc bogofilter )
# Examples: bogofilter
article_spam_filter_functions = bogofilter
# Descriptions: exit non-zero status code when spam caught if "-e" specified.
# History: none
# Value: COMMAND_LINE_OPTIONS
# Examples: -e
article_spam_filter_spamassassin_options = -e
# Descriptions: spamc optoins. "-c" means check only.
# History: none
# Value: COMMAND_LINE_OPTIONS
# Examples: -c
article_spam_filter_spamc_options = -c
# Descriptions: "-e" implies embedded mode.
# History: none
# Value: COMMAND_LINE_OPTIONS
# Examples: -e
article_spam_filter_bogofilter_options = -e
# Descriptions:
# History:
# Value: YES_OR_NO
# Examples:
use_article_virus_filter = no
# Descriptions: list up driver names used as virus checker.
# History: none
# Value: MIX ( virusassassin virusc bogofilter )
# Examples: bogofilter
article_virus_filter_functions = clamav
# Descriptions: --mbox needed for mail files.
# History: none
# Value: COMMAND_LINE_OPTIONS
# Examples: --quiet --mbox
article_virus_filter_clamav_options = --quiet --mbox
=head2 filter
# Descriptions:
# History:
# Value: YES_OR_NO
# Examples:
use_command_mail_filter = yes
# Descriptions:
# History:
# Value: MIX ( command_mail_size_filter )
# Examples:
command_mail_filter_functions = command_mail_size_filter
=head2 size based filter
# Descriptions: use size based filter
# History:
# Value: YES_OR_NO
# Examples:
use_command_mail_size_filter = yes
# Descriptions: size based filter rules.
# first match.
# permit if no rule matched.
# History:
# Value: MIX (
# check_header_size
# check_body_size
# check_command_limit
# check_line_length_limit
# permit
# )
# Examples:
command_mail_size_filter_rules = check_header_size
check_body_size
check_command_limit
check_line_length_limit
permit
=head2 inform filter rejection
# Descriptions: inform filter rejection ?
# History: hard-coded.
# Value: YES_OR_NO
# Examples: yes
use_command_mail_filter_reject_notice = yes
# Descriptions: recipients to inform
# History: hard-coded.
# Value: MIX ( maintainer sender )
# Examples: maintainer sender
command_mail_filter_reject_notice_recipients = maintainer
sender
# Descriptions: how fml refer the rejeced message.
# We prefer string not multipart to avoid parsing of MUA.
# History: string in fml 4.0.
# Value: SELECT ( multipart string )
# Examples: string
command_mail_filter_reject_notice_data_type = string
# Descriptions:
# History:
# Value: FILE
# Examples:
path_bogofilter = @BOGOFILTER@
# $article_digest_finish_end_hook = q{ 1;};
# $article_digest_finish_start_hook = q{ 1;};
# $article_digest_prepare_end_hook = q{ 1;};
# $article_digest_prepare_start_hook = q{ 1;};
# $article_digest_run_end_hook = q{ 1;};
# $article_digest_run_start_hook = q{ 1;};
# $article_digest_verify_request_end_hook = q{ 1;};
# $article_digest_verify_request_start_hook = q{ 1;};
# $article_filter_end_hook = q{ 1;};
# $article_filter_start_hook = q{ 1;};
# $article_header_rewrite_end_hook = q{ 1;};
# $article_header_rewrite_start_hook = q{ 1;};
# $article_post_finish_end_hook = q{ 1;};
# $article_post_finish_start_hook = q{ 1;};
# $article_post_prepare_end_hook = q{ 1;};
# $article_post_prepare_start_hook = q{ 1;};
# $article_post_run_end_hook = q{ 1;};
# $article_post_run_start_hook = q{ 1;};
# $article_post_verify_request_end_hook = q{ 1;};
# $article_post_verify_request_start_hook = q{ 1;};
# $command_mail_filter_end_hook = q{ 1;};
# $command_mail_filter_start_hook = q{ 1;};
# $command_mail_finish_end_hook = q{ 1;};
# $command_mail_finish_start_hook = q{ 1;};
# $command_mail_prepare_end_hook = q{ 1;};
# $command_mail_prepare_start_hook = q{ 1;};
# $command_mail_run_end_hook = q{ 1;};
# $command_mail_run_start_hook = q{ 1;};
# $command_mail_verify_request_end_hook = q{ 1;};
# $command_mail_verify_request_start_hook = q{ 1;};
# $createonpost_finish_end_hook = q{ 1;};
# $createonpost_finish_start_hook = q{ 1;};
# $createonpost_prepare_end_hook = q{ 1;};
# $createonpost_prepare_start_hook = q{ 1;};
# $createonpost_run_end_hook = q{ 1;};
# $createonpost_run_start_hook = q{ 1;};
# $createonpost_verify_request_end_hook = q{ 1;};
# $createonpost_verify_request_start_hook = q{ 1;};
# $distribute_finish_end_hook = q{ 1;};
# $distribute_finish_start_hook = q{ 1;};
# $distribute_prepare_end_hook = q{ 1;};
# $distribute_prepare_start_hook = q{ 1;};
# $distribute_run_end_hook = q{ 1;};
# $distribute_run_start_hook = q{ 1;};
# $distribute_verify_request_end_hook = q{ 1;};
# $distribute_verify_request_start_hook = q{ 1;};
# $error_mail_analyzer_finish_end_hook = q{ 1;};
# $error_mail_analyzer_finish_start_hook = q{ 1;};
# $error_mail_analyzer_prepare_end_hook = q{ 1;};
# $error_mail_analyzer_prepare_start_hook = q{ 1;};
# $error_mail_analyzer_run_end_hook = q{ 1;};
# $error_mail_analyzer_run_start_hook = q{ 1;};
# $error_mail_analyzer_verify_request_end_hook = q{ 1;};
# $error_mail_analyzer_verify_request_start_hook = q{ 1;};
# $faker_finish_end_hook = q{ 1;};
# $faker_finish_start_hook = q{ 1;};
# $faker_prepare_end_hook = q{ 1;};
# $faker_prepare_start_hook = q{ 1;};
# $faker_run_end_hook = q{ 1;};
# $faker_run_start_hook = q{ 1;};
# $faker_verify_request_end_hook = q{ 1;};
# $faker_verify_request_start_hook = q{ 1;};
# $fetchfml_finish_end_hook = q{ 1;};
# $fetchfml_finish_start_hook = q{ 1;};
# $fetchfml_prepare_end_hook = q{ 1;};
# $fetchfml_prepare_start_hook = q{ 1;};
# $fetchfml_run_end_hook = q{ 1;};
# $fetchfml_run_start_hook = q{ 1;};
# $fetchfml_verify_request_end_hook = q{ 1;};
# $fetchfml_verify_request_start_hook = q{ 1;};
# $fmladdr_finish_end_hook = q{ 1;};
# $fmladdr_finish_start_hook = q{ 1;};
# $fmladdr_prepare_end_hook = q{ 1;};
# $fmladdr_prepare_start_hook = q{ 1;};
# $fmladdr_run_end_hook = q{ 1;};
# $fmladdr_run_start_hook = q{ 1;};
# $fmladdr_verify_request_end_hook = q{ 1;};
# $fmladdr_verify_request_start_hook = q{ 1;};
# $fmlalias_finish_end_hook = q{ 1;};
# $fmlalias_finish_start_hook = q{ 1;};
# $fmlalias_prepare_end_hook = q{ 1;};
# $fmlalias_prepare_start_hook = q{ 1;};
# $fmlalias_run_end_hook = q{ 1;};
# $fmlalias_run_start_hook = q{ 1;};
# $fmlalias_verify_request_end_hook = q{ 1;};
# $fmlalias_verify_request_start_hook = q{ 1;};
# $fmlconf_finish_end_hook = q{ 1;};
# $fmlconf_finish_start_hook = q{ 1;};
# $fmlconf_prepare_end_hook = q{ 1;};
# $fmlconf_prepare_start_hook = q{ 1;};
# $fmlconf_run_end_hook = q{ 1;};
# $fmlconf_run_start_hook = q{ 1;};
# $fmlconf_verify_request_end_hook = q{ 1;};
# $fmlconf_verify_request_start_hook = q{ 1;};
# $fmldoc_finish_end_hook = q{ 1;};
# $fmldoc_finish_start_hook = q{ 1;};
# $fmldoc_prepare_end_hook = q{ 1;};
# $fmldoc_prepare_start_hook = q{ 1;};
# $fmldoc_run_end_hook = q{ 1;};
# $fmldoc_run_start_hook = q{ 1;};
# $fmldoc_verify_request_end_hook = q{ 1;};
# $fmldoc_verify_request_start_hook = q{ 1;};
# $fmlhtmlify_finish_end_hook = q{ 1;};
# $fmlhtmlify_finish_start_hook = q{ 1;};
# $fmlhtmlify_prepare_end_hook = q{ 1;};
# $fmlhtmlify_prepare_start_hook = q{ 1;};
# $fmlhtmlify_run_end_hook = q{ 1;};
# $fmlhtmlify_run_start_hook = q{ 1;};
# $fmlhtmlify_verify_request_end_hook = q{ 1;};
# $fmlhtmlify_verify_request_start_hook = q{ 1;};
# $fmlpgp_finish_end_hook = q{ 1;};
# $fmlpgp_finish_start_hook = q{ 1;};
# $fmlpgp_prepare_end_hook = q{ 1;};
# $fmlpgp_prepare_start_hook = q{ 1;};
# $fmlpgp_run_end_hook = q{ 1;};
# $fmlpgp_run_start_hook = q{ 1;};
# $fmlpgp_verify_request_end_hook = q{ 1;};
# $fmlpgp_verify_request_start_hook = q{ 1;};
# $makefml_finish_end_hook = q{ 1;};
# $makefml_finish_start_hook = q{ 1;};
# $makefml_prepare_end_hook = q{ 1;};
# $makefml_prepare_start_hook = q{ 1;};
# $makefml_run_end_hook = q{ 1;};
# $makefml_run_start_hook = q{ 1;};
# $makefml_verify_request_end_hook = q{ 1;};
# $makefml_verify_request_start_hook = q{ 1;};
Copyright (C) 1993-2025 Ken'ichi Fukamachi mail:< fukachan at fml.org >