# SpamAssassin rules file: default DKIM whitelists
#
# 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>

###########################################################################
# DKIM whitelist rules

ifplugin Mail::SpamAssassin::Plugin::DKIM

header USER_IN_DKIM_WHITELIST	eval:check_for_dkim_whitelist_from()
describe USER_IN_DKIM_WHITELIST	From: address is in the user's DKIM whitelist
tflags USER_IN_DKIM_WHITELIST	nice noautolearn net userconf

header USER_IN_DEF_DKIM_WL	eval:check_for_def_dkim_whitelist_from()
describe USER_IN_DEF_DKIM_WL	From: address is in the default DKIM white-list
tflags USER_IN_DEF_DKIM_WL	nice noautolearn net

###########################################################################
# Default whitelists.  These should be e-mail addresses of authors (i.e.
# addresses in the From header field) which send mail that is often
# tagged (incorrectly) as spam.  DKIM whitelisting only applies to mail
# with a valid DKIM (or older DK) signature.  An optional second parameter
# can specify a signing domain (the 'd' tag), if different from author's
# domain. Please see Mail::SpamAssassin::Plugin::DKIM man page for details.
#
# Whitelist and blacklist addresses are file-glob-style patterns, so
# "friend@somewhere.com", "*@isp.com", or "*.domain.net" will all work.

def_whitelist_from_dkim  *@*.ebay.com		ebay.com
def_whitelist_from_dkim  *@ebay.com
def_whitelist_from_dkim  *@*.ebay.com
def_whitelist_from_dkim  *@ebay.co.uk
def_whitelist_from_dkim  *@*.ebay.co.uk
def_whitelist_from_dkim  *@ebay.at
def_whitelist_from_dkim  *@*.ebay.at
def_whitelist_from_dkim  *@ebay.be
def_whitelist_from_dkim  *@*.ebay.be
def_whitelist_from_dkim  *@ebay.de
def_whitelist_from_dkim  *@*.ebay.de
def_whitelist_from_dkim  *@ebay.es
def_whitelist_from_dkim  *@*.ebay.es
def_whitelist_from_dkim  *@ebay.fr
def_whitelist_from_dkim  *@*.ebay.fr
def_whitelist_from_dkim  *@ebay.ie
def_whitelist_from_dkim  *@*.ebay.ie
def_whitelist_from_dkim  *@ebay.it
def_whitelist_from_dkim  *@*.ebay.it
def_whitelist_from_dkim  *@ebay.nl
def_whitelist_from_dkim  *@*.ebay.nl
def_whitelist_from_dkim  *@ebay.pt
def_whitelist_from_dkim  *@*.ebay.pt
def_whitelist_from_dkim  *@ebay.ca
def_whitelist_from_dkim  *@*.ebay.ca

def_whitelist_from_dkim  *@*			paypal.com
def_whitelist_from_dkim  *@paypal.com
def_whitelist_from_dkim  *@*.paypal.com
def_whitelist_from_dkim  *@paypal.co.uk
def_whitelist_from_dkim  *@*.paypal.co.uk
def_whitelist_from_dkim  *@paypal.at
def_whitelist_from_dkim  *@*.paypal.at
def_whitelist_from_dkim  *@paypal.be
def_whitelist_from_dkim  *@*.paypal.be
def_whitelist_from_dkim  *@paypal.de
def_whitelist_from_dkim  *@*.paypal.de
def_whitelist_from_dkim  *@paypal.es
def_whitelist_from_dkim  *@*.paypal.es
def_whitelist_from_dkim  *@paypal.fr
def_whitelist_from_dkim  *@*.paypal.fr
def_whitelist_from_dkim  *@paypal.ie
def_whitelist_from_dkim  *@*.paypal.ie
def_whitelist_from_dkim  *@paypal.it
def_whitelist_from_dkim  *@*.paypal.it
def_whitelist_from_dkim  *@paypal.nl
def_whitelist_from_dkim  *@*.paypal.nl
def_whitelist_from_dkim  *@paypal.pt
def_whitelist_from_dkim  *@*.paypal.pt
def_whitelist_from_dkim  *@paypal.ca
def_whitelist_from_dkim  *@*.paypal.ca

def_whitelist_from_dkim  *@cisco.com
def_whitelist_from_dkim  *@lh.lufthansa.com
def_whitelist_from_dkim  *@*.milesandmore.com
def_whitelist_from_dkim  *@mail.hotels.com
def_whitelist_from_dkim  *@email.hotels.com
def_whitelist_from_dkim  *@alert.bankofamerica.com
def_whitelist_from_dkim  *@ealerts.bankofamerica.com
def_whitelist_from_dkim  *@cc.yahoo-inc.com	yahoo-inc.com
def_whitelist_from_dkim  *@cc.yahoo-inc.com
def_whitelist_from_dkim  googlealerts-noreply@google.com

def_whitelist_from_dkim  *@springer.delivery.net
def_whitelist_from_dkim  *@sci.scientific-direct.net
def_whitelist_from_dkim  *@strongmail.the-scientist.com
def_whitelist_from_dkim  *@ealert.nature.com
def_whitelist_from_dkim  *@gateways.nature.com
def_whitelist_from_dkim  *@information.nature.com
def_whitelist_from_dkim  *@newsdesk.world-nuclear-news.org
def_whitelist_from_dkim  *@biocompare.com
def_whitelist_from_dkim  *@dentalcompare.com
def_whitelist_from_dkim  *@medcompare.com
def_whitelist_from_dkim  *@itbusinessedge.com
def_whitelist_from_dkim  *@nl.reuters.com
def_whitelist_from_dkim  *@email.washingtonpost.com
def_whitelist_from_dkim  *@washingtontimesmail.com
def_whitelist_from_dkim  *@info-aaas.org
def_whitelist_from_dkim  *@*.newsmax.com
def_whitelist_from_dkim  *@zdnet.online.com
def_whitelist_from_dkim  *@m-w.com

def_whitelist_from_dkim  *@skype.net
def_whitelist_from_dkim  *@*.skype.net
def_whitelist_from_dkim  *@*.skype.net		skype.net
def_whitelist_from_dkim  *@*.skype.com
def_whitelist_from_dkim  *@*.skype.com		skype.com

#consider also:
# def_whitelist_from_dkim  *@avaaz.org
# def_whitelist_from_dkim  *@techrepublic.online.com
# def_whitelist_from_dkim  ezines@arcamax.com
# def_whitelist_from_dkim  *@yousendit.com
# def_whitelist_from_dkim  *@meetup.com
# def_whitelist_from_dkim  *@astrology.com
# def_whitelist_from_dkim  *@google.com
# def_whitelist_from_dkim  *@amazon.com
# def_whitelist_from_dkim  *@amazon.co.uk
# def_whitelist_from_dkim  *@amazon.de
# def_whitelist_from_dkim  *@amazon.fr

endif # Mail::SpamAssassin::Plugin::DKIM
