# SpamAssassin rules file: auto-welcomelist
#
# Please don't modify this file as your changes will be overwritten with
# the next update. Use @@LOCAL_RULES_DIR@@/local.cf instead.
# See 'perldoc Mail::SpamAssassin::Conf' for details.
#
# <@LICENSE>
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at:
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# </@LICENSE>

ifplugin Mail::SpamAssassin::Plugin::AWL

if can(Mail::SpamAssassin::Conf::feature_welcomelist_blocklist)
header AWL			eval:check_from_in_auto_welcomelist()
endif
if !can(Mail::SpamAssassin::Conf::feature_welcomelist_blocklist)
header AWL			eval:check_from_in_auto_whitelist()
endif

describe AWL			Adjusted score from AWL reputation of From: address
tflags AWL			userconf noautolearn
priority AWL                    1000

endif # Mail::SpamAssassin::Plugin::AWL
