# 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
reuse USER_IN_DKIM_WHITELIST

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
reuse USER_IN_DEF_DKIM_WL

###########################################################################
# 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  *@*.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

def_whitelist_from_dkim *@imdb.com amazonses.com
def_whitelist_from_dkim *@dhl.com
def_whitelist_from_dkim *@tumblr.com
def_whitelist_from_dkim *@fisglobal.com
def_whitelist_from_dkim *@*.msgfocus.com
def_whitelist_from_dkim *@boredpanda.com mailersend.com

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