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

ifplugin Mail::SpamAssassin::Plugin::DKIM

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

# 4.0 / Bug 7826 renames whitelist to welcomelist and blacklist to blocklist
if can(Mail::SpamAssassin::Conf::feature_welcomelist_blocklist)
  header USER_IN_DKIM_WELCOMELIST	eval:check_for_dkim_welcomelist_from()
  describe USER_IN_DKIM_WELCOMELIST	From: address is in the user's DKIM welcomelist
  tflags USER_IN_DKIM_WELCOMELIST	nice noautolearn net userconf
  score USER_IN_DKIM_WELCOMELIST	-100
  reuse USER_IN_DKIM_WELCOMELIST

  # Backwards compatibility
  # To disable set "enable_compat welcomelist_blocklist" in init.pre
  if !can(Mail::SpamAssassin::Conf::compat_welcomelist_blocklist)
    meta USER_IN_DKIM_WHITELIST		(USER_IN_DKIM_WELCOMELIST)
    describe USER_IN_DKIM_WHITELIST	DEPRECATED: See USER_IN_DKIM_WELCOMELIST
    tflags USER_IN_DKIM_WHITELIST	nice noautolearn net userconf
    score USER_IN_DKIM_WHITELIST	-100
    reuse USER_IN_DKIM_WHITELIST
    score USER_IN_DKIM_WELCOMELIST	-0.01
  endif
endif
if !can(Mail::SpamAssassin::Conf::feature_welcomelist_blocklist)
  header USER_IN_DKIM_WELCOMELIST	eval:check_for_dkim_whitelist_from()
  describe USER_IN_DKIM_WELCOMELIST	From: address is in the user's DKIM welcomelist
  tflags USER_IN_DKIM_WELCOMELIST	nice noautolearn net userconf
  score USER_IN_DKIM_WELCOMELIST	-100
  reuse USER_IN_DKIM_WELCOMELIST

  if !can(Mail::SpamAssassin::Conf::compat_welcomelist_blocklist)
    meta USER_IN_DKIM_WHITELIST		(USER_IN_DKIM_WELCOMELIST)
    describe USER_IN_DKIM_WHITELIST	DEPRECATED: See USER_IN_DKIM_WELCOMELIST
    tflags USER_IN_DKIM_WHITELIST	nice noautolearn net userconf
    score USER_IN_DKIM_WHITELIST	-100
    reuse USER_IN_DKIM_WHITELIST
    score USER_IN_DKIM_WELCOMELIST	-0.01
  endif
endif

if can(Mail::SpamAssassin::Conf::feature_welcomelist_blocklist)
  header USER_IN_DEF_DKIM_WL	eval:check_for_def_dkim_welcomelist_from()
  describe USER_IN_DEF_DKIM_WL	From: address is in the default DKIM welcome-list
  tflags USER_IN_DEF_DKIM_WL	nice noautolearn net
  reuse USER_IN_DEF_DKIM_WL
endif
if !can(Mail::SpamAssassin::Conf::feature_welcomelist_blocklist)
  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 welcome-list
  tflags USER_IN_DEF_DKIM_WL	nice noautolearn net
  reuse USER_IN_DEF_DKIM_WL
endif

###########################################################################
# Default welcomelists.  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 welcomelisting 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.

if can(Mail::SpamAssassin::Conf::feature_welcomelist_blocklist)

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

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

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

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

def_welcomelist_from_dkim  *@skype.net
def_welcomelist_from_dkim  *@*.skype.net
def_welcomelist_from_dkim  *@*.skype.net		skype.net
def_welcomelist_from_dkim  *@*.skype.com
def_welcomelist_from_dkim  *@*.skype.com		skype.com

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

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

endif # if can(Mail::SpamAssassin::Conf::feature_welcomelist_blocklist)


#
# For older versions of SA, these old entries remain for SA before version 4.0
#

if !can(Mail::SpamAssassin::Conf::feature_welcomelist_blocklist)

def_whitelist_from_dkim  *@*.ebay.com		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 # if !can(Mail::SpamAssassin::Conf::feature_welcomelist_blocklist)

#
#
#

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

