LMTP issue

I've deployed MS 6.2 on 2 hosts.
hostA - MEM, MMP, UWC, AccessManager, MTA - frontend
hostB - store, ME - backend
users has accounts on domain.com -> hostB
Everything was ok until I wanted to use LMTP. Sending, receiving - no
problems.
When I followed docs I cannot send messages via SMTP (hostA) and I cannot receive it when I send mail form other mailsystem.
SMTP error: 535 Bad username or password
a a sending account from other mailserver gets reply:
----- The following addresses had permanent fatal errors -----
<[email protected]>
(reason: 550 5.1.1 unknown or illegal alias: [email protected])
----- Transcript of session follows -----
... while talking to hostA.domain.com:
DATA<<< 550 5.1.1 unknown or illegal alias: [email protected]
550 5.1.1 <[email protected]>... User unknown
<<< 554 5.5.0 No recipients have been specified.
But I can log in via UWC and read mailbox by IMAP.
./imsimta version
Sun Java(tm) System Messaging Server 6.2-3.04 (built Jul 15 2005)
libimta.so 6.2-3.04 (built 01:43:03, Jul 15 2005)
SunOS hostA 5.9 Generic_118558-23 sun4u sparc SUNW,UltraAX-i2
Done on hostA:
./imsimta test -rewrite [email protected]
forward channel = l
channel description =
channel user filter =
dest channel filter =
source channel filter =
channel flags #0 = BIDIRECTIONAL MULTIPLE IMMNONURGENT NOSERVICEALL
channel flags #1 = NOSMTP DEFAULT
channel flags #2 = COPYSENDPOST COPYWARNPOST POSTHEADONLY HEADERINC NOEXPROUTE
channel flags #3 = NOLOGGING NOGREY NORESTRICTED RETAINSECURITYMULTIPARTS
channel flags #4 = EIGHTBIT NOHEADERTRIM NOHEADERREAD RULES
channel flags #5 =
channel flags #6 = LOCALUSER REPORTNOTARY
channel flags #7 = NOSWITCHCHANNEL NOREMOTEHOST DATEFOUR DAYOFWEEK
channel flags #8 = NODEFRAGMENT EXQUOTA REVERSE NOCONVERT_OCTET_STREAM
channel flags #9 = NOTHURMAN INTERPRETENCODING USEINTERMEDIATE RECEIVEDFROM VALIDATELOCALSYSTEM NOTURN
defaulthost = we.pw.edu.pl we.pw.edu.pl
linelength = 1023
channel env addr type = SOURCEROUTE
channel hdr addr type = SOURCEROUTE
channel official host = hebe.we.pw.edu.pl
channel queue 0 name = LOCAL_POOL
channel queue 1 name = LOCAL_POOL
channel queue 2 name = LOCAL_POOL
channel queue 3 name = LOCAL_POOL
channel after params =
channel user name =
urgentnotices = 1 2 4 7
normalnotices = 1 2 4 7
nonurgentnotices = 1 2 4 7
channel rightslist ids =
local behavior flags = %x7
expandchannel =
notificationchannel =
dispositionchannel =
saslswitchchannel =
tlsswitchchannel =
backward channel = l
header To: address = [email protected]
header From: address = [email protected]
envelope To: address = [email protected] (route (hostA.domain.com,hostA.domain.com)) (host domain.com)
envelope From: address = [email protected]
name =
mbox = user
Extracted address action list:
[email protected]
Extracted 733 address action list:
[email protected]
Address list expansion:
0 expansion total.
Expanded address:
[email protected]
Submitted address list:
Address list error -- 5.1.1 unknown or illegal alias: [email protected]
Submitted notifications list:
I guess a problem in options.dat but I have no idea.
option.dat
! MTA configuration options
! This sets the alias resolution order
! 8 = Use ALIAS_URL0
! 7 = Use ALIAS_URL1
! 6 = Use ALIAS_URL2
! 4 = Use the alias file
ALIAS_MAGIC=8764
ALIAS_URL0=ldap:///$V?*?sub?$R
USE_REVERSE_DATABASE=4
REVERSE_URL=ldap:///$V?$N?sub?$R
USE_DOMAIN_DATABASE=0
! MISSING_RECIPIENT_POLICY controls how illegal headers that don't
! contain any To:, Cc:, or Bcc: fields are handled for channels that
! do not have their own explicit missingrecipientpolicy keyword set.
! The default of 0 means that the envelope addresses are used to
! construct a valid To: header field. This default behavior tends
! to be especially appropriate for the tcp_local channel.
MISSING_RECIPIENT_POLICY=0
MISSING_RECIPIENT_GROUP_TEXT=Undisclosed recipients
ALIAS_DOMAINS=6
! Modified DELIVERY_OPTIONS to activate LMTP
! delivery from a frontend relay to the backend
DELIVERY_OPTIONS=\
#*mailbox=@$X.LMTP:$M%$\$2I$_+$2S@lmtpcs-daemon,\
#&members=*,\
#*native=@$X.LMTPN:$M+$2S@native-daemon,\
#*unix=@$X.LMTPN:$M,\
#*file=@$X.LMTPN:+$F,\
#&@members_offline=*,\
#/hold=@hold-daemon:$A,\
#program=$M%$P@pipe-daemon,\
#forward=**,\
#*^!autoreply=$M+$D@bitbucket
LDAP_SCHEMALEVEL=2
VACATION_TEMPLATE=file:///opt/SUNWmsgsr/data/vacation/$3I/$1U/$2U/$U.vac
! for Spamassassin
spamfilter1_config_file=/opt/SUNWmsgsr/config/spamassassin.opt
spamfilter1_library=/opt/SUNWmsgsr/lib/libspamass.so
spamfilter1_optional=1
spamfilter1_string_action=data:,addtag "[SPAM detected: $U]";

I have latest patch cluster installed. But version still the same.
I checked my config twice. It is identical as in docs.
The backend host responds to telnet on LMTP ports but
frontend does not want to send somenhing via LMTP (I checked by snoop).
Can anyone post his option.dat from working LMTP environment?
frontend seems to be unable to locate users with store on backend.
Maybe it would help:
ed@domain is a mail address and ed is UID
#sbin/imsimta test -rewrite -debug [email protected]
Initializing mm_.
Initializing mm_ submission.
Checking identifiers.
*** Debug output from initializing MM for submission:
16:04:52.48: Debug output enabled, message enqueue routines version V6.2-3.04 compiled Jul 15 200501:43:19
16:04:52.48: mmc_winit('l','[email protected]','[email protected]') called.
16:04:52.48: Queue area size 6828122, temp area size 415582
16:04:52.48:   1707030 blocks of effective free queue space available; setting disk limit accordingly.
16:04:52.48:   207791 blocks of free temporary space available; setting disk limit accordingly.
16:04:52.48: Rewriting:  Mbox = "postmaster", host = "hostA.domain.com", domain = "$*", literal = "", tag = ""
16:04:52.48: Rewrite: "$*", position 0, hash table -
16:04:52.48:   Found: "$A$E$F$U%[email protected]"
16:04:52.48:   Rewrite failed, not forward.
16:04:52.48: Rewrite: "$*", position 1, hash table -
16:04:52.48:   Failed.
16:04:52.48: Rewrite: "$*", position 0, rewrite database -
16:04:52.48:   Failed
16:04:52.48: Rewriting:  Mbox = "postmaster", host = "hebe", domain = "hostA.domain.com", literal = "", tag = ""
16:04:52.48: Rewrite: "hostA.domain.com", position 0, hash table -
16:04:52.48:   Found: "$U%[email protected]"
16:04:52.48:   New mailbox: "postmaster".
16:04:52.48:   New host: "hostA.domain.com".
16:04:52.48:   New route: "hostA.domain.com".
16:04:52.48:   New channel system: "hostA.domain.com".
16:04:52.48: Looking up host "hostA.domain.com".
16:04:52.48:   - found on channel l
16:04:52.48: Routelocal flag set; scanning for % and !
16:04:52.48:   Checking reverse URL cache for: [email protected]
16:04:52.48:   Applying reverse URL pattern ldap:///$V?$N?sub?$R to: [email protected]
16:04:52.49:   URL generation failed, status = 0
16:04:52.49:   Mapped return address: [email protected]
16:04:52.49:   from_access mapping check: ||MAIL|l|[email protected]|
16:04:52.49:       - passed.
16:04:52.49: Rewriting:  Mbox = "postmaster", host = "hostA.domain.com", domain = "$*", literal = "", tag = ""
16:04:52.49: Rewrite: "$*", position 0, hash table -
16:04:52.49:   Found: "$A$E$F$U%[email protected]"
16:04:52.49:   Rewrite failed, not forward.
16:04:52.49: Rewrite: "$*", position 1, hash table -
16:04:52.49:   Failed.
16:04:52.49: Rewrite: "$*", position 0, rewrite database -
16:04:52.49:   Failed
16:04:52.49: Rewriting:  Mbox = "postmaster", host = "hebe", domain = "hostA.domain.com", literal = "", tag = ""
16:04:52.49: Rewrite: "hostA.domain.com", position 0, hash table -
16:04:52.49:   Found: "$U%[email protected]"
16:04:52.49:   New mailbox: "postmaster".
16:04:52.49:   New host: "hostA.domain.com".
16:04:52.49:   New route: "hostA.domain.com".
16:04:52.49:   New channel system: "hostA.domain.com".
16:04:52.49: Looking up host "hostA.domain.com".
16:04:52.49:   - found on channel l
16:04:52.49: Routelocal flag set; scanning for % and !
*** Debug output from rewriting a forward header address:
16:04:52.49: Rewriting:  Mbox = "ed", host = "domain.com", domain = "$*", literal = "", tag = ""
16:04:52.49: Rewrite: "$*", position 0, hash table -
16:04:52.49:   Found: "$A$E$F$U%[email protected]"
16:04:52.49:   Rewrite failed, not envelope.
16:04:52.49: Rewrite: "$*", position 1, hash table -
16:04:52.49:   Failed.
16:04:52.49: Rewrite: "$*", position 0, rewrite database -
16:04:52.49:   Failed
16:04:52.49: Rewriting:  Mbox = "ed", host = "domain", domain = "domain.com", literal = "", tag = ""
16:04:52.49: Rewrite: "domain.com", position 0, hash table -
16:04:52.49:   Found: "$U%[email protected]"
16:04:52.49:   New mailbox: "ed".
16:04:52.49:   New host: "domain.com".
16:04:52.49:   New route: "hostA.domain.com".
16:04:52.49:   New channel system: "hostA.domain.com".
16:04:52.49: Looking up host "hostA.domain.com".
16:04:52.49:   - found on channel l
16:04:52.49: Routelocal flag set; scanning for % and !
16:04:52.49:   Rewrite rules result: [email protected]
16:04:52.49:   Checking reverse URL cache for: [email protected]
16:04:52.49:   Applying reverse URL pattern ldap:///$V?$N?sub?$R to: [email protected]
16:04:52.50:   URL generation failed, status = 0
*** Debug output from rewriting a forward envelope address:
16:04:52.50: Rewriting:  Mbox = "ed", host = "domain.com", domain = "$*", literal = "", tag = ""
16:04:52.50: Rewrite: "$*", position 0, hash table -
16:04:52.50:   Found: "$A$E$F$U%[email protected]"
16:04:52.50:   Match, pattern = "domain.com", current = "(*domaincheck*)"
16:04:52.50:     old state = not checked.
16:04:52.50:     Domain check on domain.com.
16:04:52.50:     new state = fail pending.
16:04:52.50:   Rewrite failed due to prechannel mismatch.
16:04:52.50: Rewrite: "$*", position 1, hash table -
16:04:52.50:   Failed.
16:04:52.50: Rewrite: "$*", position 0, rewrite database -
16:04:52.50:   Failed
16:04:52.50: Rewriting:  Mbox = "ed", host = "domain", domain = "domain.com", literal = "", tag = ""
16:04:52.50: Rewrite: "domain.com", position 0, hash table -
16:04:52.50:   Found: "$U%[email protected]"
16:04:52.50:   New mailbox: "ed".
16:04:52.50:   New host: "domain.com".
16:04:52.50:   New route: "hostA.domain.com".
16:04:52.50:   New channel system: "hostA.domain.com".
16:04:52.50: Looking up host "hostA.domain.com".
16:04:52.50:   - found on channel l
16:04:52.50: Routelocal flag set; scanning for % and !
  forward channel        = l
  channel description    =
  channel user filter    =
  dest channel filter    =
  source channel filter  =
  channel flags #0       = BIDIRECTIONAL MULTIPLE IMMNONURGENT NOSERVICEALL
  channel flags #1       = NOSMTP DEFAULT
  channel flags #2       = COPYSENDPOST COPYWARNPOST POSTHEADONLY HEADERINC NOEXPROUTE
  channel flags #3       = NOLOGGING NOGREY NORESTRICTED RETAINSECURITYMULTIPARTS
  channel flags #4       = EIGHTBIT NOHEADERTRIM NOHEADERREAD RULES
  channel flags #5       =
  channel flags #6       = LOCALUSER REPORTNOTARY
  channel flags #7       = NOSWITCHCHANNEL NOREMOTEHOST DATEFOUR DAYOFWEEK
  channel flags #8       = NODEFRAGMENT EXQUOTA REVERSE NOCONVERT_OCTET_STREAM
  channel flags #9       = NOTHURMAN INTERPRETENCODING USEINTERMEDIATE RECEIVEDFROM VALIDATELOCALSYSTEM NOTURN
  defaulthost            = domain.com domain.com
  linelength             = 1023
  channel env addr type  = SOURCEROUTE
  channel hdr addr type  = SOURCEROUTE
  channel official host  = hostA.domain.com
  channel queue 0 name   = LOCAL_POOL
  channel queue 1 name   = LOCAL_POOL
  channel queue 2 name   = LOCAL_POOL
  channel queue 3 name   = LOCAL_POOL
  channel after params    =
  channel user name      =
  urgentnotices          = 1 2 4 7
  normalnotices          = 1 2 4 7
  nonurgentnotices       = 1 2 4 7
  channel rightslist ids =
  local behavior flags   = %x7
  expandchannel          =
  notificationchannel    =
  dispositionchannel     =
  saslswitchchannel      =
  tlsswitchchannel       =
  backward channel       = l
  header To: address     = [email protected]
  header From: address   = [email protected]
  envelope To: address   = [email protected]  (route (hostA.domain.com,hostA.domain.com)) (host domain.com)
  envelope From: address = [email protected]
  name                   =
  mbox                   = ed
Extracted address action list:
    [email protected]
Extracted 733 address action list:
    [email protected]
Address list expansion:
*** Debug output from alias expansion:
16:04:52.50: Inner expand, level = 0, mailbox = [email protected]
16:04:52.50: Rewriting:  Mbox = "ed", host = "domain.com", domain = "$*", literal = "", tag = ""
16:04:52.50: Rewrite: "$*", position 0, hash table -
16:04:52.50:   Found: "$A$E$F$U%[email protected]"
16:04:52.50:   Match, pattern = "domain.com", current = "(*domaincheck*)"
16:04:52.50:     old state = not checked.
16:04:52.50:     Domain check on domain.com.
16:04:52.50:     new state = fail pending.
16:04:52.50:   Rewrite failed due to prechannel mismatch.
16:04:52.50: Rewrite: "$*", position 1, hash table -
16:04:52.50:   Failed.
16:04:52.50: Rewrite: "$*", position 0, rewrite database -
16:04:52.50:   Failed
16:04:52.50: Rewriting:  Mbox = "ed", host = "domain", domain = "domain.com", literal = "", tag = ""
16:04:52.50: Rewrite: "domain.com", position 0, hash table -
16:04:52.50:   Found: "$U%[email protected]"
16:04:52.50:   New mailbox: "ed".
16:04:52.50:   New host: "domain.com".
16:04:52.50:   New route: "hostA.domain.com".
16:04:52.50:   New channel system: "hostA.domain.com".
16:04:52.50: Looking up host "hostA.domain.com".
16:04:52.50:   - found on channel l
16:04:52.50: Routelocal flag set; scanning for % and !
16:04:52.50:   Reparsed mailbox: ed
16:04:52.50:   Reparsed host: domain.com
16:04:52.50:   Variant #1 = [email protected]
16:04:52.50:   Variant #2 = *@domain.com
16:04:52.50:   LDAP URL template identified
16:04:52.50:   Error 0 determining URL from template ldap:///$V?*?sub?$R
0 expansion total.
*** Debug output from submitting an envelope address:
16:04:52.50: mmc_wadr(0x0012b670,'[email protected]','[email protected]') called.
16:04:52.50: Copy estimate before address addition is 1
16:04:52.50:     Parsing address [email protected]
16:04:52.50: Rewriting:  Mbox = "ed", host = "domain.com", domain = "$*", literal = "", tag = ""
16:04:52.50: Rewrite: "$*", position 0, hash table -
16:04:52.50:   Found: "$A$E$F$U%[email protected]"
16:04:52.50:   Match, pattern = "domain.com", current = "(*domaincheck*)"
16:04:52.50:     old state = not checked.
16:04:52.50:     Domain check on domain.com.
16:04:52.50:     new state = fail pending.
16:04:52.50:   Rewrite failed due to prechannel mismatch.
16:04:52.50: Rewrite: "$*", position 1, hash table -hebe.domain.com
16:04:52.50:   Failed.
16:04:52.50: Rewrite: "$*", position 0, rewrite database -
16:04:52.50:   Failed
16:04:52.50: Rewriting:  Mbox = "ed", host = "domain", domain = "domain.com", literal = "", tag = ""
16:04:52.50: Rewrite: "domain.com", position 0, hash table -
16:04:52.50:   Found: "$U%[email protected]"
16:04:52.50:   New mailbox: "ed".
16:04:52.50:   New host: "domain.com".
16:04:52.50:   New route: "hostA.domain.com".
16:04:52.50:   New channel system: "hostA.domain.com".
16:04:52.50: Looking up host "hostA.domain.com".
16:04:52.50:   - found on channel l
16:04:52.50: Routelocal flag set; scanning for % and !
16:04:52.50:     Address [email protected] requires local processing.
16:04:52.50:   Variant #1 = [email protected]
16:04:52.50:   Variant #2 = *@domain.com
16:04:52.50:     Checking for [email protected] in the system alias file
16:04:52.50:       - not found
16:04:52.50:     Checking for *@domain.com in the system alias file
16:04:52.50:       - not found
16:04:52.50:     Checking [email protected] with URL template ldap:///$V?*?sub?$R
16:04:52.50:   LDAP URL template identified
16:04:52.50:   Error 0 determining URL from template ldap:///$V?*?sub?$R
16:04:52.50:       - adding address [email protected] to headers.
16:04:52.50: Copy estimate after address addition is 1
Expanded address:
  [email protected]
Submitted address list:
Address list error -- 5.1.1 unknown or illegal alias: [email protected]
Submitted notifications list:

Similar Messages

  • Issue with spamassassin, now mail not working

    Hi ! I installed spamtrainer almost two months ago. Been feeding the [email protected] for several weeks now , 700 emails each day at least .
    There was very little improvement if none at all. Tried to add "@local_domains_maps = (1)" to amavisd.conf last night thinking it might be the problem , though no virtual domain exist. This was one of the issue on the default Amavisd config. The other one is adding the symbolic link which I already done.
    Computer froze while adding the parameter "@local_domains_maps = (1)", so I manually turn off the Power Mac, then mail stopped altogether. The mails are filing up but the clients couldn't send or receive since this incidence .
    FF is the maincf. and amavis.conf
    All help are greatly appreciated.
    mail:/Users/sysadmin root# postconf -n
    alias_maps = hash:/etc/aliases,hash:/var/mailman/data/aliases
    always_bcc =
    command_directory = /usr/sbin
    config_directory = /etc/postfix
    content_filter = smtp-amavis:[127.0.0.1]:10024
    daemon_directory = /usr/libexec/postfix
    debug_peer_level = 2
    enable_server_options = yes
    html_directory = no
    inet_interfaces = all
    local_recipient_maps = proxy:unix:passwd.byname $alias_maps
    luser_relay =
    mail_owner = postfix
    mailbox_size_limit = 0
    mailbox_transport = cyrus
    mailq_path = /usr/bin/mailq
    manpage_directory = /usr/share/man
    maps_rbl_domains =
    message_size_limit = 31457280
    mydestination = $myhostname,localhost.$mydomain,localhost,mail.cpplaw.com,cpplaw.com
    mydomain = cpplaw.com
    mydomain_fallback = localhost
    myhostname = mail.cpplaw.com
    mynetworks = 127.0.0.1/32,192.168.1.0/24,127.0.0.1
    mynetworks_style = host
    newaliases_path = /usr/bin/newaliases
    owner_request_special = no
    queue_directory = /private/var/spool/postfix
    readme_directory = /usr/share/doc/postfix
    recipient_delimiter = +
    relayhost =
    sample_directory = /usr/share/doc/postfix/examples
    sendmail_path = /usr/sbin/sendmail
    setgid_group = postdrop
    smtpd_client_restrictions = permit_mynetworks permit
    smtpd_tls_key_file =
    unknown_local_recipient_reject_code = 550
    virtual_mailbox_domains =
    virtual_transport = virtual
    mail:/Users/sysadmin root# postconf -n
    alias_maps = hash:/etc/aliases,hash:/var/mailman/data/aliases
    always_bcc =
    command_directory = /usr/sbin
    config_directory = /etc/postfix
    content_filter = smtp-amavis:[127.0.0.1]:10024
    daemon_directory = /usr/libexec/postfix
    debug_peer_level = 2
    enable_server_options = yes
    html_directory = no
    inet_interfaces = all
    local_recipient_maps = proxy:unix:passwd.byname $alias_maps
    luser_relay =
    mail_owner = postfix
    mailbox_size_limit = 0
    mailbox_transport = cyrus
    mailq_path = /usr/bin/mailq
    manpage_directory = /usr/share/man
    maps_rbl_domains =
    message_size_limit = 31457280
    mydestination = $myhostname,localhost.$mydomain,localhost,mail.cpplaw.com,cpplaw.com
    mydomain = cpplaw.com
    mydomain_fallback = localhost
    myhostname = mail.cpplaw.com
    mynetworks = 127.0.0.1/32,192.168.1.0/24,127.0.0.1
    mynetworks_style = host
    newaliases_path = /usr/bin/newaliases
    owner_request_special = no
    queue_directory = /private/var/spool/postfix
    readme_directory = /usr/share/doc/postfix
    recipient_delimiter = +
    relayhost =
    sample_directory = /usr/share/doc/postfix/examples
    sendmail_path = /usr/sbin/sendmail
    setgid_group = postdrop
    smtpd_client_restrictions = permit_mynetworks permit
    smtpd_tls_key_file =
    unknown_local_recipient_reject_code = 550
    virtual_mailbox_domains =
    virtual_transport = virtual
    mail:/Users/sysadmin root#
    _______________________Amavisd.cof_________________________
    use strict;
    # Configuration file for amavisd-new
    # This software is licensed under the GNU General Public License (GPL).
    # See comments at the start of amavisd-new for the whole license text.
    #Sections:
    # Section I - Essential daemon and MTA settings
    # Section II - MTA specific
    # Section III - Logging
    # Section IV - Notifications/DSN, BOUNCE/REJECT/DROP/PASS destiny, quarantine
    # Section V - Per-recipient and per-sender handling, whitelisting, etc.
    # Section VI - Resource limits
    # Section VII - External programs, virus scanners, SpamAssassin
    # Section VIII - Debugging
    #GENERAL NOTES:
    # This file is a normal Perl code, interpreted by Perl itself.
    # - make sure this file (or directory where it resides) is NOT WRITABLE
    # by mere mortals, otherwise it represents a severe security risk!
    # - for values which are interpreted as booleans, it is recommended
    # to use 1 for true, and 0 or undef or '' for false.
    # THIS IS DIFFERENT FROM OLDER AMAVIS VERSIONS where "no" also meant false,
    # now it means true, like any nonempty string does!
    # - Perl syntax applies. Most notably: strings in "" may include variables
    # (which start with $ or @); to include characters @ and $ in double
    # quoted strings, precede them by a backslash; in single-quoted strings
    # the $ and @ lose their special meaning, so it is usually easier to use
    # single quoted strings. Still, in both cases a backslash need to be doubled
    # - variables with names starting with a '@' are lists, the values assigned
    # to them should be lists as well, e.g. ('one@foo', $mydomain, "three");
    # note the comma-separation and parenthesis. If strings in the list
    # do not contain spaces nor variables, a Perl operator qw() may be used
    # as a shorthand to split its argument on whitespace and produce a list
    # of strings, e.g. qw( one@foo example.com three ); Note that the argument
    # to qw is quoted implicitly and no variable interpretation is done within
    # (no '$' variable evaluations). The #-initiated comments can not be used
    # within the string. In other words, $ and # lose their special meaning
    # withing a qw argument, just like within '...' strings.
    # - all e-mail addresses in this file and as used internally by the daemon
    # are in their raw (rfc2821-unquoted and nonbracketed) form, i.e.
    # Bob "Funny" [email protected], not: "Bob \"Funny\" Dude"@example.com
    # and not <"@example.com>; also: '' and not ''.
    # Section I - Essential daemon and MTA settings
    # $MYHOME serves as a quick default for some other configuration settings.
    # More refined control is available with each individual setting further down.
    # $MYHOME is not used directly by the program. No trailing slash!
    #$MYHOME = '/var/lib/amavis'; # (default is '/var/amavis')
    # : $mydomain serves as a quick default for some other configuration settings.
    # : More refined control is available with each individual setting further down.
    # : $mydomain is never used directly by the program.
    $mydomain = 'cpplaw.com'; aol.com'; # (no useful default)
    # Set the user and group to which the daemon will change if started as root
    # (otherwise just keep the UID unchanged, and these settings have no effect):
    $daemon_user = 'clamav'; # (no default; customary: vscan or amavis)
    $daemon_group = 'clamav'; # (no default; customary: vscan or amavis)
    # Runtime working directory (cwd), and a place where
    # temporary directories for unpacking mail are created.
    # (no trailing slash, may be a scratch file system)
    $TEMPBASE = $MYHOME; # (must be set if other config vars use is)
    #$TEMPBASE = "$MYHOME/tmp"; # prefer to keep home dir /var/amavis clean?
    # $helpers_home sets environment variable HOME, and is passed as option
    # 'home_dir_for_helpers' to Mail::SpamAssassin::new. It should be a directory
    # on a normal persistent file system, not a scratch or temporary file system
    #$helpers_home = $MYHOME; # (defaults to $MYHOME)
    #$daemon_chroot_dir = $MYHOME; # (default is undef, meaning: do not chroot)
    #$pid_file = "$MYHOME/amavisd.pid"; # (default is "$MYHOME/amavisd.pid")
    #$lock_file = "$MYHOME/amavisd.lock"; # (default is "$MYHOME/amavisd.lock")
    # set environment variables if you want (no defaults):
    $ENV{TMPDIR} = $TEMPBASE; # wise, but usually not necessary
    # MTA SETTINGS, UNCOMMENT AS APPROPRIATE,
    # both $forward_method and $notify_method default to 'smtp:127.0.0.1:10025'
    # POSTFIX, or SENDMAIL in dual-MTA setup, or EXIM V4
    # (set host and port number as required; host can be specified
    # as IP address or DNS name (A or CNAME, but MX is ignored)
    #$forward_method = 'smtp:127.0.0.1:10025'; # where to forward checked mail
    #$notify_method = $forward_method; # where to submit notifications
    # NOTE: The defaults (above) are good for Postfix or dual-sendmail. You MUST
    # uncomment the approprate settings below if using other setups!
    # SENDMAIL MILTER, using amavis-milter.c helper program:
    #$forward_method = undef; # no explicit forwarding, sendmail does it by itself
    # milter; option -odd is needed to avoid deadlocks
    #$notify_method = 'pipe:flags=q argv=/usr/sbin/sendmail -Ac -i -odd -f ${sender} -- ${recipient}';
    # just a thought: can we use use -Am instead of -odd ?
    # SENDMAIL (old non-milter setup, as relay):
    #$forward_method = 'pipe:flags=q argv=/usr/sbin/sendmail -C/etc/sendmail.orig.cf -i -f ${sender} -- ${recipient}';
    #$notify_method = $forward_method;
    # SENDMAIL (old non-milter setup, amavis.c calls local delivery agent):
    #$forward_method = undef; # no explicit forwarding, amavis.c will call LDA
    #$notify_method = 'pipe:flags=q argv=/usr/sbin/sendmail -Ac -i -f ${sender} -- ${recipient}';
    # EXIM v3 (not recommended with v4 or later, which can use SMTP setup instead):
    #$forward_method = 'pipe:flags=q argv=/usr/sbin/exim -oMr scanned-ok -i -f ${sender} -- ${recipient}';
    #$notify_method = $forward_method;
    # prefer to collect mail for forwarding as BSMTP files?
    #$forward_method = "bsmtp:$MYHOME/out-%i-%n.bsmtp";
    #$notify_method = $forward_method;
    # Net::Server pre-forking settings
    # You may want $max_servers to match the width of your MTA pipe
    # feeding amavisd, e.g. with Postfix the 'Max procs' field in the
    # master.cf file, like the '2' in the: smtp-amavis unix - - n - 2 smtp
    $max_servers = 2; # number of pre-forked children (default 2)
    $max_requests = 10; # retire a child after that many accepts (default 10)
    $child_timeout=5*60; # abort child if it does not complete each task in n sec
    # (default: 8*60 seconds)
    # Check also the settings of @av_scanners at the end if you want to use
    # virus scanners. If not, you may want to delete the whole long assignment
    # to the variable @av_scanners, which will also remove the virus checking
    # code (e.g. if you only want to do spam scanning).
    # Here is a QUICK WAY to completely DISABLE some sections of code
    # that WE DO NOT WANT (it won't even be compiled-in).
    # For more refined controls leave the following two lines commented out,
    # and see further down what these two lookup lists really mean.
    #@bypass_virus_checks_acl = qw( . ); # uncomment to DISABLE anti-virus code
    #@bypass_spam_checks_acl = qw( . ); # uncomment to DISABLE anti-spam code
    # Any setting can be changed with a new assignment, so make sure
    # you do not unintentionally override these settings further down!
    # Lookup list of local domains (see README.lookups for syntax details)
    # NOTE:
    # For backwards compatibility the variable names @local_domains (old) and
    # @local_domains_acl (new) are synonyms. For consistency with other lookups
    # the name @local_domains_acl is now preferred. It also makes it more
    # obviously distinct from the new %local_domains hash lookup table.
    # local_domains* lookup tables are used in deciding whether a recipient
    # is local or not, or in other words, if the message is outgoing or not.
    # This affects inserting spam-related headers for local recipients,
    # limiting recipient virus notifications (if enabled) to local recipients,
    # in deciding if address extension may be appended, and in SQL lookups
    # for non-fqdn addresses. Set it up correctly if you need features
    # that rely on this setting (or just leave empty otherwise).
    # With Postfix (2.0) a quick reminder on what local domains normally are:
    # a union of domains spacified in: $mydestination, $virtual_alias_domains,
    # $virtual_mailbox_domains, and $relay_domains.
    @local_domains_acl = ( ".$mydomain" ); # $mydomain and its subdomains
    # @local_domains_acl = qw(); # default is empty, no recipient treated as local
    # @local_domains_acl = qw( .example.com );
    # @local_domains_acl = qw( .example.com !host.sub.example.net .sub.example.net );
    # @local_domains_acl = ( ".$mydomain", '.example.com', 'sub.example.net' );
    # or alternatively(A), using a Perl hash lookup table, which may be assigned
    # directly, or read from a file, one domain per line; comments and empty lines
    # are ignored, a dot before a domain name implies its subdomains:
    #read_hash(\%local_domains, '/var/amavis/local_domains');
    #or alternatively(B), using a list of regular expressions:
    # $local_domains_re = new_RE( qr'[@.]example\.com$'i );
    # see README.lookups for syntax and semantics
    # Section II - MTA specific (defaults should be ok)
    # if $relayhost_is_client is true, IP address in $notify_method and
    # $forward_method is dynamically overridden with SMTP client peer address
    # if available, which makes possible for several hosts to share one daemon
    #$relayhost_is_client = 1; # (defaults to false)
    #$insert_received_line = 1; # behave like MTA: insert 'Received:' header
    # (does not apply to sendmail/milter)
    # (default is true)
    # AMAVIS-CLIENT PROTOCOL INPUT SETTINGS (e.g. with sendmail milter)
    # (used with amavis helper clients like amavis-milter.c and amavis.c,
    # NOT needed for Postfix and Exim)
    $unix_socketname = "$MYHOME/amavisd.sock"; # amavis helper protocol socket
    #$unix_socketname = undef; # disable listening on a unix socket
    # (default is undef, i.e. disabled)
    # (usual setting is $MYHOME/amavisd.sock)
    # Do we receive quoted or raw addresses from the helper program?
    # (does not apply to SMTP; defaults to true)
    #$gets_addr_in_quoted_form = 1; # "Bob \"Funny\" Dude"@example.com
    #$gets_addr_in_quoted_form = 0; # Bob "Funny" [email protected]
    # SMTP SERVER (INPUT) PROTOCOL SETTINGS (e.g. with Postfix, Exim v4, ...)
    # (used when MTA is configured to pass mail to amavisd via SMTP or LMTP)
    $inet_socket_port = 10024; # accept SMTP on this local TCP port
    # (default is undef, i.e. disabled)
    # multiple ports may be provided: $inet_socket_port = [10024, 10026, 10028];
    # SMTP SERVER (INPUT) access control
    # - do not allow free access to the amavisd SMTP port !!!
    # when MTA is at the same host, use the following (one or the other or both):
    #$inet_socket_bind = '127.0.0.1'; # limit socket bind to loopback interface
    # (default is '127.0.0.1')
    @inet_acl = qw( 127.0.0.1 ); # allow SMTP access only from localhost IP
    # (default is qw( 127.0.0.1 ) )
    # when MTA (one or more) is on a different host, use the following:
    #@inet_acl = qw(127/8 10.1.0.1 10.1.0.2); # adjust the list as appropriate
    #$inet_socket_bind = undef; # bind to all IP interfaces
    # Example1:
    # @inet_acl = qw( 127/8 10/8 172.16/12 192.168/16 );
    # permit only SMTP access from loopback and rfc1918 private address space
    # Example2:
    # @inet_acl = qw( !192.168.1.12 172.16.3.3 !172.16.3/255.255.255.0
    # 127.0.0.1 10/8 172.16/12 192.168/16 );
    # matches loopback and rfc1918 private address space except host 192.168.1.12
    # and net 172.16.3/24 (but host 172.16.3.3 within 172.16.3/24 still matches)
    # Example3:
    # @inet_acl = qw( 127/8
    # !172.16.3.0 !172.16.3.127 172.16.3.0/25
    # !172.16.3.128 !172.16.3.255 172.16.3.128/25 );
    # matches loopback and both halves of the 172.16.3/24 C-class,
    # split into two subnets, except all four broadcast addresses
    # for these subnets
    # See README.lookups for details on specifying access control lists.
    # Section III - Logging
    # true (e.g. 1) => syslog; false (e.g. 0) => logging to file
    $DO_SYSLOG = 0; # (defaults to false)
    #$SYSLOG_LEVEL = 'user.info'; # (defaults to 'mail.info')
    # Log file (if not using syslog)
    $LOGFILE = "/var/log/amavis.log"; # (defaults to empty, no log)
    #NOTE: levels are not strictly observed and are somewhat arbitrary
    # 0: startup/exit/failure messages, viruses detected
    # 1: args passed from client, some more interesting messages
    # 2: virus scanner output, timing
    # 3: server, client
    # 4: decompose parts
    # 5: more debug details
    $log_level = 4; # (defaults to 0)
    # Customizeable template for the most interesting log file entry (e.g. with
    # $log_level=0) (take care to properly quote Perl special characters like '\')
    # For a list of available macros see README.customize .
    # only log infected messages (useful with log level 0):
    # $log_templ = '[? %#V |[? %#F ||banned filename ([%F|,])]|infected ([%V|,])]#
    # [? %#V |[? %#F ||, from=<%o>, to=[<%R>|,][? %i ||, quarantine %i]]#
    # |, from=<%o>, to=[<%R>|,][? %i ||, quarantine %i]]';
    # log both infected and noninfected messages (default):
    $log_templ = '[? %#V |[? %#F |[?%#D|Not-Delivered|Passed]|BANNED name/type (%F)]|INFECTED (%V)], #
    <%o> -> [<%R>|,][? %i ||, quarantine %i], Message-ID: %m, Hits: %c';
    # Section IV - Notifications/DSN, BOUNCE/REJECT/DROP/PASS destiny, quarantine
    # Select notifications text encoding when Unicode-aware Perl is converting
    # text from internal character representation to external encoding (charset
    # in MIME terminology)
    # to be used in RFC 2047-encoded header field bodies, e.g. in Subject:
    #$hdr_encoding = 'iso-8859-1'; # (default: 'iso-8859-1')
    # to be used in notification body text: its encoding and Content-type.charset
    #$bdy_encoding = 'iso-8859-1'; # (default: 'iso-8859-1')
    # Default template texts for notifications may be overruled by directly
    # assigning new text to template variables, or by reading template text
    # from files. A second argument may be specified in a call to read_text(),
    # specifying character encoding layer to be used when reading from the
    # external file, e.g. 'utf8', 'iso-8859-1', or often just $bdy_encoding.
    # Text will be converted to internal character representation by Perl 5.8.0
    # or later; second argument is ignored otherwise. See PerlIO::encoding,
    # Encode::PerlIO and perluniintro man pages.
    # $notify_sender_templ = read_text('/var/amavis/notify_sender.txt');
    # $notify_virus_sender_templ= read_text('/var/amavis/notify_virus_sender.txt');
    # $notify_virus_admin_templ = read_text('/var/amavis/notify_virus_admin.txt');
    # $notify_virus_recips_templ= read_text('/var/amavis/notify_virus_recips.txt');
    # $notify_spam_sender_templ = read_text('/var/amavis/notify_spam_sender.txt');
    # $notify_spam_admin_templ = read_text('/var/amavis/notify_spam_admin.txt');
    # If notification template files are collectively available in some directory,
    # use read_l10n_templates which calls read_text for each known template.
    # read_l10n_templates('/etc/amavis/en_US');
    # Here is an overall picture (sequence of events) of how pieces fit together
    # (only virus controls are shown, spam controls work the same way):
    # bypass_virus_checks set for all recipients? ==> PASS
    # no viruses? ==> PASS
    # log virus if $log_templ is nonempty
    # quarantine if $virus_quarantine_to is nonempty
    # notify admin if $virus_admin (lookup) nonempty
    # notify recips if $warnvirusrecip and (recipient is local or $warn_offsite)
    # add address extensions for local recipients (when enabled)
    # send (non-)delivery notifications
    # to sender if DSN needed (BOUNCE) or ($warnvirussender and D_PASS)
    # virus_lovers or final_destiny==D_PASS ==> PASS
    # DISCARD (2xx) or REJECT (5xx) (depending on final_*_destiny)
    # Equivalent flow diagram applies for spam checks.
    # If a virus is detected, spam checking is skipped entirely.
    # The following symbolic constants can be used in *destiny settings:
    # D_PASS mail will pass to recipients, regardless of bad contents;
    # D_DISCARD mail will not be delivered to its recipients, sender will NOT be
    # notified. Effectively we lose mail (but will be quarantined
    # unless disabled). Not a decent thing to do for a mailer.
    # D_BOUNCE mail will not be delivered to its recipients, a non-delivery
    # notification (bounce) will be sent to the sender by amavisd-new;
    # Exception: bounce (DSN) will not be sent if a virus name matches
    # $viruses_that_fake_sender_re, or to messages from mailing lists
    # (Precedence: bulk|list|junk);
    # D_REJECT mail will not be delivered to its recipients, sender should
    # preferably get a reject, e.g. SMTP permanent reject response
    # (e.g. with milter), or non-delivery notification from MTA
    # (e.g. Postfix). If this is not possible (e.g. different recipients
    # have different tolerances to bad mail contents and not using LMTP)
    # amavisd-new sends a bounce by itself (same as D_BOUNCE).
    # Notes:
    # D_REJECT and D_BOUNCE are similar, the difference is in who is responsible
    # for informing the sender about non-delivery, and how informative
    # the notification can be (amavisd-new knows more than MTA);
    # With D_REJECT, MTA may reject original SMTP, or send DSN (delivery status
    # notification, colloquially called 'bounce') - depending on MTA;
    # Best suited for sendmail milter, especially for spam.
    # With D_BOUNCE, amavisd-new (not MTA) sends DSN (can better explain the
    # reason for mail non-delivery, but unable to reject the original
    # SMTP session). Best suited to reporting viruses, and for Postfix
    # and other dual-MTA setups, which can't reject original client SMTP
    # session, as the mail has already been enqueued.
    $final_virus_destiny = D_BOUNCE; # (defaults to D_BOUNCE)
    $final_banned_destiny = D_BOUNCE; # (defaults to D_BOUNCE)
    $final_spam_destiny = D_PASS; # (defaults to D_REJECT)
    $final_bad_header_destiny = D_PASS; # (defaults to D_PASS), D_BOUNCE suggested
    # Alternatives to consider for spam:
    # - use D_PASS if clients will do filtering based on inserted mail headers;
    # - use D_DISCARD, if kill_level is set safely high;
    # - use D_BOUNCE instead of D_REJECT if not using milter;
    # There are no sensible alternatives to D_BOUNCE for viruses, but consider:
    # - use D_PASS (or virus_lovers) and $warnvirussender=1 to deliver viruses;
    # - use D_REJECT instead of D_BOUNCE if using milter and under heavy
    # virus storm;
    # Don't bother to set both D_DISCARD and $warn*sender=1, it will get mapped
    # to D_BOUNCE.
    # The separation of *_destiny values into D_BOUNCE, D_REJECT, D_DISCARD
    # and D_PASS made settings $warnvirussender and $warnspamsender only still
    # useful with D_PASS.
    # The following $warn*sender settings are ONLY used when mail is
    # actually passed to recipients ($final_*_destiny=D_PASS, or *_lovers*).
    # Bounces or rejects produce non-delivery status notification anyway.
    # Notify virus sender?
    #$warnvirussender = 1; # (defaults to false (undef))
    # Notify spam sender?
    #$warnspamsender = 1; # (defaults to false (undef))
    # Notify sender of banned files?
    #$warnbannedsender = 1; # (defaults to false (undef))
    # Notify sender of syntactically invalid header containing non-ASCII characters?
    #$warnbadhsender = 1; # (defaults to false (undef))
    # Notify virus (or banned files) RECIPIENT?
    # (not very useful, but some policies demand it)
    #$warnvirusrecip = 1; # (defaults to false (undef))
    #$warnbannedrecip = 1; # (defaults to false (undef))
    # Notify also non-local virus/banned recipients if $warn*recip is true?
    # (including those not matching local_domains*)
    #$warn_offsite = 1; # (defaults to false (undef), i.e. only notify locals)
    # Treat envelope sender address as unreliable and don't send sender
    # notification / bounces if name(s) of detected virus(es) match the list.
    # Note that virus names are supplied by external virus scanner(s) and are
    # not standardized, so virus names may need to be adjusted.
    # See README.lookups for syntax.
    $viruses_that_fake_sender_re = new_RE(
    qr'nimda|hybris|klez|bugbear|yaha|braid|sobig|fizzer|palyh|peido|holar'i );
    # where to send ADMIN VIRUS NOTIFICATIONS (should be a fully qualified address)
    # - the administrator address may be a simple fixed e-mail address (a scalar),
    # or may depend on the SENDER address (e.g. its domain), in which case
    # a ref to a hash table can be specified (specify lower-cased keys,
    # dot is a catchall, see README.lookups).
    # Empty or undef lookup disables virus admin notifications.
    $virus_admin = '[email protected]';
    # $virus_admin = undef; # do not send virus admin notifications (default)
    # $virus_admin = {'not.example.com' => '', '.' => '[email protected]'};
    # $virus_admin = '[email protected]';
    # equivalent to $virus_admin, but for spam admin notifications:
    #$spam_admin = '[email protected]';# $spam_admin = undef; # do not send spam admin notifications (default)
    # $spam_admin = {'not.example.com' => '', '.' => '[email protected]'};
    #advanced example, using a hash lookup table:
    # - $virus_admin = {
    # '[email protected]' => '[email protected]',
    # '.sub1.example.com' => '[email protected]',
    # '.sub2.example.com' => '', # don't send admin notifications
    # 'a.sub3.example.com' => '[email protected]',
    # '.sub3.example.com' => '[email protected]',
    # '.example.com' => '[email protected]', # catchall for our virus senders
    # '.' => '[email protected]', # catchall for the rest
    # whom notification reports are sent from (ENVELOPE SENDER);
    # may be a null reverse path, or a fully qualified address:
    # (admin and recip sender addresses default to $mailfrom
    # for compatibility, which in turn defaults to undef (empty) )
    # If using strings in double quotes, don't forget to quote @, i.e. \@
    $mailfrom_notify_admin = "virusalert\@$mydomain";
    $mailfrom_notify_recip = "virusalert\@$mydomain";
    $mailfrom_notify_spamadmin = "spam.police\@$mydomain";
    # 'From' HEADER FIELD for sender and admin notifications.
    # This should be a replyable address, see rfc1894. Not to be confused
    # with $mailfrom_notify_sender, which is the envelope address and
    # should be empty (null reverse path) according to rfc2821.
    # $hdrfrom_notify_sender = "amavisd-new <postmaster\@$mydomain>";
    # $hdrfrom_notify_sender = 'amavisd-new <[email protected]>';
    # (defaults to: "amavisd-new <postmaster\@$myhostname>")
    # $hdrfrom_notify_admin = $mailfrom_notify_admin;
    # (defaults to: $mailfrom_notify_admin)
    # $hdrfrom_notify_spamadmin = $mailfrom_notify_spamadmin;
    # (defaults to: $mailfrom_notify_spamadmin)
    # whom quarantined messages appear to be sent from (envelope sender)
    $mailfrom_to_quarantine = undef; # original sender if undef, or set explicitly
    # (default is undef)
    # Location to put infected mail into: (applies to 'local:' quarantine method)
    # empty for not quarantining, may be a file (mailbox),
    # or a directory (no trailing slash)
    # (the default value is undef, meaning no quarantine)
    $QUARANTINEDIR = '/var/virusmails';
    #$virus_quarantine_method = "local:virus-%i-%n"; # default
    #$spam_quarantine_method = "local:spam-%b-%i-%n"; # default
    #use the new 'bsmtp:' method as an alternative to the default 'local:'
    #$virus_quarantine_method = "bsmtp:$QUARANTINEDIR/virus-%i-%n.bsmtp";
    #$spam_quarantine_method = "bsmtp:$QUARANTINEDIR/spam-%b-%i-%n.bsmtp";
    # When using the 'local:' quarantine method (default), the following applies:
    # A finer control of quarantining is available through variable
    # $virus_quarantine_to/$spam_quarantine_to. It may be a simple scalar string,
    # or a ref to a hash lookup table, or a regexp lookup table object,
    # which makes possible to set up per-recipient quarantine addresses.
    # The value of scalar $virus_quarantine_to/$spam_quarantine_to (or a
    # per-recipient lookup result from the hash table %$virus_quarantine_to)
    # is/are interpreted as follows:
    # VARIANT 1:
    # empty or undef disables quarantine;
    # VARIANT 2:
    # a string NOT containg an '@';
    # amavisd will behave as a local delivery agent (LDA) and will quarantine
    # viruses to local files according to hash %local_delivery_aliases (pseudo
    # aliases map) - see subroutine mail_to_local_mailbox() for details.
    # Some of the predefined aliases are 'virus-quarantine' and 'spam-quarantine'.
    # Setting $virus_quarantine_to ($spam_quarantine_to) to this string will:
    # * if $QUARANTINEDIR is a directory, each quarantined virus will go
    # to a separate file in the $QUARANTINEDIR directory (traditional
    # amavis style, similar to maildir mailbox format);
    # * otherwise $QUARANTINEDIR is treated as a file name of a Unix-style
    # mailbox. All quarantined messages will be appended to this file.
    # Amavisd child process must obtain an exclusive lock on the file during
    # delivery, so this may be less efficient than using individual files
    # or forwarding to MTA, and it may not work across NFS or other non-local
    # file systems (but may be handy for pickup of quarantined files via IMAP
    # for example);
    # VARIANT 3:
    # any email address (must contain '@').
    # The e-mail messages to be quarantined will be handed to MTA
    # for delivery to the specified address. If a recipient address local to MTA
    # is desired, you may leave the domain part empty, e.g. 'infected@', but the
    # '@' character must nevertheless be included to distinguish it from variant 2.
    # This method enables more refined delivery control made available by MTA
    # (e.g. its aliases file, other local delivery agents, dealing with
    # privileges and file locking when delivering to user's mailbox, nonlocal
    # delivery and forwarding, fan-out lists). Make sure the mail-to-be-quarantined
    # will not be handed back to amavisd for checking, as this will cause a loop
    # (hopefully broken at some stage)! If this can be assured, notifications
    # will benefit too from not being unecessarily virus-scanned.
    # By default this is safe to do with Postfix and Exim v4 and dual-sendmail
    # setup, but probably not safe with sendmail milter interface without
    # precaution.
    # (the default value is undef, meaning no quarantine)
    #$virus_quarantine_to = '[email protected]'; # traditional local quarantine
    #$virus_quarantine_to = 'infected@'; # forward to MTA for delivery
    #$virus_quarantine_to = "virus-quarantine\@$mydomain"; # similar
    #$virus_quarantine_to = '[email protected]'; # similar
    #$virus_quarantine_to = undef; # no quarantine
    #$virus_quarantine_to = new_RE( # per-recip multiple quarantines
    # [qr'^user@example\.com$'i => 'infected@'],
    # [qr'^(.*)@example\.com$'i => 'virus-${1}@example.com'],
    # [qr'^(.*)(@[^@])?$'i => 'virus-${1}${2}'],
    # [qr/.*/ => 'virus-quarantine'] );
    # similar for spam
    # (the default value is undef, meaning no quarantine)
    #$spam_quarantine_to = '[email protected]';
    #$spam_quarantine_to = "spam-quarantine\@$mydomain";
    #$spam_quarantine_to = new_RE( # per-recip multiple quarantines
    # [qr'^(.*)@example\.com$'i => 'spam-${1}@example.com'],
    # [qr/.*/ => 'spam-quarantine'] );
    # In addition to per-recip quarantine, a by-sender lookup is possible. It is
    # similar to $spam_quarantine_to, but the lookup key is the sender address:
    #$spam_quarantine_bysender_to = undef; # dflt: no by-sender spam quarantine
    # Add X-Virus-Scanned header field to mail?
    $X_HEADER_TAG = 'X-Virus-Scanned'; # (default: undef)
    # Leave empty to add no header field # (default: undef)
    $X_HEADER_LINE = "by amavisd-new at $mydomain";
    $remove_existing_x_scanned_headers = 0; # leave existing X-Virus-Scanned alone
    #$remove_existing_x_scanned_headers= 1; # remove existing headers
    # (defaults to false)
    $remove_existing_spam_headers = 0; # leave existing X-Spam* headers alone
    #$remove_existing_spam_headers = 1; # remove existing spam headers if
    # spam scanning is enabled (default)
    # set $bypass_decode_parts to true if you only do spam scanning, or if you
    # have a good virus scanner that can deal with compression and recursively
    # unpacking archives by itself, and save amavisd the trouble.
    # Disabling decoding also causes banned_files checking to only see
    # MIME names and MIME content types, not the content classification types
    # as provided by the file(1) utility.
    # It is a double-edged sword, make sure you know what you are doing!
    #$bypass_decode_parts = 1; # (defaults to false)
    # don't trust this file type or corresponding unpacker for this file type,
    # keep both the original and the unpacked file
    # (lookup key is what file(1) utility returned):
    $keep_decoded_original_re = new_RE(
    qr'^(ASCII|text|uuencoded|xxencoded|binhex)'i,
    # Checking for banned MIME types and names. If any mail part matches,
    # the whole mail is rejected, much like the way viruses are handled.
    # A list in object $banned_filename_re can be defined to provide a list
    # of Perl regular expressions to be matched against each part's:
    # * Content-Type value (both declared and effective mime-type),
    # including the possible security risk content types
    # message/partial and message/external-body, as specified by rfc2046;
    # * declared (recommended) file names as specified by MIME subfields
    # Content-Disposition.filename and Content-Type.name, both in their
    # raw (encoded) form and in rfc2047-decoded form if applicable;
    # * file content type as guessed by 'file(1)' utility, both the raw result
    # from file(1), as well as short type name, classified into names such as
    # .asc, .txt, .html, .doc, .jpg, .pdf, .zip, .exe, ..., which is always
    # beginning with a dot - see subroutine determine_file_types().
    # This step is done only if $bypass_decode_parts is not true.
    # * leave $banned_filename_re undefined to disable these checks
    # (giving an empty list to new_RE() will also always return false)
    $banned_filename_re = new_RE(
    qr'\.[a-zA-Z][a-zA-Z0-9]{0,3}\.(vbs|pif|scr|bat|com|exe|dll)$'i, # double extension
    # qr'.\.(exe|vbs|pif|scr|bat|com)$'i, # banned extension - basic
    # qr'.\.(ade|adp|bas|bat|chm|cmd|com|cpl|crt|exe|hlp|hta|inf|ins|isp|js|
    # jse|lnk|mdb|mde|msc|msi|msp|mst|pcd|pif|reg|scr|sct|shs|shb|vb|
    # vbe|vbs|wsc|wsf|wsh)$'ix, # banned extension - long
    # qr'^\.(exe|zip|lha|tnef)$'i, # banned file(1) types
    # qr'^application/x-msdownload$'i, # banned MIME types
    # qr'^message/partial$'i, qr'^message/external-body$'i, # rfc2046
    # See http://support.microsoft.com/default.aspx?scid=kb;EN-US;q262631
    # and http://www.cknow.com/vtutor/vtextensions.htm
    # A little trick: a pattern qr'\.exe$' matches both a short type name '.exe',
    # as well as any file name which happens to end with .exe. If only matching
    # a file name is desired, but not the short name, a pattern qr'.\.exe$'i
    # or similar may be used, which requires that at least one character preceeds
    # the '.exe', and so it will never match short file types, which always start
    # with a dot.
    # Section V - Per-recipient and per-sender handling, whitelisting, etc.
    # %virus_lovers, @virus_lovers_acl and $virus_lovers_re lookup tables:
    # (these should be considered policy options, they do not disable checks,
    # see bypas*checks for that!)
    # Exclude certain RECIPIENTS from virus filtering by adding their lower-cased
    # envelope e-mail address (or domain only) to the hash %virus_lovers, or to
    # the access list @virus_lovers_acl - see README.lookups and examples.
    # Make sure the appropriate form (e.g. external/internal) of address
    # is used in case of virtual domains, or when mapping external to internal
    # addresses, etc. - this is MTA-specific.
    # Notifications would still be generated however (see the overall
    # picture above), and infected mail (if passed) gets additional header:
    # X-AMaViS-Alert: INFECTED, message contains virus: ...
    # (header not inserted with milter interface!)
    # NOTE (milter interface only): in case of multiple recipients,
    # it is only possible to drop or accept the message in its entirety - for all
    # recipients. If all of them are virus lovers, we'll accept mail, but if
    # at least one recipient is not a virus lover, we'll discard the message.
    # %bypass_virus_checks, @bypass_virus_checks_acl and $bypass_virus_checks_re
    # lookup tables:
    # (this is mainly a time-saving option, unlike virus_lovers* !)
    # Similar in concept to %virus_lovers, a hash %bypass_virus_checks,
    # access list @bypass_virus_checks_acl and regexp list $bypass_virus_checks_re
    # are used to skip entirely the decoding, unpacking and virus checking,
    # but only if ALL recipients match the lookup.
    # %bypass_virus_checks/@bypass_virus_checks_acl/$bypass_virus_checks_re
    # do NOT GUARANTEE the message will NOT be checked for viruses - this may
    # still happen when there is more than one recipient for a message, and
    # not all of them match these lookup tables. To guarantee virus delivery,
    # a recipient must also match %virus_lovers/@virus_lovers_acl lookups
    # (but see milter limitations above),
    # NOTE: it would not be clever to base virus checks on SENDER address,
    # since there are no guarantees that it is genuine. Many viruses
    # and spam messages fake sender address. To achieve selective filtering
    # based on the source of the mail (e.g. IP address, MTA port number, ...),
    # use mechanisms provided by MTA if available.
    # Similar to lookup tables controlling virus checking, there exist
    # spam scanning, banned names/types, and headers_checks control counterparts:
    # %spam_lovers, @spam_lovers_acl, $spam_lovers_re
    # %banned_files_lovers, @banned_files_lovers_acl, $banned_files_lovers_re
    # %bad_header_lovers, @bad_header_lovers_acl, $bad_header_lovers_re
    # and:
    # %bypass_spam_checks/@bypass_spam_checks_acl/$bypass_spam_checks_re
    # %bypass_banned_checks/@bypass_banned_checks_acl/$bypass_banned_checks_re
    # %bypass_header_checks/@bypass_header_checks_acl/$bypass_header_checks_re
    # See README.lookups for details about the syntax.
    # The following example disables spam checking altogether,
    # since it matches any recipient e-mail address (any address
    # is a subdomain of the top-level root DNS domain):
    # @bypass_spam_checks_acl = qw( . );
    # @bypass_header_checks_acl = qw( [email protected] );
    # @bad_header_lovers_acl = qw( [email protected] );
    # See README.lookups for further detail, and examples below.
    # $virus_lovers{lc("postmaster\@$mydomain")} = 1;
    # $virus_lovers{lc('[email protected]')} = 1;
    # $virus_lovers{lc('[email protected]')} = 1;
    # $virus_lovers{lc('some.user@')} = 1; # this recipient, regardless of domain
    # $virus_lovers{lc('[email protected]')} = 0; # never, even if domain matches
    # $virus_lovers{lc('example.com')} = 1; # this domain, but not its subdomains
    # $virus_lovers{lc('.example.com')}= 1; # this domain, including its subdomains
    #or:
    # @virus_lovers_acl = qw( [email protected] !lab.xxx.com .xxx.com yyy.org );
    # $bypass_virus_checks{lc('[email protected]')} = 1;
    # @bypass_virus_checks_acl = qw( some.ddd !butnot.example.com .example.com );
    # @virus_lovers_acl = qw( [email protected] );
    # $virus_lovers_re = new_RE( qr'(helpdesk|postmaster)@example\.com$'i );
    # $spam_lovers{lc("postmaster\@$mydomain")} = 1;
    # $spam_lovers{lc('[email protected]')} = 1;
    # $spam_lovers{lc('[email protected]')} = 1;
    # @spam_lovers_acl = qw( !.example.com );
    # $spam_lovers_re = new_RE( qr'^user@example\.com$'i );
    # don't run spam check for these RECIPIENT domains:
    # @bypass_spam_checks_acl = qw( d1.com .d2.com a.d3.com );
    # or the other way around (bypass check for all BUT these):
    # @bypass_spam_checks_acl = qw( !d1.com !.d2.com !a.d3.com . );
    # a practical application: don't check outgoing mail for spam:
    # @bypass_spam_checks_acl = ( "!.$mydomain", "." );
    # (a downside of which is that such mail will not count as ham in SA bayes db)
    # Where to find SQL server(s) and database to support SQL lookups?
    # A list of triples: (dsn,user,passw). (dsn = data source name)
    # Specify more than one for multiple (backup) SQL servers.
    # See 'man DBI', 'man DBD::mysql', 'DBD::Pg', ... for details.
    # @lookup_sql_dsn =
    # ( ['DBI:mysql:mail:host1', 'some-username1', 'some-password1'],
    # ['DBI:mysql:mail:host2', 'some-username2', 'some-password2'] );
    # ('mail' in the example is the database name, choose what you like)
    # With PostgreSQL the dsn (first element of the triple) may look like:
    # 'DBI:Pg:host=host1;dbname=mail'
    # The SQL select clause to fetch per-recipient policy settings.
    # The %k will be replaced by a comma-separated list of query addresses
    # (e.g. full address, domain only, catchall). Use ORDER, if there
    # is a chance that multiple records will match - the first match wins.
    # If field names are not unique (e.g. 'id'), the later field overwrites the
    # earlier in a hash returned by lookup, which is why we use '*,users.id'.
    # No need to uncomment the following assignment if the default is ok.
    # $sql_select_policy = 'SELECT *,users.id FROM users,policy'.
    # ' WHERE (users.policy_id=policy.id) AND (users.email IN (%k))'.
    # ' ORDER BY users.priority DESC';
    # The SQL select clause to check sender in per-recipient whitelist/blacklist
    # The first SELECT argument '?' will be users.id from recipient SQL lookup,
    # the %k will be sender addresses (e.g. full address, domain only, catchall).
    # The default value is:
    # $sql_select_white_black_list = 'SELECT wb FROM wblist,mailaddr'.
    # ' WHERE (rid=?) AND (sid=mailaddr.id) AND (mailaddr.email IN (%k))'.
    # ' ORDER BY mailaddr.priority DESC';
    # To disable SQL white/black list, set to undef (otherwise comment-out
    # the following statement, leaving it at the default value):
    $sql_select_white_black_list = undef; # undef disables SQL white/blacklisting
    # If you decide to pass viruses (or spam) to certain recipients using the
    # above lookup tables or using $final_virus_destiny=1, you can set
    # the variable $addr_extension_virus ($addr_extension_spam) to some
    # string, and the recipient address will have this string appended
    # as an address extension to the local-part of the address. This extension
    # can be used by final local delivery agent to place such mail in different
    # folders. Leave these two variables undefined or empty strings to prevent
    # appending address extensions. Setting has no effect on recipient which will
    # not be receiving viruses/spam. Recipients who do not match lookup tables
    # local_domains* are not affected.
    # LDAs usually default to stripping away address extension if no special
    # handling is specified, so having this option enabled normally does no harm,
    # provided the $recipients_delimiter matches the setting on the final
    # MTA's LDA.
    # $addr_extension_virus = 'virus'; # (default is undef, same as empty)
    # $addr_extension_spam = 'spam'; # (default is undef, same as empty)
    # $addr_extension_banned = 'banned'; # (default is undef, same as empty)
    # Delimiter between local part of the recipient address and address extension
    # (which can optionally be added, see variables $addr_extension_virus and
    # $addr_extension_spam). E.g. recipient address <[email protected]> gets changed
    # to <[email protected]>.
    # Delimiter should match equivalent (final) MTA delimiter setting.
    # (e.g. for Postfix add 'recipient_delimiter = +' to main.cf)
    # Setting it to an empty string or to undef disables this feature
    # regardless of $addr_extension_virus and $addr_extension_spam settings.
    $recipient_delimiter = '+'; # (default is '+')
    # true: replace extension; false: append extension
    # $replace_existing_extension = 1; # (default is false)
    # Affects matching of localpart of e-mail addresses (left of '@')
    # in lookups: true = case sensitive, false = case insensitive
    $localpart_is_case_sensitive = 0; # (default is false)
    # ENVELOPE SENDER WHITELISTING / BLACKLISTING - GLOBAL (RECIPIENT-INDEPENDENT)
    # WHITELISTING: use ENVELOPE SENDER lookups to ENSURE DELIVERY from whitelisted
    # senders even if the message is recognized as spam. Effectively, for the
    # specified senders, message RECIPIENTS temporarily become 'spam_lovers', with
    # further processing being the same as otherwise specified for spam lovers.
    # It does not turn off inserting spam-related headers, if they are enabled.
    # BLACKLISTING: messages from specified SENDERS are DECLARED SPAM.
    # Effectively, for messages from blacklisted senders, spam level
    # is artificially pushed high, and the normal spam processing applies,
    # resulting in 'X-Spam-Flag: YES', high 'X-Spam-Level' bar and other usual
    # reactions to spam, including possible rejection. If the message nevertheless
    # still passes (e.g. for spam loving recipients), it is tagged as BLACKLISTED
    # in the 'X-Spam-Status' header field, but the reported spam value and
    # set of tests in this report header field (if available from SpamAssassin,
    # which may have not been called) is not adjusted.
    # A sender may be both white- and blacklisted at the same time,
    # settings are independent. For example, being both white- and blacklisted,
    # message is delivered to recipients, but is tagged as spam.
    # If ALL recipients of the message either white- or blacklist the sender,
    # spam scanning (calling the SpamAssassin) is bypassed, saving on time.
    # The following variables (lookup tables) are available, with the semantics
    # and syntax as specified in README.lookups:
    # %whitelist_sender, @whitelist_sender_acl, $whitelist_sender_re
    # %blacklist_sender, @blacklist_sender_acl, $blacklist_sender_re
    # SOME EXAMPLES:
    #ACL:
    # @whitelist_sender_acl = qw( .example.com );
    # @whitelist_sender_acl = ( ".$mydomain" ); # $mydomain and its subdomains
    # NOTE: This is not a reliable way of turning off spam checks for
    # locally-originating mail, as sender address can easily be faked.
    # To reliably avoid spam-scanning outgoing mail,
    # use @bypass_spam_checks_acl .
    #RE:
    # $whitelist_sender_re = new_RE(
    # qr'^postmaster@.*\bexample\.com$'i,
    # qr'^owner-[^@]*@'i, qr'-request@'i,
    # qr'\.example\.com$'i );
    $blacklist_sender_re = new_RE(
    qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou|greatcasino)@'i,
    qr'^(investments|lose_weight_today|market.alert|money2you|MyGreenCard)@'i,
    qr'^(new\.tld\.registry|opt-out|opt-in|optin|saveonlsmoking2002k)@'i,
    qr'^(specialoffer|specialoffers|stockalert|stopsnoring|wantsome)@'i,
    qr'^(workathome|yesitsfree|your_friend|greatoffers)@'i,
    qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i,
    #HASH lookup variant:
    # NOTE: Perl operator qw splits its argument string by whitespace
    # and produces a list. This means that addresses can not contain
    # whitespace, and there is no provision for comments within the string.
    # You can use the normal Perl list syntax if you have special requirements,
    # e.g. map {...} ('one user@bla', '.second.com'), or use read_hash to read
    # addresses from a file.
    # a hash lookup table can be read from a file,
    # one address per line, comments and empty lines are permitted:
    # read_hash(\%whitelist_sender, '/var/amavis/whitelist_sender');
    # ... or set directly:
    # $whitelist_sender{''} = 1; # don't spam-check MTA bounces
    map { $whitelist_sender{lc($_)}=1 } (qw(
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    returns.groups.yahoo.com
    # ENVELOPE SENDER WHITELISTING / BLACKLISTING - PER-RECIPIENT
    # The same semantics as for global white/blacklisting applies, but this
    # time each recipient (or its domain, or subdomain, ...) can be given
    # an individual lookup table for matching senders. The per-recipient lookups
    # override the global lookups, which serve as a fallback default.
    # Specify a two-level lookup table: the key for the outer table is recipient,
    # and the result should be an inner lookup table (hash or ACL or RE),
    # where the key used will be the sender.
    #$per_recip_blacklist_sender_lookup_tables = {
    # '[email protected]'=>new_RE(qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i),
    # '[email protected]'=>[qw( [email protected],org .d2.example,org )],
    #$per_recip_whitelist_sender_lookup_tables = {
    # '[email protected]' => [qw( [email protected] .other.example.org )],
    # '.my1.example.com' => [qw( !foe.other.example,org .other.example,org )],
    # '.my2.example.com' => read_hash('/var/amavis/my2-wl.dat'),
    # 'abuse@' => { 'postmaster@'=>1,
    # '[email protected]'=>1, '[email protected]'=>1 },
    # Section VI - Resource limits
    # Sanity limit to the number of allowed recipients per SMTP transaction
    # $smtpd_recipient_limit = 1000; # (default is 1000)
    # Resource limitations to protect against mail bombs (e.g. 42.zip)
    # Maximum recursion level for extraction/decoding (0 or undef disables limit)
    $MAXLEVELS = 14; # (default is undef, no limit)
    # Maximum number of extracted files (0 or undef disables the limit)
    $MAXFILES = 1500; # (default is undef, no limit)
    # For the cumulative total of all decoded mail parts we set max storage size
    # to defend against mail bombs. Even though parts may be deleted (replaced
    # by decoded text) during decoding, the size they occupied is _not_ returned
    # to the quota pool.
    # Parameters to storage quota formula for unpacking/decoding/decompressing
    # Formula:
    # quota = max($MIN_EXPANSION_QUOTA,
    # $mail_size*$MIN_EXPANSION_FACTOR,
    # min($MAX_EXPANSION_QUOTA, $mail_size*$MAX_EXPANSION_FACTOR))
    # In plain words (later condition overrules previous ones):
    # allow MAX_EXPANSION_FACTOR times initial mail size,
    # but not more than MAX_EXPANSION_QUOTA,
    # but not less than MIN_EXPANSION_FACTOR times initial mail size,
    # but never less than MIN_EXPANSION_QUOTA
    $MIN_EXPANSION_QUOTA = 100*1024; # bytes (default undef, not enforced)
    $MAX_EXPANSION_QUOTA = 300*1024*1024; # bytes (default undef, not enforced)
    $MIN_EXPANSION_FACTOR = 5; # times original mail size (must be specified)
    $MAX_EXPANSION_FACTOR = 500; # times original mail size (must be specified)
    # Section VII - External programs, virus scanners
    # Specify a path string, which is a colon-separated string of directories
    # (no trailing slashes!) to be assigned to the environment variable PATH
    # and to serve for locating external programs below.
    # NOTE: if $daemon_chroot_dir is nonempty, the directories will be
    # relative to the chroot directory specified;
    $path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin';
    # Specify one string or a search list of strings (first match wins).
    # The string (or: each string in a list) may be an absolute path,
    # or just a program name, to be located via $path;
    # Empty string or undef (=default) disables the use of that external program.
    # Optionally command arguments may be specified - only the first substring
    # up to the whitespace is used for file searching.
    $file = 'file'; # file(1) utility; use 3.41 or later to avoid vulnerability
    $gzip = 'gzip';
    $bzip2 = 'bzip2';
    $lzop = 'lzop';
    $uncompress = ['uncompress', 'gzip -d', 'zcat'];
    $unfreeze = ['unfreeze', 'freeze -d', 'melt', 'fcat'];
    $arc = ['nomarch', 'arc'];
    $unarj = ['arj', 'unarj']; # both can extract, same options
    $unrar = ['rar', 'unrar']; # both can extract, same options
    $zoo = 'zoo';
    $lha = 'lha';
    $cpio = 'cpio';
    # SpamAssassin settings
    # $sa_local_tests_only is passed to Mail::SpamAssassin::new as a value
    # of the option local_tests_only. See Mail::SpamAssassin man page.
    # If set to 1, no tests that require internet access will be performed.
    $sa_local_tests_only = 1; # (default: false)
    #$sa_auto_whitelist = 1; # turn on AWL (default: false)
    $sa_mail_body_size_limit = 64*1024; # don't waste time on SA if mail is larger
    # (less than 1% of spam is > 64k)
    # default: undef, no limitations
    # default values, can be overridden by more specific lookups, e.g. SQL
    $sa_tag_level_deflt = -999; # add spam info headers if at, or above that level
    $sa_tag2_level_deflt = 3.0; # add 'spam detected' headers at that level
    $sa_kill_level_deflt = 22.0;
    #$sa_kill_level_deflt = $sa_tag2_level_deflt; # triggers spam evasive actions
    # at or above that level: bounce/reject/drop,
    # quarantine, and adding mail address extension
    # The $sa_tag_level_deflt, $sa_tag2_level_deflt and $sa_kill_level_deflt
    # may also be hashrefs to hash lookup tables, to make static per-recipient
    # settings possible without having to resort to SQL or LDAP lookups.
    # a quick reference:
    # tag_level controls adding the X-Spam-Status and X-Spam-Level headers,
    # tag2_level controls adding 'X-Spam-Flag: YES', and editing Subject,
    # kill_level controls 'evasive actions' (reject, quarantine, extensions);
    # it only makes sense to maintain the relationship:
    # tag_level <= tag2_level <= kill_level
    # string to prepend to Subject header field when message exceeds tag2 level
    $sa_spam_subject_tag = '*** JUNK MAIL ***'; # (defaults to undef, disables)
    # (only seen when spam is not to be rejected
    # and recipient is in local_domains*)
    $sa_spam_modifies_subj = 1; # may be a ref to a lookup table, default is true
    # Example: modify Subject for all local recipients except [email protected]
    #$sa_spam_modifies_subj = [qw( [email protected] . )];
    # @av_scanners is a list of n-tuples, where fields semantics is:
    # 1. av scanner plain name, to be used in log and reports;
    # 2. scanner program name; this string will be submitted to subroutine
    # find_external_programs(), which will try to find the full program
    # path name; if program is not found, this scanner is disabled.
    # Besides a simple string (full program path name or just the basename
    # to be looked for in PATH), this may be an array ref of alternative
    # program names or full paths - the first match in the list will be used;
    # As a special case for more complex scanners, this field may be
    # a subroutine reference, and the whole n-tuple is passed to it as args.
    # 3. command arguments to be given to the scanner program;
    # a substring {} will be replaced by the directory name to be scanned,
    # i.e. "$tempdir/parts"
    # 4. an array ref of av scanner exit status values, or a regexp (to be
    # matched against scanner output), indicating NO VIRUSES found;
    # 5. an array ref of av scanner exit status values, or a regexp (to be
    # matched against scanner output), indicating VIRUSES WERE FOUND;
    # Note: the virus match prevails over a 'not found' match, so it is safe
    # even if 4. matches for viruses too;
    # 6. a regexp (to be matched against scanner output), returning a list
    # of virus names found.
    # 7. and 8.: (optional) subroutines to be executed before and after scanner
    # (e.g. to set environment or current directory);
    # see examples for these at KasperskyLab AVP and Sophos sweep.
    # NOTES:
    # - NOT DEFINING @av_scanners (e.g. setting it to empty list, or deleting the
    # whole assignment) TURNS OFF LOADING AND COMPILING OF THE ANTIVIRUS CODE
    # (which can be handy if all you want to do is spam scanning);
    # - the order matters: although _all_ available entries from the list are
    # always tried regardless of their verdict, scanners are run in the order
    # specified: the report from the first one detecting a virus will be used
    # (providing virus names and scanner output); REARRANGE THE ORDER TO WILL;
    # - it doesn't hurt to keep an unused command line scanner entry in the list
    # if the program can not be found; the path search is only performed once
    # during the program startup;
    # CORROLARY: to disable a scanner that _does_ exist on your system,
    # comment out its entry or use undef or '' as its program name/path
    # (second parameter). An example where this is almost a must: disable
    # Sophos 'sweep' if you have its daemonized version Sophie or SAVI-Perl
    # (same for Trophie/vscan, and clamd/clamscan), or if another unrelated
    # program happens to have a name matching one of the entries ('sweep'
    # again comes to mind);
    # - it DOES HURT to keep unwanted entries which use INTERNAL SUBROUTINES
    # for interfacing (where the second parameter starts with \&).
    # Keeping such entry and not having a corresponding virus scanner daemon
    # causes an unnecessary connection attempt (which eventually times out,
    # but it wastes precious time). For this reason the daemonized entries
    # are commented in the distribution - just remove the '#' where needed.
    @av_scanners = (
    # ### http://www.vanja.com/tools/sophie/
    # ['Sophie',
    # \&ask_daemon, ["{}/\n", '/var/run/sophie'],
    # qr/(?x)^ 0+ ( : | [\000\r\n]* $)/, qr/(?x)^ 1 ( : | [\000\r\n]* $)/,
    # qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* $/ ],
    # ### http://www.csupomona.edu/~henson/www/projects/SAVI-Perl/
    # ['Sophos SAVI', \&sophos_savi ],
    # ### http://clamav.elektrapro.com/
    # ['Clam Antivirus-clamd',
    # \&ask_daemon, ["CONTSCAN {}\n", '/var/amavis/clamd'],
    # qr/\bOK$/, qr/\bFOUND$/,
    # qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
    # # NOTE: run clamd under the same user as amavisd,
    # # match the socket name in clamav.conf to the socket name in this entry
    # ### http://www.openantivirus.org/
    # ['OpenAntiVirus ScannerDaemon (OAV)',
    # \&ask_daemon, ["SCAN {}\n", '127.0.0.1:8127'],
    # qr/^OK/, qr/^FOUND: /, qr/^FOUND: (.+)/ ],
    # ### http://www.vanja.com/tools/trophie/
    # ['Trophie',
    # \&ask_daemon, ["{}/\n", '/var/run/trophie'],
    # qr/(?x)^ 0+ ( : | [\000\r\n]* $)/, qr/(?x)^ 1 ( : | [\000\r\n]* $)/,
    # qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* $/ ],
    # ### http://www.f-prot.com/
    # ['FRISK F-Prot Daemon',
    # \&ask_daemon,
    # ["GET {}/*?-dumb%20-archive HTTP/1.0\r\n\r\n",
    # ['127.0.0.1:10200','127.0.0.1:10201','127.0.0.1:10202',
    # '127.0.0.1:10203','127.0.0.1:10204'] ],
    # qr/(?i)<summary[^>]*>clean<\/summary>/,
    # qr/(?i)<summary[^>]*>infected<\/summary>/,
    # qr/(?i)<name>(.+)<\/name>/ ],
    ['KasperskyLab AntiViral Toolkit Pro (AVP)', ['avp','kavscanner'],
    "-* -P -B -Y -O- {}", [0,3,8], [2,4], # any use for -A -K ?
    qr/infected: (.+)/,
    sub {chdir('/opt/AVP') or die "Can't chdir to AVP: $!"},
    sub {chdir($TEMPBASE) or die "Can't chdir back to $TEMPBASE $!"},
    ['KasperskyLab AVPDaemonClient',
    [ '/opt/AVP/kavdaemon', 'kavdaemon',
    '/opt/AVP/AvpDaemonClient', 'AvpDaemonClient',
    '/opt/AVP/AvpTeamDream', 'AvpTeamDream',
    '/opt/AVP/avpdc', 'avpdc' ],
    '{}', [0,8], [3,4,5,6], qr/infected: ([^\r\n]+)/ ],
    # change the startup-script in /etc/init.d/kavd to:
    # DPARMS="-I0 -Y -* /var/amavis"
    # adjusting /var/amavis above to match your $TEMPBASE.
    # NOTE: cd /opt/AVP/DaemonClients; configure; cd Sample; make
    # cp AvpDaemonClient /opt/AVP/
    ### http://www.hbedv.com/ or http://www.centralcommand.com/
    ['H+BEDV AntiVir or CentralCommand Vexira Antivirus',
    ['antivir','vexira'],
    '--allfiles -noboot -nombr -rs -s -z {}', [0], qr/ALERT:|VIRUS:/,
    qr/(?x)^\s* (?: ALERT: \s* (?: \[ | [^']* ' ) |
    (?i) VIRUS:\ .*?\ virus\ '?) ( [^\]\s']+ )/ ],
    # NOTE: remove the -z if you only have a demo version
    ### http://www.commandsoftware.com/
    ['Command AntiVirus for Linux', 'csav',
    '-all -archive -packed {}', [50], [51,52,53],
    qr/Infection: (.+)/ ],
    ### http://www.symantec.com/
    ['Symantec CarrierScan via Symantec CommandLineScanner',
    ['cscmdline','savsecls'],
    '-a scan -i 1 -v -s 127.0.0.1:7777 {}',
    qr/Files Infected: 0/, qr/^Infected: /,
    qr/Info:\s+(.+)/ ],
    ### http://drweb.imshop.de/
    ['DrWeb Antivirus for Linux/FreeBSD/Solaris', 'drweb',
    '-al -ar -fm -go -ha -ml -ot -sd -up {}',
    [0], [1], sub {('no-name')} ],
    ### http://www.f-secure.com/products/anti-virus/
    ['F-Secure Antivirus', 'fsav',
    '--dumb --archive {}', [0], [3,8],
    qr/(?:infection|Infected): (.+)/ ],
    ['CAI InoculateIT', 'inocucmd',
    '-sec -nex {}', [0], [100],
    qr/was infected by virus (.+)/ ],
    ['MkS_Vir for Linux (beta)', ['mks32','mks'],
    '-s {}/*', [0], [1,2],
    qr/--[ \t]*(.+)/ ],
    ['MkS_Vir daemon',
    'mksscan', '-s -q {}', [0], [1..7],
    qr/^... (\S+)/ ],
    ### http://www.nod32.com/
    ['ESET Software NOD32', 'nod32',
    '-all -subdir+ {}', [0], [1,2],
    qr/^.+? - (.+?)\s*(?:backdoor|joke|trojan|virus|worm)/ ],
    ### http://www.nod32.com/
    ['ESET Software NOD32 - Client/Server Version', 'nod32cli',
    '-a -r -d recurse --heur standard {}', [0], [10,11],
    qr/^\S+\s+infected:\s+(.+)/ ],
    ### http://www.norman.com/products_nvc.shtml
    ['Norman Virus Control v5 / Linux', 'nvccmd',
    '-c -l:0 -s -u {}', [0], [1],
    qr/(?i).* virus in .* -> \'(.+)\'/ ],
    ### http://www.pandasoftware.com/
    ['Panda Antivirus for Linux', ['pavcl','pavc'],
    '-aut -aex -heu -cmp -nor -nso -eng {}',
    qr/Number of files infected\.*: 0(?!\d)/,
    qr/Number of files infected\.*: 0*[1-9]/,
    qr/Found virus :\s*(\S+)/ ],
    # Check your RAV license terms before fiddling with the following two lines!
    # ['GeCAD RAV AntiVirus 8', 'ravav',
    # '--all --archive --mail {}', [1], [2,3,4,

    You are welcome. I'm glad you got it back up.
    (1) You say you did the symbolic link. I will assume this is set correctly; it's very important that it is.
    (2) I don't know what you mean by "Been feeding the [email protected] for several weeks now, 700 emails each day at least." After the initial training period, SpamAssassin doesn't learn from mail it has already processed correctly. At this point, you only need to teach SpamAssassin when it is wrong. [email protected] should only be getting spam that is being passed as clean. Likewise, [email protected] should only be getting legitimate mail that is being flagged as junk. You are redirecting mail to both [email protected] and [email protected] ... right? SpamAssassin needs both.
    (3) Next, as I said before, you need to implement those "Frontline spam defense for Mac OS X Server." Once you have that done and issue "postfix reload" you can look at your SMTP log in Server Admin and watch as Postfix blocks one piece of junk mail after another. It's kind of cool.
    (4) Add some SARE rules:
    Visit http://www.rulesemporium.com/rules.htm and download the following rules:
    70sareadult.cf
    70saregenlsubj0.cf
    70sareheader0.cf
    70sarehtml0.cf
    70sareobfu0.cf
    70sareoem.cf
    70sarespoof.cf
    70sarestocks.cf
    70sareunsub.cf
    72sare_redirectpost
    Visit http://www.rulesemporium.com/other-rules.htm and download the following rules:
    backhair.cf
    bogus-virus-warnings.cf
    chickenpox.cf
    weeds.cf
    Copy these rules to /etc/mail/spamassassin/
    Then stop and restart mail services.
    There are other things you can do, and you'll find differing opinions about such things. In general, I think implementing the "Frontline spam defense for Mac OS X Server" and adding the SARE rules will help a lot. Good luck!

  • [SOLVED]Issue with Postfix sending to external mail addresses

    I'm having a very silly issue with Postfix. I followed the wiki article at [link]https://wiki.archlinux.org/index.php/Postfix[/link], and everything seems to work properly, however I cannot send to emails outside of my domain.
    I get the error:
    550 5.1.1 <[email protected]>: Recipient address rejected: Local delivery only!
    Here is what the logs say:
    May 08 16:05:12 my.dns.stuff.org postfix/smtpd[31464]: connect from localhost.localdomain[127.0.0.1]
    May 08 16:05:12 my.dns.stuff.org postfix/smtpd[31464]: 091E011E3C: client=localhost.localdomain[127.0.0.1]
    May 08 16:05:12 my.dns.stuff.org postfix/smtpd[31464]: 091E011E3C: reject: RCPT from localhost.localdomain[127.0.0.1]: 550 5.1.1 <[email protected]>: Recipient address rejected: Local delivery only!; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<sendingdomain.com>
    May 08 16:05:12 my.dns.stuff.org postfix/smtpd[31464]: lost connection after RCPT from localhost.localdomain[127.0.0.1]
    May 08 16:05:12 my.dns.stuff.org postfix/smtpd[31464]: disconnect from localhost.localdomain[127.0.0.1]
    May 08 16:05:14 my.dns.stuff.org sudo[31476]: me : TTY=pts/0 ; PWD=/etc/postfix ; USER=root ; COMMAND=/usr/bin/journalctl
    main.cf
    # Global Postfix configuration file. This file lists only a subset
    # of all parameters. For the syntax, and for a complete parameter
    # list, see the postconf(5) manual page (command: "man 5 postconf").
    # For common configuration examples, see BASIC_CONFIGURATION_README
    # and STANDARD_CONFIGURATION_README. To find these documents, use
    # the command "postconf html_directory readme_directory", or go to
    # http://www.postfix.org/BASIC_CONFIGURATION_README.html etc.
    # For best results, change no more than 2-3 parameters at a time,
    # and test if Postfix still works after every change.
    # SOFT BOUNCE
    # The soft_bounce parameter provides a limited safety net for
    # testing. When soft_bounce is enabled, mail will remain queued that
    # would otherwise bounce. This parameter disables locally-generated
    # bounces, and prevents the SMTP server from rejecting mail permanently
    # (by changing 5xx replies into 4xx replies). However, soft_bounce
    # is no cure for address rewriting mistakes or mail routing mistakes.
    #soft_bounce = no
    # LOCAL PATHNAME INFORMATION
    # The queue_directory specifies the location of the Postfix queue.
    # This is also the root directory of Postfix daemons that run chrooted.
    # See the files in examples/chroot-setup for setting up Postfix chroot
    # environments on different UNIX systems.
    queue_directory = /var/spool/postfix
    # The command_directory parameter specifies the location of all
    # postXXX commands.
    command_directory = /usr/bin
    # The daemon_directory parameter specifies the location of all Postfix
    # daemon programs (i.e. programs listed in the master.cf file). This
    # directory must be owned by root.
    daemon_directory = /usr/lib/postfix
    # The data_directory parameter specifies the location of Postfix-writable
    # data files (caches, random numbers). This directory must be owned
    # by the mail_owner account (see below).
    data_directory = /var/lib/postfix
    # QUEUE AND PROCESS OWNERSHIP
    # The mail_owner parameter specifies the owner of the Postfix queue
    # and of most Postfix daemon processes. Specify the name of a user
    # account THAT DOES NOT SHARE ITS USER OR GROUP ID WITH OTHER ACCOUNTS
    # AND THAT OWNS NO OTHER FILES OR PROCESSES ON THE SYSTEM. In
    # particular, don't specify nobody or daemon. PLEASE USE A DEDICATED
    # USER.
    mail_owner = postfix
    # The default_privs parameter specifies the default rights used by
    # the local delivery agent for delivery to external file or command.
    # These rights are used in the absence of a recipient user context.
    # DO NOT SPECIFY A PRIVILEGED USER OR THE POSTFIX OWNER.
    #default_privs = nobody
    # INTERNET HOST AND DOMAIN NAMES
    # The myhostname parameter specifies the internet hostname of this
    # mail system. The default is to use the fully-qualified domain name
    # from gethostname(). $myhostname is used as a default value for many
    # other configuration parameters.
    #myhostname = host.domain.tld
    myhostname = mail.sendingdomain.com
    # The mydomain parameter specifies the local internet domain name.
    # The default is to use $myhostname minus the first component.
    # $mydomain is used as a default value for many other configuration
    # parameters.
    mydomain = www.sendingdomain.com
    # SENDING MAIL
    # The myorigin parameter specifies the domain that locally-posted
    # mail appears to come from. The default is to append $myhostname,
    # which is fine for small sites. If you run a domain with multiple
    # machines, you should (1) change this to $mydomain and (2) set up
    # a domain-wide alias database that aliases each user to
    # [email protected].
    # For the sake of consistency between sender and recipient addresses,
    # myorigin also specifies the default domain name that is appended
    # to recipient addresses that have no @domain part.
    #myorigin = $myhostname
    myorigin = $mydomain
    append_dot_mydomain = no
    # RECEIVING MAIL
    # The inet_interfaces parameter specifies the network interface
    # addresses that this mail system receives mail on. By default,
    # the software claims all active interfaces on the machine. The
    # parameter also controls delivery of mail to user@[ip.address].
    # See also the proxy_interfaces parameter, for network addresses that
    # are forwarded to us via a proxy or network address translator.
    # Note: you need to stop/start Postfix when this parameter changes.
    inet_interfaces = all
    #inet_interfaces = loopback-only
    #inet_interfaces = $myhostname
    #inet_interfaces = $myhostname, localhost
    # The proxy_interfaces parameter specifies the network interface
    # addresses that this mail system receives mail on by way of a
    # proxy or network address translation unit. This setting extends
    # the address list specified with the inet_interfaces parameter.
    # You must specify your proxy/NAT addresses when your system is a
    # backup MX host for other domains, otherwise mail delivery loops
    # will happen when the primary MX host is down.
    #proxy_interfaces =
    #proxy_interfaces = 1.2.3.4
    # The mydestination parameter specifies the list of domains that this
    # machine considers itself the final destination for.
    # These domains are routed to the delivery agent specified with the
    # local_transport parameter setting. By default, that is the UNIX
    # compatible delivery agent that lookups all recipients in /etc/passwd
    # and /etc/aliases or their equivalent.
    # The default is $myhostname + localhost.$mydomain. On a mail domain
    # gateway, you should also include $mydomain.
    # Do not specify the names of virtual domains - those domains are
    # specified elsewhere (see VIRTUAL_README).
    # Do not specify the names of domains that this machine is backup MX
    # host for. Specify those names via the relay_domains settings for
    # the SMTP server, or use permit_mx_backup if you are lazy (see
    # STANDARD_CONFIGURATION_README).
    # The local machine is always the final destination for mail addressed
    # to user@[the.net.work.address] of an interface that the mail system
    # receives mail on (see the inet_interfaces parameter).
    # Specify a list of host or domain names, /file/name or type:table
    # patterns, separated by commas and/or whitespace. A /file/name
    # pattern is replaced by its contents; a type:table is matched when
    # a name matches a lookup key (the right-hand side is ignored).
    # Continue long lines by starting the next line with whitespace.
    # See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
    #mydestination = $myhostname, localhost.$mydomain, localhost
    #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
    mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
    #mydestination = localhost
    # mail.$mydomain, www.$mydomain, ftp.$mydomain
    # REJECTING MAIL FOR UNKNOWN LOCAL USERS
    # The local_recipient_maps parameter specifies optional lookup tables
    # with all names or addresses of users that are local with respect
    # to $mydestination, $inet_interfaces or $proxy_interfaces.
    # If this parameter is defined, then the SMTP server will reject
    # mail for unknown local users. This parameter is defined by default.
    # To turn off local recipient checking in the SMTP server, specify
    # local_recipient_maps = (i.e. empty).
    # The default setting assumes that you use the default Postfix local
    # delivery agent for local delivery. You need to update the
    # local_recipient_maps setting if:
    # - You define $mydestination domain recipients in files other than
    # /etc/passwd, /etc/aliases, or the $virtual_alias_maps files.
    # For example, you define $mydestination domain recipients in
    # the $virtual_mailbox_maps files.
    # - You redefine the local delivery agent in master.cf.
    # - You redefine the "local_transport" setting in main.cf.
    # - You use the "luser_relay", "mailbox_transport", or "fallback_transport"
    # feature of the Postfix local delivery agent (see local(8)).
    # Details are described in the LOCAL_RECIPIENT_README file.
    # Beware: if the Postfix SMTP server runs chrooted, you probably have
    # to access the passwd file via the proxymap service, in order to
    # overcome chroot restrictions. The alternative, having a copy of
    # the system passwd file in the chroot jail is just not practical.
    # The right-hand side of the lookup tables is conveniently ignored.
    # In the left-hand side, specify a bare username, an @domain.tld
    # wild-card, or specify a [email protected] address.
    #local_recipient_maps = unix:passwd.byname $alias_maps
    local_recipient_maps = proxy:unix:passwd.byname $alias_maps
    #local_recipient_maps =
    # The unknown_local_recipient_reject_code specifies the SMTP server
    # response code when a recipient domain matches $mydestination or
    # ${proxy,inet}_interfaces, while $local_recipient_maps is non-empty
    # and the recipient address or address local-part is not found.
    # The default setting is 550 (reject mail) but it is safer to start
    # with 450 (try again later) until you are certain that your
    # local_recipient_maps settings are OK.
    unknown_local_recipient_reject_code = 550
    # TRUST AND RELAY CONTROL
    # The mynetworks parameter specifies the list of "trusted" SMTP
    # clients that have more privileges than "strangers".
    # In particular, "trusted" SMTP clients are allowed to relay mail
    # through Postfix. See the smtpd_recipient_restrictions parameter
    # in postconf(5).
    # You can specify the list of "trusted" network addresses by hand
    # or you can let Postfix do it for you (which is the default).
    # By default (mynetworks_style = subnet), Postfix "trusts" SMTP
    # clients in the same IP subnetworks as the local machine.
    # On Linux, this does works correctly only with interfaces specified
    # with the "ifconfig" command.
    # Specify "mynetworks_style = class" when Postfix should "trust" SMTP
    # clients in the same IP class A/B/C networks as the local machine.
    # Don't do this with a dialup site - it would cause Postfix to "trust"
    # your entire provider's network. Instead, specify an explicit
    # mynetworks list by hand, as described below.
    # Specify "mynetworks_style = host" when Postfix should "trust"
    # only the local machine.
    #mynetworks_style = class
    #mynetworks_style = subnet
    mynetworks_style = host
    # Alternatively, you can specify the mynetworks list by hand, in
    # which case Postfix ignores the mynetworks_style setting.
    # Specify an explicit list of network/netmask patterns, where the
    # mask specifies the number of bits in the network part of a host
    # address.
    # You can also specify the absolute pathname of a pattern file instead
    # of listing the patterns here. Specify type:table for table-based lookups
    # (the value on the table right-hand side is not used).
    #mynetworks = 168.100.189.0/28, 127.0.0.0/8
    #mynetworks = $config_directory/mynetworks
    #mynetworks = hash:/etc/postfix/network_table
    # The relay_domains parameter restricts what destinations this system will
    # relay mail to. See the smtpd_recipient_restrictions description in
    # postconf(5) for detailed information.
    # By default, Postfix relays mail
    # - from "trusted" clients (IP address matches $mynetworks) to any destination,
    # - from "untrusted" clients to destinations that match $relay_domains or
    # subdomains thereof, except addresses with sender-specified routing.
    # The default relay_domains value is $mydestination.
    # In addition to the above, the Postfix SMTP server by default accepts mail
    # that Postfix is final destination for:
    # - destinations that match $inet_interfaces or $proxy_interfaces,
    # - destinations that match $mydestination
    # - destinations that match $virtual_alias_domains,
    # - destinations that match $virtual_mailbox_domains.
    # These destinations do not need to be listed in $relay_domains.
    # Specify a list of hosts or domains, /file/name patterns or type:name
    # lookup tables, separated by commas and/or whitespace. Continue
    # long lines by starting the next line with whitespace. A file name
    # is replaced by its contents; a type:name table is matched when a
    # (parent) domain appears as lookup key.
    # NOTE: Postfix will not automatically forward mail for domains that
    # list this system as their primary or backup MX host. See the
    # permit_mx_backup restriction description in postconf(5).
    relay_domains = $mydestination
    # INTERNET OR INTRANET
    # The relayhost parameter specifies the default host to send mail to
    # when no entry is matched in the optional transport(5) table. When
    # no relayhost is given, mail is routed directly to the destination.
    # On an intranet, specify the organizational domain name. If your
    # internal DNS uses no MX records, specify the name of the intranet
    # gateway host instead.
    # In the case of SMTP, specify a domain, host, host:port, [host]:port,
    # [address] or [address]:port; the form [host] turns off MX lookups.
    # If you're connected via UUCP, see also the default_transport parameter.
    #relayhost = $mydomain
    #relayhost = [gateway.my.domain]
    #relayhost = [mailserver.isp.tld]
    #relayhost = uucphost
    #relayhost = [an.ip.add.ress]
    default_transport = error: Local delivery only!
    # REJECTING UNKNOWN RELAY USERS
    # The relay_recipient_maps parameter specifies optional lookup tables
    # with all addresses in the domains that match $relay_domains.
    # If this parameter is defined, then the SMTP server will reject
    # mail for unknown relay users. This feature is off by default.
    # The right-hand side of the lookup tables is conveniently ignored.
    # In the left-hand side, specify an @domain.tld wild-card, or specify
    # a [email protected] address.
    #relay_recipient_maps = hash:/etc/postfix/relay_recipients
    # INPUT RATE CONTROL
    # The in_flow_delay configuration parameter implements mail input
    # flow control. This feature is turned on by default, although it
    # still needs further development (it's disabled on SCO UNIX due
    # to an SCO bug).
    # A Postfix process will pause for $in_flow_delay seconds before
    # accepting a new message, when the message arrival rate exceeds the
    # message delivery rate. With the default 100 SMTP server process
    # limit, this limits the mail inflow to 100 messages a second more
    # than the number of messages delivered per second.
    # Specify 0 to disable the feature. Valid delays are 0..10.
    #in_flow_delay = 1s
    # ADDRESS REWRITING
    # The ADDRESS_REWRITING_README document gives information about
    # address masquerading or other forms of address rewriting including
    # username->Firstname.Lastname mapping.
    # ADDRESS REDIRECTION (VIRTUAL DOMAIN)
    # The VIRTUAL_README document gives information about the many forms
    # of domain hosting that Postfix supports.
    # "USER HAS MOVED" BOUNCE MESSAGES
    # See the discussion in the ADDRESS_REWRITING_README document.
    # TRANSPORT MAP
    # See the discussion in the ADDRESS_REWRITING_README document.
    # ALIAS DATABASE
    # The alias_maps parameter specifies the list of alias databases used
    # by the local delivery agent. The default list is system dependent.
    # On systems with NIS, the default is to search the local alias
    # database, then the NIS alias database. See aliases(5) for syntax
    # details.
    # If you change the alias database, run "postalias /etc/aliases" (or
    # wherever your system stores the mail alias file), or simply run
    # "newaliases" to build the necessary DBM or DB file.
    # It will take a minute or so before changes become visible. Use
    # "postfix reload" to eliminate the delay.
    #alias_maps = dbm:/etc/aliases
    #alias_maps = hash:/etc/aliases
    #alias_maps = hash:/etc/aliases, nis:mail.aliases
    #alias_maps = netinfo:/aliases
    alias_maps = hash:/etc/postfix/aliases
    # The alias_database parameter specifies the alias database(s) that
    # are built with "newaliases" or "sendmail -bi". This is a separate
    # configuration parameter, because alias_maps (see above) may specify
    # tables that are not necessarily all under control by Postfix.
    #alias_database = dbm:/etc/aliases
    #alias_database = dbm:/etc/mail/aliases
    #alias_database = hash:/etc/aliases
    #alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases
    alias_database = $alias_maps
    # ADDRESS EXTENSIONS (e.g., user+foo)
    # The recipient_delimiter parameter specifies the separator between
    # user names and address extensions (user+foo). See canonical(5),
    # local(8), relocated(5) and virtual(5) for the effects this has on
    # aliases, canonical, virtual, relocated and .forward file lookups.
    # Basically, the software tries user+foo and .forward+foo before
    # trying user and .forward.
    #recipient_delimiter = +
    # DELIVERY TO MAILBOX
    # The home_mailbox parameter specifies the optional pathname of a
    # mailbox file relative to a user's home directory. The default
    # mailbox file is /var/spool/mail/user or /var/mail/user. Specify
    # "Maildir/" for qmail-style delivery (the / is required).
    #home_mailbox = Mailbox
    home_mailbox = Maildir/
    # The mail_spool_directory parameter specifies the directory where
    # UNIX-style mailboxes are kept. The default setting depends on the
    # system type.
    #mail_spool_directory = /var/mail
    #mail_spool_directory = /var/spool/mail
    # The mailbox_command parameter specifies the optional external
    # command to use instead of mailbox delivery. The command is run as
    # the recipient with proper HOME, SHELL and LOGNAME environment settings.
    # Exception: delivery for root is done as $default_user.
    # Other environment variables of interest: USER (recipient username),
    # EXTENSION (address extension), DOMAIN (domain part of address),
    # and LOCAL (the address localpart).
    # Unlike other Postfix configuration parameters, the mailbox_command
    # parameter is not subjected to $parameter substitutions. This is to
    # make it easier to specify shell syntax (see example below).
    # Avoid shell meta characters because they will force Postfix to run
    # an expensive shell process. Procmail alone is expensive enough.
    # IF YOU USE THIS TO DELIVER MAIL SYSTEM-WIDE, YOU MUST SET UP AN
    # ALIAS THAT FORWARDS MAIL FOR ROOT TO A REAL USER.
    #mailbox_command = /some/where/procmail
    #mailbox_command = /some/where/procmail -a "$EXTENSION"
    # The mailbox_transport specifies the optional transport in master.cf
    # to use after processing aliases and .forward files. This parameter
    # has precedence over the mailbox_command, fallback_transport and
    # luser_relay parameters.
    # Specify a string of the form transport:nexthop, where transport is
    # the name of a mail delivery transport defined in master.cf. The
    # :nexthop part is optional. For more details see the sample transport
    # configuration file.
    # NOTE: if you use this feature for accounts not in the UNIX password
    # file, then you must update the "local_recipient_maps" setting in
    # the main.cf file, otherwise the SMTP server will reject mail for
    # non-UNIX accounts with "User unknown in local recipient table".
    # Cyrus IMAP over LMTP. Specify ``lmtpunix cmd="lmtpd"
    # listen="/var/imap/socket/lmtp" prefork=0'' in cyrus.conf.
    #mailbox_transport = lmtp:unix:/var/imap/socket/lmtp
    # Cyrus IMAP via command line. Uncomment the "cyrus...pipe" and
    # subsequent line in master.cf.
    #mailbox_transport = cyrus
    # The fallback_transport specifies the optional transport in master.cf
    # to use for recipients that are not found in the UNIX passwd database.
    # This parameter has precedence over the luser_relay parameter.
    # Specify a string of the form transport:nexthop, where transport is
    # the name of a mail delivery transport defined in master.cf. The
    # :nexthop part is optional. For more details see the sample transport
    # configuration file.
    # NOTE: if you use this feature for accounts not in the UNIX password
    # file, then you must update the "local_recipient_maps" setting in
    # the main.cf file, otherwise the SMTP server will reject mail for
    # non-UNIX accounts with "User unknown in local recipient table".
    #fallback_transport = lmtp:unix:/file/name
    #fallback_transport = cyrus
    #fallback_transport =
    # The luser_relay parameter specifies an optional destination address
    # for unknown recipients. By default, mail for unknown@$mydestination,
    # unknown@[$inet_interfaces] or unknown@[$proxy_interfaces] is returned
    # as undeliverable.
    # The following expansions are done on luser_relay: $user (recipient
    # username), $shell (recipient shell), $home (recipient home directory),
    # $recipient (full recipient address), $extension (recipient address
    # extension), $domain (recipient domain), $local (entire recipient
    # localpart), $recipient_delimiter. Specify ${name?value} or
    # ${name:value} to expand value only when $name does (does not) exist.
    # luser_relay works only for the default Postfix local delivery agent.
    # NOTE: if you use this feature for accounts not in the UNIX password
    # file, then you must specify "local_recipient_maps =" (i.e. empty) in
    # the main.cf file, otherwise the SMTP server will reject mail for
    # non-UNIX accounts with "User unknown in local recipient table".
    #luser_relay = [email protected]
    #luser_relay = [email protected]
    #luser_relay = admin+$local
    # JUNK MAIL CONTROLS
    # The controls listed here are only a very small subset. The file
    # SMTPD_ACCESS_README provides an overview.
    # The header_checks parameter specifies an optional table with patterns
    # that each logical message header is matched against, including
    # headers that span multiple physical lines.
    # By default, these patterns also apply to MIME headers and to the
    # headers of attached messages. With older Postfix versions, MIME and
    # attached message headers were treated as body text.
    # For details, see "man header_checks".
    #header_checks = regexp:/etc/postfix/header_checks
    # FAST ETRN SERVICE
    # Postfix maintains per-destination logfiles with information about
    # deferred mail, so that mail can be flushed quickly with the SMTP
    # "ETRN domain.tld" command, or by executing "sendmail -qRdomain.tld".
    # See the ETRN_README document for a detailed description.
    # The fast_flush_domains parameter controls what destinations are
    # eligible for this service. By default, they are all domains that
    # this server is willing to relay mail to.
    #fast_flush_domains = $relay_domains
    # SHOW SOFTWARE VERSION OR NOT
    # The smtpd_banner parameter specifies the text that follows the 220
    # code in the SMTP server's greeting banner. Some people like to see
    # the mail version advertised. By default, Postfix shows no version.
    # You MUST specify $myhostname at the start of the text. That is an
    # RFC requirement. Postfix itself does not care.
    #smtpd_banner = $myhostname ESMTP $mail_name
    #smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
    # PARALLEL DELIVERY TO THE SAME DESTINATION
    # How many parallel deliveries to the same user or domain? With local
    # delivery, it does not make sense to do massively parallel delivery
    # to the same user, because mailbox updates must happen sequentially,
    # and expensive pipelines in .forward files can cause disasters when
    # too many are run at the same time. With SMTP deliveries, 10
    # simultaneous connections to the same domain could be sufficient to
    # raise eyebrows.
    # Each message delivery transport has its XXX_destination_concurrency_limit
    # parameter. The default is $default_destination_concurrency_limit for
    # most delivery transports. For the local delivery agent the default is 2.
    #local_destination_concurrency_limit = 2
    #default_destination_concurrency_limit = 20
    # DEBUGGING CONTROL
    # The debug_peer_level parameter specifies the increment in verbose
    # logging level when an SMTP client or server host name or address
    # matches a pattern in the debug_peer_list parameter.
    debug_peer_level = 2
    # The debug_peer_list parameter specifies an optional list of domain
    # or network patterns, /file/name patterns or type:name tables. When
    # an SMTP client or server host name or address matches a pattern,
    # increase the verbose logging level by the amount specified in the
    # debug_peer_level parameter.
    #debug_peer_list = 127.0.0.1
    #debug_peer_list = some.domain
    # The debugger_command specifies the external command that is executed
    # when a Postfix daemon program is run with the -D option.
    # Use "command .. & sleep 5" so that the debugger can attach before
    # the process marches on. If you use an X-based debugger, be sure to
    # set up your XAUTHORITY environment variable before starting Postfix.
    debugger_command =
    PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
    ddd $daemon_directory/$process_name $process_id & sleep 5
    # If you can't use X, use this to capture the call stack when a
    # daemon crashes. The result is in a file in the configuration
    # directory, and is named after the process name and the process ID.
    # debugger_command =
    # PATH=/bin:/usr/bin:/usr/local/bin; export PATH; (echo cont;
    # echo where) | gdb $daemon_directory/$process_name $process_id 2>&1
    # >$config_directory/$process_name.$process_id.log & sleep 5
    # Another possibility is to run gdb under a detached screen session.
    # To attach to the screen sesssion, su root and run "screen -r
    # <id_string>" where <id_string> uniquely matches one of the detached
    # sessions (from "screen -list").
    # debugger_command =
    # PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH; screen
    # -dmS $process_name gdb $daemon_directory/$process_name
    # $process_id & sleep 1
    # INSTALL-TIME CONFIGURATION INFORMATION
    # The following parameters are used when installing a new Postfix version.
    # sendmail_path: The full pathname of the Postfix sendmail command.
    # This is the Sendmail-compatible mail posting interface.
    sendmail_path = /usr/bin/sendmail
    # newaliases_path: The full pathname of the Postfix newaliases command.
    # This is the Sendmail-compatible command to build alias databases.
    newaliases_path = /usr/bin/newaliases
    # mailq_path: The full pathname of the Postfix mailq command. This
    # is the Sendmail-compatible mail queue listing command.
    mailq_path = /usr/bin/mailq
    # setgid_group: The group for mail submission and queue management
    # commands. This must be a group name with a numerical group ID that
    # is not shared with other accounts, not even with the Postfix account.
    setgid_group = postdrop
    # html_directory: The location of the Postfix HTML documentation.
    html_directory = no
    # manpage_directory: The location of the Postfix on-line manual pages.
    manpage_directory = /usr/share/man
    # sample_directory: The location of the Postfix sample configuration files.
    # This parameter is obsolete as of Postfix 2.1.
    sample_directory = /etc/postfix/sample
    # readme_directory: The location of the Postfix README files.
    readme_directory = /usr/share/doc/postfix
    inet_protocols = ipv4
    #virtual_mailbox_domains = sendingdomain.com
    virtual_alias_maps = hash:/etc/postfix/virtual_alias, mysql:/etc/postfix/mysql_virtual_forwards.cf
    virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailboxes.cf
    virtual_mailbox_base = /home/vmailer
    virtual_uid_maps = static:5003
    virtual_gid_maps = static:5003
    virtual_minimum_uid = 5003
    virtual_mailbox_limit = 51200000
    Any help would be appreciated. Thank you.
    Last edited by nadman10 (2014-05-14 14:36:10)

    Your main.cf seems redundant.
    For example:
    if you specify:
    virtual_alias_maps = hash:/etc/postfix/virtual_alias, mysql:/etc/postfix/mysql_virtual_forwards.cf
    you don't need this:
    alias_maps = hash:/etc/postfix/aliases
    and i think you have a lot of more options you don't need.
    This is my main.cf on my vps and everything works great (sending and receiving emails from/to most common mail server: gmail, hotmail etc etc)
    smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
    biff = no
    # appending .domain is the MUA's job.
    append_dot_mydomain = no
    readme_directory = no
    # TLS parameters
    smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    smtpd_use_tls=yes
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
    message_size_limit = 4194304
    virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
    virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
    virtual_transport = dovecot
    dovecot_destination_recipient_limit = 1
    it is very simple (no dkim, no forced tls, no mailbox limits and so on) and it can be improved but it works..
    as I suggested you just try spending some hour wiping postfix installation and giving a look to this guide

  • Mail stooping due to a directory service issue.

    don't know if this should go into the mail or directory section..
    I have a PPC xserve 10.5.6 that is running mail and web only.
    The last few weeks I'v been seeing this in my logs
    *Feb 16 12:10:26 mail DirectoryService[26]: Potential VM growth in DirectoryService since client PID: 0, has 625 open references when the warning limit is 500.*
    when this happens mail stops being delivered, and the mailq starts to grow.
    I found a thread on some thing like this in the Tiger server forums, and am now using a script to check the log every 5 min and if it sees the issue does a `killall -9 DirectoryService`;
    To try and fix the issue I have unbound then rebound the server, I made it a OD replica, and this weekend I even did a backup/format/reinstall. Even after the reinstall I am getting the same issues.
    Any one know of a fix?
    <edit>
    Hardware Overview:
    Model Name: Xserve G5
    Model Identifier: RackMac3,1
    Processor Name: PowerPC G5 (3.0)
    Processor Speed: 2 GHz
    Number Of CPUs: 1
    L2 Cache (per CPU): 512 KB
    Memory: 7 GB
    Bus Speed: 1 GHz
    added hardware info

    /etc/cyrus.conf
    # standard standalone server implementation
    START {
    # do not delete this entry!
    recover cmd="ctl_cyrusdb -r"
    # this is only necessary if using idled for IMAP IDLE
    idled cmd="idled"
    # UNIX sockets start with a slash and are put into /var/imap/socket
    SERVICES {
    # add or remove based on preferences
    imap cmd="imapd" listen="imap" prefork=0
    # imaps cmd="imapd -s" listen="imaps" prefork=0
    # pop3 cmd="pop3d" listen="pop3" prefork=0
    # pop3s cmd="pop3d -s" listen="pop3s" prefork=0
    sieve cmd="timsieved" listen="sieve" prefork=0
    # at least one LMTP is required for delivery
    # lmtp cmd="lmtpd" listen="lmtp" prefork=0
    lmtpunix cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0
    # this is only necessary if using notifications
    # notify cmd="notifyd" listen="/var/imap/socket/notify" proto="udp" prefork=1
    EVENTS {
    # this is required
    checkpoint cmd="ctl_cyrusdb -c" period=30
    # this is only necessary if using duplicate delivery suppression
    delprune cmd="ctl_deliver -E 3" at=0400
    # this is only necessary if caching TLS sessions
    tlsprune cmd="tls_prune" at=0400
    LIMITS {
    imaplimit value=0
    /etc/imapd.conf
    admins: cyrusimap, mailadmin
    configdirectory: /var/imap
    partition-default: /var/spool/imap
    unixhierarchysep: yes
    altnamespace: yes
    servername: mail.latcha.com
    sievedir: /usr/sieve
    sendmail: /usr/sbin/sendmail
    lmtpdowncasercpt: 1
    logrollingdays: 7
    logrolling_daysenabled: true
    imapauthlogin: yes
    imapauth_crammd5: yes
    imapauthplain: yes
    popauthclear: no
    quotawarn_frequencydays: 1
    enable_pop: no
    tlskeyfile: /etc/certificates/Default.key
    tlscertfile: /etc/certificates/Default.crt
    enablequotawarnings: yes

  • New DVR Issues (First Run, Channel Switching, etc.)

    I've spent the last 30 minutes trying to find answers through the search with no luck, so sorry if I missed something.
    I recently switched to FIOS from RCN cable in New York.  I've gone through trying to setup my DVR and am running into issues and was hoping for some answers.
    1.  I setup two programs to record at 8PM, I was watching another channel at the time and only half paying attention.  Around 8:02 I noticed a message had popped up asking if I would like to switch channels to start recording.  I was expecting it to force it to switch like my old DVR, but in this case it didn't switch and I missed the first two minutes of one of the shows.  I typically leave my DVR on all day and just turn off the TV, this dual show handling will cause issues with that if I forget to turn off the DVR.  Is there a setting I can change that will force the DVR to choose one of the recording channels?
    2.  I setup all my recordings for "First Run" because I only want to see the new episodes.  One show I setup was The Daily Show on comedy central, which is shown weeknights at 11pm and repeated 3-4 times throughout the day.  My scheduled recordings is showing all these as planned recordings even though only the 11pm show is really "new".  Most of the shows I've setup are once a week so they aren't a problem, but this seems like it will quickly fill my DVR.  Any fixes?
    Thanks for the help.
    Solved!
    Go to Solution.

    I came from RCN about a year ago.  Fios is different in several ways, not all of them desirable.  Here are several ways to get--and fix--unwanted recordings from a series recording setup.
    Some general principles. 
    Saving changes.  When you originally create a series with options, or if you go back to edit the options for an existing series, You MUST save the Series Options changes.  Pretty much everywhere else in the user interface, when you change an option, the change takes effect immediately--but not in Series Options.  Look at the Series Options window.  Look at the far right side.  There is a vertical "Save" bar, which you must navigate to and click OK on to actually save your changes.  Exiting the Series Options window without having first saved your changes loses all your attempted changes--immediately.
    Default Series Options.  This is accessed  from [Menu]--DVR--Settings--Default Series Options.  This will bring up the series options that will automatically be applied to the creation of a NEW series. The options for every previously created series will not be affected by a subsequent modification of the Default Series Options.  You should set these options to the way you would like them to be for the majority of series recordings that you are likely to create.  Be sure to SAVE your changes.  This is what you will get when you select "Create Series Recording" from the Guide.  When creating a new series recording where you think that you may want options different from the default, select "Create Series with Options" instead.  Series Options can always be changed for any individual series set up later--but not for all series at once.
    Non-series recordings.  With Fios you have no directly available options for these.  With RCN and most other DVRs, you can change the start and end times for individual episodes, including individual episodes that are also in a series.  With Fios, your workarounds are to create a series with options for a single program, then delete the series later;  change the series options if the program is already in a series, then undo the changes you made to the series options later; or schedule recordings of the preceding and/or following shows as needed.
    And now, to the unwanted repeats. 
    First, make sure your series options for the specific series in question--and not just the series default options--include "First Run Only".  If not, fix that and SAVE.  Then check you results by viewing the current options using the Series Manager app under the DVR menu.
    Second, and most annoying, the Guide can have repeat programs on your channel tagged as "New".  It happens.  Set the series option "Air Time" to "Selected Time".  To make this work correctly, you must have set up the original series recording after selecting the program in the Guide at the exact time of a first run showing (11pm, in your case), and not on a repeat entry in the Guide.  Then, even it The Daily Show is tagged as New for repeat showings, these will be ignored. 
    Third, another channel may air reruns of the program in your series recording, and the first showing of a rerun episode on the other channel may be tagged as "New".  These can be ignored in your series if you set the series option "Channel" to "Selected Channel".  Related to this, if there is both an SD and HD channel broadcasting you series program, you will record them both if the series option "Duplicates" is set to "Yes".  However, when the Channel option is set to "Selected Channel", the Duplicates Option is always effectively "No", regardless of what shows up on the options screen.  
    As for you missing two minutes,  I have sereral instances in which two programs start recording at the same time.  To the best of my recollection, whenever the warning message has appeared, ignoring it has not caused a loss of recording time.  You might have an older software version.  Newest is v.1.8.  Look at Menu--Settings--System Info.  Or, I might not have noticed the loss of minutes.  I regularly see up to a minute of previous programming at the start of a recording, or a few missing seconds at the beginning or end of a recording.  There are a lot of possibilities for that, but the DVR clock being incorrect is not one of them.  With RCN, the DVR clocks occasionally drifted off by as much as a minute and a half.

  • Pension issue Mid Month Leaving

    Dear All,
    As per rule sustem should deduct mid month joining/leaving/absences or transfer scenarios, the Pension/PF Basis will be correspondingly prorated. But our system is not doing this. In RT table i have found 3FC Pension Basis for Er c 01/2010                    0.00           6,500.00.
    Employee leaving date is 14.04.2010. system is picking pension amout as 541. Last year it was coming right.
    Please suggest.
    Ashwani

    Dear Jayanti,
    We required prorata basis pension in case of left employees and system is not doing this. This is the issue. As per our PF experts Pension amount should come on prorata basis for left employees in case they left mid of month.System is doing prorata basis last year but from this year it is deducting 541. I am giving two RT cases of different years.
    RT table for year 2010. DOL 26.04.2010
    /111 EPF Basis              01/2010                    0.00           8,750.00 
    /139 VPF Basis              01/2010                    0.00           8,750.00 
    /3F1 Ee PF contribution     01/2010                    0.00           1,050.00 
    /3F3 Er PF contribution     01/2010                    0.00             509.00 
    /3F5 Ee Mon PF contribution 01/2010                    0.00           1,050.00 
    /3F6 Ee Ann PF contribution 01/2010                    0.00          12,600.00 
    /3F9 PF adm chrgs * 1,00,00 01/2010                    0.00              96.25 
    /3FA PF basis for Ee contri 01/2010                    0.00           8,750.00 
    /3FB PF Basis for Er Contri 01/2010                    0.00           8,750.00 
    /3FJ VPF basis for Ee contr 01/2010                    0.00           8,750.00 
    /3FL PF Basis for Er Contri 01/2010                    0.00           6,500.00 
    /3F4 Er Pension contributio 01/2010                    0.00             541.00
    /3FC Pension Basis for Er c 01/2010                    0.00           6,500.00
    /3FB PF Basis for Er Contri 01/2010                    0.00           8,750.00
    /3FC Pension Basis for Er c 01/2010                    0.00           6,500.00
    /3FJ VPF basis for Ee contr 01/2010                    0.00           8,750.00
    /3FL PF Basis for Er Contri 01/2010                    0.00           6,500.00
    /3R3 Metro HRA Basis Amount 01/2010                    0.00           8,750.00
    1BAS Basic Salary           01/2010                    0.00           8,750.00
    RT table for year 2009. DOL 27.10.2009
                                                                                    /111 EPF Basis              07/2009                    0.00           9,016.13
    /139 VPF Basis              07/2009                    0.00           9,016.13
    /3F1 Ee PF contribution     07/2009                    0.00           1,082.00
    /3F3 Er PF contribution     07/2009                    0.00             628.00
    /3F5 Ee Mon PF contribution 07/2009                    0.00           1,082.00
    /3F6 Ee Ann PF contribution 07/2009                    0.00           8,822.00
    /3F9 PF adm chrgs * 1,00,00 07/2009                    0.00              99.18
    /3FA PF basis for Ee contri 07/2009                    0.00           9,016.00
    /3FB PF Basis for Er Contri 07/2009                    0.00           9,016.00
    /3FJ VPF basis for Ee contr 07/2009                    0.00           9,016.00
    /3FL PF Basis for Er Contri 07/2009                    0.00           5,452.00
    /3FB PF Basis for Er Contri 07/2009                    0.00           9,016.00 
    /3FC Pension Basis for Er c 07/2009                    0.00           5,452.00 
    /3FJ VPF basis for Ee contr 07/2009                    0.00           9,016.00 
    /3FL PF Basis for Er Contri 07/2009                    0.00           5,452.00 
    /3R4 Non-metro HRA Basis Am 07/2009                    0.00           9,016.13 
    1BAS Basic Salary           07/2009                    0.00           9,016.13 
    Now please suggest what to do. where is the problem  ? If have also checked EXIT_HINCALC0_002 but nothing written in it.
    With Regards
    Ashwani

  • Open PO Analysis - BW report issue

    Hello Friends
    I constructed a query in BW in order to show Open Purchase Orders. We have custom DSO populated with standard
    datasource 2lis_02_itm (Purcahse Order Item). In this DSO we mapped the field ELIKZ to the infoobject 0COMP_DEL
    (Delivery completed).
    We loaded the data from ECC system for all POs and found the following issue for Stock Transport Purchase orders (DocType = UB).
    We have a PO with 4 line items. For line items 10 and 20, Goods issued, Goods received and both the flags "Delivery
    complete" and "Final delivery" checked. For line items 30 and 40, only delivery indicator note is issued for zero
    quantity and Delivery complete flag is checked (Final delivery flag is not checked) in ECC system. For this PO, the
    delivery completion indicator is not properly updated in the DSO for line items 30 and 40. The data looks like the
    following:
    DOC_NUM     DOC_ITEM       DOCTYPE     COMP_DEL
    650000001       10     UB        X
    650000001       20     UB        X
    650000001       30     UB
    650000001       40     UB      
    When we run the Open PO analysis report on BW side this PO is appearing in the report but the same is closed in ECC
    system.
    Any help is appreciated in this regard.
    Thanks and Regards
    sampath

    Hi Priya and Reddy
       Thanks for your response.
                         Yes the indicator is checked in EKPO table for items 30 and 40 and delta is running regularly for more than 1 year and no issues with other POs. This is happening only for few POs of type Stock Transport (UB).
                        I already checked the changes in ME23N and the Delivery completed indicator was changed and it reflected in EKPO table. Further, i checked the PSA records for this PO and i am getting the records with the Delivery completed flag but when i update from PSA to DSO the delivery completed indicator is not updating properly.
                       In PSA, for item 30 i have the following entries. Record number 42 is capturing the value X for ELIKZ but after that i am getting two more records 43 and 44 with process key 10 and without X for ELIKZ. I think this is causing the problem.
    Record No.    Doc.No.                    Item              Processkey         Rocancel     Elikz
        41               6500000001            30                    11                            X           ---    
        42               6500000001            30                    11                            ---           X
        43               6500000001            30                    10                            X           ---
        44               6500000001            30                    10                            ---         ---
    (Here --- means blank)        
    Thanks and Regards
    sampath

  • HP LaserJet Enterprise 600 M602 driver issue

    Hello,
    I've got issue with 600-series printers. We use the latest UPD drivrer ver. 61.175.1.18849 and print from XenApp 6.5. The error occurs every time when users try to print jpg files from XenApp session. It only happens with 600 series printers and UPD.
    Also I've tried to assign native 600-series driver ver. 6.3.9600.16384 and it works good. But with that driver system says that it's color printer and it brokes our printing reports. These reports are very important for us. So we can't use printer and that driver as well.
    Printer installed on Windows Server 2012 R2. All clients are Windows 7 x64. XenApp Servers are Server 2008R2.
    Is it possible to get fixed UPD driver or correct native driver for Server 2012 R2?
    Regards,
    Anatoly

    I am sorry, but to get your issue more exposure I would suggest posting it in the commercial forums since this is a commercial printer. You can do this at Printers - LaserJet.
    Click on New Post.
    I hope this helps.
    Please click “Accept as Solution ” if you feel my post solved your issue, it will help others find the solution.
    Click the “Kudos Thumbs Up" on the right to say “Thanks” for helping!
    Gemini02
    I work on behalf of HP

  • Windows 7 displays error message when exiting +cursor issue

    Two issues here. CS5 Phoshop on Wind 7 64 bit.
    Physical processor count: 8
    Processor speed: 3073 MHz
    Built-in memory: 12279 MB
    Free memory: 9577 MB
    Memory available to Photoshop: 10934 MB
    Memory used by Photoshop: 80 %
    Image tile size: 128K
    First issue is since the latest automatic Adobe update (why fix what isn't broken?) Every time I now exit Photoshop I get the message "Adobe QT Server has stoped working" and occasionally it happens when I exit bridge. Indesign is also behaving badly. I can no longer start a previous document from file manager without ID crashing out.
    The other is the cursors in Clone and erase lose their edge (become invisable) for no reason - well not quite. Noise Ninja crashed Photoshop when I tried to use it. I reinstalled it and all is well. The cursor issue seems to be intermittant but came back (for no reason) after I reinstalled NN. I can't seem to change the cursor, no matter what I do. The problem is now seriously affecting how I work. Almost enough to go back to Win XP which ran CS5 Photoshop flawlessly.
    Any help will be gratefully accepted.
    Doug

    function(){return A.apply(null,[this].concat($A(arguments)))}
    doug87510 wrote:
    The recent problem is the entire outline of the cursor (including the crosshair in the middle) was missing at any size of cursor. All I had was exactly what I'd get if I used a real spraygun.
    Well, that issue is simply a matter of hitting the Caps Lock key.  When Caps Lock is on, you'll see the cursor outline, and when it is off you'll see a crosshair.  That's a feature, not a bug.
    Glad to hear the 11.1 drivers are out.  I will download them and try them now myself.
    Regarding "Adobe QT" crashing...  QT brings to mind QuickTime, though that is Apple, not Adobe.  Do you have Apple QuickTime installed?
    Regarding memory usage, with 12 GB of installed RAM, you should be able to set Photoshop to use 90% or more in Edit - Preferences - Performance.
    -Noel

  • Issue in Creation of Periodicals for Contracts in CRM7.0

    Hello,
    I have a requirement to create Contracts in CRM7.0 system.
    And I am doing this using the BAPI *BAPI_BUSPROCESSND_CREATEMULTI*
    Good part is Contract Order gets created, but onlywith Header Details.
    The issues i am facing --
    1. I need to know what kind/type of data must be passed to the interface parameters, the F1 Help/Documentation is vague.
    2. I am passing data in the INPUT FIELDS structure with the Object ID, Handle Number, Reference GUID and Fieldname,
        here what does 'Logical Key' field indicate? What should be passed here.
        What does 'REFERENCE KIND' field indicate, i have been passng 'A' for everything (to be frank i dont know whats its significance is!!).
    3. With so much, My Order gets created but with less than half details, i.e. the Objects not getting created are -  Partner, Product, terms/appointments, Status, LongTexts......
    Any help/inputs would be appreciated.
    Hope my problem is stated clearly ...
    --Regards
    Dedeepya

    Hi Anu,
    i found my solution by debugging with existing data or while creating it in CRMD_ORDER.
    Ensure that you are passing a correct entry in INPUT_FIELDS structure.
    As i haven't worked on rebates i woudlnt be able to help you, I suggest you debug to arrive at a solution.
    You can preset your break-points at :-
    1. FM - CRM_ORDER_MAINTAIN
    2. CRM_ORDER_MAINTAIN_MULTI_OW -- Debug through the complete FM.
    3. CRM_ORDER_PREPARE_MULTI_OW -- The data is set in this function module.
    Regards
    Dedeepya C

  • Issue in creation of plant related data at receiving server using BD10

    Hi all,
    This is regarding Material master creation using B10.I am using MATMAS05 message type for sending data from one system to another.Data is sent and received successfully.When i go in mm03 i can see all the views created successfully accept views related to PLANT.Please guide to resolve the issue.
    When i entered into Log-
    1)"The field MBEW-BKLAS is defined as a required field; it does not contain an entry".
    2)"No material master data exists for material AB_08.04.09(30) in plant 4001".
    My segemnt is as follows-
    ZMATMAS05                      matmas05
           E1MARAM                        Master material general data (MARA)
               Z1KLART                        KLART----
    My extention
               E1MARA1                        Additional Fields for E1MARAM
               E1MAKTM                        Master material short texts (MAKT)
               E1MARCM                        Master material C segment (MARC)
                   Z1AUSPM                        E1AUSPMDistribution of Classification:----
    My extention
                   E1MARC1                        Additional Fields for E1MARCM
                   E1MARDM                        Master material warehouse/batch segment (MARD)
                   E1MFHMM                        Master material production resource/tool (MFHM)
                   E1MPGDM                        Master material product group
                   E1MPOPM                        Master material forecast parameter
                   E1MPRWM                        Master material forecast value
                   E1MVEGM                        Master material total consumption
                   E1MVEUM                        Master material unplanned consumption
                   E1MKALM                        Master material production version
               E1MARMM                        Master material units of measure (MARM)
               E1MBEWM                        Master material material valuation (MBEW)
               E1MLGNM                        Master material material data per warehouse number (MLGN)
               E1MVKEM                        Master material sales data (MVKE)
               E1MLANM                        Master material tax classification (MLAN)
               E1MTXHM                        Master material long text header
               E1CUCFG                        CU: Configuration data
           E1UPSLINK                      Reference from Object to Superior UPS
    Thanks.
    Edited by: sanu debu on Apr 27, 2009 7:10 PM

    CREATE CONTROLFILE SET DATABASE "NEWDB" NORESETLOGS ARCHIVELOGAlso when you are setting a new database, the option should be RESETLOGS and not NORESETLOGS.
    'D:\APP\ADMINISTRATOR\ORADATA\NEWDB\ONLINELOG\O1_MF_2_7FK0XKB8_.LOG
    D:\APP\ADMINISTRATOR\ORADATA\NEWDB\DATAFILE\O1_MF_SYSTEM_7FK0SKN0_.DBFWhy underscore(_) at the end of the datafile name. Any specific reason ?

  • Issue in Creation of new Value Field in CO-PA

    Hi,
    I have a query in CO-PA Value Field Linking.
    In my Development Client,
    1. Created a New Value Field (No Transport Request Generated)
    2. Linked to the above to new Conditon type created in SD. (Tranport request was generated) i.e. in Flow of Actual Values->Transfer of Billing Documents->Assign Value Fields
    However then i try creating a new Value Field in my Production Client it throws a message 'You have no authorization to change Fields".
    Is this an issue with authorization or i need to transport the Value field too from Development to Production client.
    Please Advise.
    Thanks in Advance,
    Safi

    Thanks Phaneendra for the response.
    The creation of Value field did not create any tranportation request. Will this too be transported if i transport the Operating Concern.
    Please Advise.
    Thanks,
    Safi

  • Issue of Free Goods

    Dear All
    I have some is my current assignment-Customer is buying some material say "A" want "B,C" as exclusive free goods
    is it possible to give two free at a time in same order ?
    I only know one exlusive free good can be give to one material with combination of customer ( Customer/Material)
    Looking for some inputs regarding the issue.
    Can you plz suggest me if there is any possiblities for BOM?
    Many Thanks
    Rakesh Naveen

    Dear Rakesh,
    Be informed that free goods is not currently supported in combination with material structures (e.g. product selection,     
    bills of material, variants with BOM explosion), see note 796926.   
    Determination of free goods is performed in include FV45PF0N_NATRAB_SELECTION and the check is hardcoded. You will have to modify the program to get that functionality, but be carfull that any modification won't be supported by SAP, see note 170183.                
    I hope it can help you.
    Ruy Castro

  • Issue in creation of control cycle

    Dear Gurus,
    During creation of control cycle (LPK1), the fields for source information is not appearing in my system.
    I compared control cycle in a different ECC system where source information is appearing.
    How can make the screen appear in my ECC system.
    Please find the screenshots.
    Any pointers will be highly appreciated.
    This thread is further to the threads in Production Planning and LE/WM Forum. I could not resolve the issue with the threads.
    Hope that I will get any pointer in EWM forum.
    http://scn.sap.com/thread/3609441
    http://scn.sap.com/thread/3610822
    With Regards,
    Malay

    Hello Malay,
    Can first contact your ABAPer and ensure the bottom screen is not an Screen Enhancement?
    If it is a some custom development, your ABAPer can help you on the logic behind it.
    Else, Let us know.
    Regards,
    Sathish

  • Issue in Creation of XML file from ABAP data

    Hi,
    I need to create a XML file, but am not facing some issues in creation of XML file, the in the required format.
    The required format is
    -<Header1 1st field= u201CValueu201D 2nd field= u201CValueu201D>
       - <Header2 1st field= u201CValueu201D 2nd field= u201CValueu201Du2026u2026. Upto 10 fields>
              <Header3 1st field= u201CValueu201D 2nd field= u201CValueu201Du2026u2026. Upto 6 fields/>
              <Header4  1st field= u201CValueu201D 2nd field= u201CValueu201Du2026u2026. Upto 4 fields/.>
               <Header5 1st field= u201CValueu201D 2nd field= u201CValueu201Du2026u2026. Upto 6 fields/>
          </Header2>
       </Header1>
    Iu2019m using the call transformation to convert ABAP data to XML file.
    So please anybody can help how to define XML structure in transaction XSLT_TOOL.
    And one more thing, here I need to put the condition to display the Header 3, Header 4, Header 5 values. If there is no record for a particular line item in header 3, 4 & 5, I donu2019t want to display full line items; this is only for Header 3, 4 & 5.
    Please help me in this to get it resolved.

    Hello,
    you can use CALL TRANSFORMATION id, which will create a exact "print" of the ABAP data into the XML.
    If you need to change the structure of XML, you can alter your ABAP structure to match the requirements.
    Of course you can create your own XSLT but that is not that easy to describe and nobody will do that for you around here. If you would like to start with XSLT, you´d better start the search.
    Regards Otto

Maybe you are looking for