Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
VERIFYFILTER(8) 	     Double Precision, Inc.		 VERIFYFILTER(8)

NAME
     verifyfilter, verifysmtp - Verify mail addresses

SYNOPSIS
     filterctl {[start] | [stop]} verifyfilter

DESCRIPTION
     This is a mail filter/tool combination that tries to determine the validity
     of E-mail addresses by attempting to contact the mail domain's mail server,
     and executing a RCPT TO command. There are three ways to use this tool.

     *	 As a shell command, to test an E-mail address for deliverability.

     *	 As a global mail filter.

     *	 As a local recipient mail filter.

     verifyfilter  is  suitable  for handling moderate amount of E-mail traffic.
     Address validation is expensive, requiring a DNS  lookup  and  an	outbound
     connection to a mail server for every validated address.  verifyfilter goes
     through the same steps that the mail server does when sending mail, includ-
     ing enabling of encryption.

     verifyfilter  uses  logging and caching, to avoid repeatedly validating the
     same return address when receiving multiple E-mails from the  same  sender;
     but  its  caching is rudimentary (a simple log file), and increased logging
     due to high E-mail traffic mail delivery may create large	log  files,  im-
     pacting performance.

   The verifysmtp command
     verifysmtp [-n] [-t directory] [-m {full|base}] {user@domain}

     The  verifysmtp  command  creates	a  network  connection	to domain's mail
     server, and checks if it considers the given E-mail address as  valid.  Two
     or more E-mail addresses can be given, and each E-mail address gets checked
     individually.

     verifysmtp  terminates  with a zero exit code if all given E-mail addresses
     passed. A non-zero exit code indicates that one or more of  the  given  ad-
     dresses were rejected.

     The  -m  option is analogous to the verifyfilter-logmode setting, described
     below, that specifies how E-mail addresses are compared against the  cached
     verification  results.  The -t enables caching of verification results, and
     specifies the directory for storing the cached results.

     The -n option suppresses internal error messages  from  getting  logged  to
     standard error. This is used in the verifyfilter global mail filter.

   The verifyfilter global mail filter
     filterctl {[start] | [stop]} verifyfilter

     The  verifyfilter global mail filter, if enabled, checks each message's re-
     turn address. The E-mail message gets rejected if its return address's mail
     server rejects the return address. There's not much sense in accepting mail
     if its return address is undeliverable.

     verifyfilter ignores messages from  authenticated	senders,  and  does  not
     check their return addresses.

   Local recipient mail filter
	 mkdir /usr/local/etc/courier/maildroprcs
	 cp /usr/local/share/courier/verifysender /usr/local/etc/courier/maildroprcs
	 cp /usr/local/share/courier/verifysenderfull /usr/local/etc/courier/maildroprcs

     In your $HOME:

	 mkdir $HOME/.trackdir

     In $HOME/.mailfilters/rcptfilter:

	 include '/usr/local/etc/courier/maildroprcs/verifysender'

     Or:

	 include '/usr/local/etc/courier/maildroprcs/verifysenderfull'

     This  alternative provides comparable functionality as the global mail fil-
     ter, but exposed via the localmailfilter(7)[1] API.

     With maildrop, a protected wrapper filtering  recipe  gets  installed  into
     /usr/local/etc/courier/maildroprcs/verifysender,  which  invokes verifysmtp
     via maildrop's system command. The wrapper must be included in this manner,
     since maildrop normally does not allow the system command in  the	embedded
     execution mode that's used by the local mail filtering API.

     The wrapper executes verifysmtp with a special argument, a single ".". This
     is  a  special  parameter	that  indicates  that verifysmtp should read the
     E-mail address from the SENDER environment variable (avoiding  issues  with
     shell expansion, and script kiddies).

     The  /usr/local/etc/courier/maildroprcs/verifysender  wrapper  can be suit-
     ably, perhaps optionally, included from either the rcptfilter or the  smtp-
     filter script.

   Logging and caching
     verifyfilter  caches  the return address it checks. Once verifyfilter veri-
     fies that the return address is  accepted	by  the  sending  domain's  mail
     server,  this  is logged and additional E-mail with the same return address
     gets immediately accepted without	contacting  the  sending  domain's  mail
     server to re-check the same address.

     Successfully  verified  return  addresses	get cached for approximately 2-3
     hours. If no other E-mail with the same address  get  received  before  the
     cache  expires that return address gets rechecked the next time it is seen.
     If another E-mail with the same return address gets received, it is immedi-
     ately accepted and the email address gets	recached.  Most  mailing  lists'
     bounce  addresses	should	not  cause excessive re-verification, provided a
     regular trickle of mailing list traffic. This includes  mailing  list  that
     use  per-message  bounce  addresses  that follow the common VERP convention
     (Variable Envelope Return Path), see "FILES" below.

     As becomes obvious after perusing the contents of	the  stock  verifysender
     local  mail  filter,  verifysmtp's -t gives the name of a scratch directory
     that verifysmtp uses for the cache. This directory should be set aside  for
     verifysmtp,  and not used for other purposes. The global mail filter shares
     the scratch directory together with other Courier functions that  work  the
     same way.

BUGS
     Just  because  a mail server accepted the RCPT TO it does not mean that the
     given E-mail address can ultimately receive E-mail. This is especially true
     if a smarthost is in the picture.	verifyfilter and verifysmtp will attempt
     to read the esmtproutes configuration file (see courier(8)[2] for more  in-
     formation).  If  esmtproutes is configured to use a smarthost all mail, for
     all domains, then every email address will pass validation if the smarthost
     accept mail to any recipient without any further checking	(as  is  usually
     the case).

     verifysmtp  is  a	shell  script wrapper that imports Courier's environment
     from /usr/local/etc/courier/courierd then executes verifyfilter. Running as
     a non-daemon user, verifysmtp may not be able to read some  Courier's  con-
     figuration  files,  like  the aforementioned esmtproutes and authclient. As
     such, verifysmtp's behavior might differ from Courier's, when sending mail.

FILES
     verifyfilter uses the following configuration files. Changes to the follow-
     ing files do not  take  effect  until  the  filter  has  been  stopped  and
     restarted.

     /usr/local/etc/courier/filters/verifyfilter-mode
	 If this file exists and contains the word "all", verifyfilter will cre-
	 ate  its  socket in /var/spool/courier/allfilters, otherwise the socket
	 will be created in /var/spool/courier/filters, see  courierfilter(8)[3]
	 for more information.

     /usr/local/etc/courier/filters/verifyfilter-logmode
	 This  file  contains  a single line, "base" or "full".  "full" verifies
	 each return address, exactly as given. The default "base" value  strips
	 off any VERP component of the sender's address, before comparing it. If
	 the  local  mailbox  portion of the return address contains a dash, the
	 dash and the remaining portion of the return address gets removed.

	 With  the  default  "base"  logging  mode,  once  the	E-mail	 address
	 <list-12@example.com>	 gets	verified,  all	further  addresses  like
	 <list-13@example.com> and <list-foo-bar@example.com> are considered  as
	 verified, but not <anotherlist@example.com>.

     /usr/local/etc/courier/filters/verifyfilter-nthreads
	 This  file  contains  a  single numerical value that sets the number of
	 threads created (one thread is used to check each email  address).  The
	 default number of threads is 10.

SEE ALSO
     courierfilter(8)[3], localmailfilter(7)[1].

AUTHOR
     Sam Varshavchik
	 Author

NOTES
      1.

		localmailfilter(7)
	 https://www.courier-mta.org/localmailfilter.html

      2.

	      courier(8)

	 https://www.courier-mta.org/courier.html

      3. courierfilter(8)
	 https://www.courier-mta.org/courierfilter.html

Courier Mail Server		   04/14/2025			 VERIFYFILTER(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=verifysmtp&sektion=8&manpath=FreeBSD+Ports+15.1.quarterly>

home | help