# this is an example warnquota.conf
#
; ; and # type comments are allowed
# and even blank lines

# values can be quoted:
#MAIL_CMD 	= "/usr/my/sendmail/instead/sendmail -t"
MAIL_CMD 	= "/bin/echo"
FROM 		= "bas@example.com"
# but they don't have to be:
SUBJECT 	= Hey, user, clean up your account!
CC_TO 		= "sysadm@example.com"
# If you set this variable CC will be used only when user has less than
# specified grace time left (examples of possible times: 5 seconds, 1 minute,
# 12 hours, 5 days)
# CC_BEFORE = 2 days
SUPPORT 	= "support@example.com"
PHONE 		= "(123) 456-1111 or (222) 333-4444"
# Text in the beginning of the mail (if not specified, default text is used)
# This way text can be split to more lines
# Line breaks are done by '|' character
# The expressions %i, %h, %d, and %% are substituted for user/group name,
# host name, domain name, and '%' respectively. For backward compatibility
# %s behaves as %i but is deprecated.
MESSAGE         = Hello user %i, I've noticed you use too much space\
 on my disk in %h.%d.|Delete your files on the following filesystems:|
# Text in the end of the mail (if not specified, default text using SUPPORT and PHONE
# is created)
SIGNATURE	= See you!|			Your admin of %h|
# Following text is used for mails about group exceeding quotas
GROUP_MESSAGE	= Hello,|\
your group %i is using too much disk space at %h.|\
I suggest you to clean up group files on the following filesystems:|
# Text in the end of the mail to the group (if not specified, default text using SUPPORT
# and PHONE is created).
GROUP_SIGNATURE	= See you!|			Your admin|
#
#If you are running warnquota on a mail server, and don't want bounces
#because clients cannot receive mail setting this to "any" will cause
#warnquota to not send them mail for all devices.  If you set this to the
#device name (for example /dev/hdb1) then they will not be sent mail if they
#are overquota on that device only, and will be sent mail for all other
#devices.
#MAILDEV        =
#
#Here you can set a charset for emails sent by warnquota (e.g. UTF-8)
#CHARSET	= 
# If you are using LDAP mail lookups.
# host, port, tls, binddn, and bindpw are straight forward.
# LDAP_BASEDN is your search base dn
# LDAP_SEARCH_ATTRIBUTE is the attr for the value you are looking for
# LDAP_MAIL_ATTRIBUTE is the attribute you want used for the mail address
# LDAP_DEFAULT_MAIL_DOMAIN is the default domain
#    if the attribute isn't found
# if binddn and bindpw are blank or left out, an anonymous bind is used
# 
# LDAP_MAIL = false # or true if you want to use it
# If you have at least LDAP 2.3 installed, you should use LDAP_URI
# LDAP_URI = ldaps://my.server:389
# Otherwise you should specify LDAP_HOST and LDAP_PORT
# LDAP_HOST = ldap
# LDAP_PORT = 389
# LDAP_TLS = false (false|never|allow|try|demand) use StarTLS
#   false - don't use starTLS
#   never - don't ask for a certificate
#   allow - request certificate, proceed even if not verified
#   try - request certificate, terminate if bad, proceed if not sent
#   demand - request certificate, proceed only if verified
# LDAP_BINDDN = uid=ReadOnlyUser,o=YourOrg
# LDAP_BINDPW = YourReadOnlyUserPassword
# LDAP_BASEDN = YourSearchBase
# LDAP_SEARCH_ATTRIBUTE = uid
# LDAP_MAIL_ATTRIBUTE = mailLocalAddress
# LDAP_DEFAULT_MAIL_DOMAIN = YourDefaultMailDomain.com
#
# end of example warnquota.conf file
#
