Re: [Exim] Yahoo bulk email problem

Top Page
Delete this message
Reply to this message
Author: Ganbold
Date:  
To: exim-users
Subject: Re: [Exim] Yahoo bulk email problem
Hi,

I tried to send email from web with X-Sender header, but still yahoo
recognizes it as a bulk.
However when I send email using Eudora/Outlook Yahoo puts it into Inbox.
It is strange and probably Yahoo Spamguard doesn't like headers sent from web.
Any helps and directions are greatly appreciated

thanks in advance,

Ganbold


At 04:11 PM 17.02.2004, you wrote:
>In addition to the problem followings are the email headers at Yahoo side.
>
>Headers which is sent by ordinary email client software(goes into Yahoo Inbox)
>----------------------------------------------------------------------------
>X-Apparently-To: gt064163@??? via 216.136.225.54; Mon, 16 Feb 2004
>23:17:28 -0800
>Return-Path: <ganbold@???>
>Received: from 202.179.0.88 (EHLO publicd.ub.mng.net) (202.179.0.88) by
>mta124.mail.scd.yahoo.com with SMTP; Mon, 16 Feb 2004 23:17:27 -0800
>Received: from [202.179.0.164] (helo=ganbold.micom.mng.net) by
>publicd.ub.mng.net with asmtp (Exim 4.30; FreeBSD) id 1AszP9-0005VX-4t for
>gt064163@???; Tue, 17 Feb 2004 15:12:27 +0800
>Message-Id: <6.0.3.0.2.20040217152151.02a8f4e0@202.179.0.80>
>X-Sender: ganbold@???@202.179.0.80
>X-Mailer: QUALCOMM Windows Eudora Version 6.0.3.0
>Date: Tue, 17 Feb 2004 15:21:53 +0800
>To: gt064163@???
>From: "Ganbold" <ganbold@???>
>Subject: Testing
>Mime-Version: 1.0
>Content-Type: text/plain; charset="us-ascii"; format=flowed
>Content-Length: 54
>
>
>Headers sent from the web (goes into Bulk mail folder)
>----------------------------------------------------------------------------
>X-Apparently-To: gt064163@??? via 216.136.225.57; Mon, 16 Feb 2004
>23:54:02 -0800
>X-YahooFilteredBulk: 202.179.0.80
>Return-Path: <ganbold@???>
>Received: from 202.179.0.80 (EHLO publica.ub.mng.net) (202.179.0.80) by
>mta108.mail.sc5.yahoo.com with SMTP; Mon, 16 Feb 2004 23:54:01 -0800
>Received: from www by publica.ub.mng.net with local (Exim 4.30; FreeBSD) id
>1AszuX-0004XE-Vz for gt064163@???; Tue, 17 Feb 2004 15:44:53 +0800
>To: gt064163@???
>Subject: asdfsad
>From: ganbold@???
>X-Mailer: ZBTA tsanba p1.1
>MIME-Version: 1.0
>Content-Type: text/plain; charset="windows-1251"
>Content-Transfer-Encoding: 8bit
>Message-Id: <E1AszuX-0004XE-Vz@202.179.0.80>
>Date: Tue, 17 Feb 2004 15:44:53 +0800
>Content-Length: 10
>
>I see only difference is X-Sender header. Is this causing a problem? How to
>send this header?
>
>Ganbold
>
>
>
>At 01:01 PM 17.02.2004, you wrote:
>>Hi all,
>>
>>I have also problem related to yahoo mail. When I send email from web
>>interface to yahoo mail address,
>>yahoo automatically puts my email into bulk mail folder.
>>What should I do in order yahoo receives it in Inbox?
>>
>>Following is my exim configuration.
>>----------------------------------------------------------------------------
>>
>>hide mysql_servers = "localhost/email/xxx/xxx"
>>primary_hostname = chinggis.com
>>domainlist local_domains = mail.ub.mng.net : localhost : chinggis.com
>>domainlist relay_to_domains =
>>hostlist relay_from_hosts = localhost
>>
>>helo_accept_junk_hosts = *
>>helo_allow_chars = _
>>untrusted_set_sender = *
>>local_sender_retain = true
>>local_from_check = false
>>
>>message_size_limit = 2M
>>no_smtp_check_spool_space
>>
>>acl_smtp_rcpt = acl_check_rcpt
>>
>>acl_smtp_data = acl_check_content
>>
>>exim_user = mailnull
>>exim_group = mail
>>#never_users = root
>>
>>rfc1413_hosts = *
>>rfc1413_query_timeout = 0s
>>#rfc1413_query_timeout = 30s
>>
>>auto_thaw = 24h
>>ignore_bounce_errors_after = 12h
>>
>>timeout_frozen_after = 2d
>>
>>av_scanner = cmdline:/usr/local/bin/uvscan --secure -rv --summary --noboot
>>%s:Found:(Found.*)
>>spamd_address = 127.0.0.1 783
>>
>>smtp_accept_queue_per_connection = 300
>>smtp_accept_max = 150
>>smtp_accept_queue = 100
>>smtp_accept_reserve = 15
>>smtp_reserve_hosts = 202.179.0.0/19
>>smtp_connect_backlog = 75
>>queue_only_load = 4
>>deliver_queue_load_max = 6
>>remote_max_parallel = 5
>>
>>######################################################################
>>#                           ADDED ZBTA SAVEEVMAIL                    #
>>######################################################################
>># New configuration / 2002-9-22 /
>>trusted_users = nobody
>>ZBTAMAIL_HOME = /usr/local/mailers
>>ZBTAMAIL_SAVEMAIL = /usr/local/mailers/savemail.pl
>>ZBTAMAIL_UID = nobody
>>ZBTAMAIL_GID = nobody

>>
>>######################################################################
>>#                       ACL CONFIGURATION                            #
>>#         Specifies access control lists for incoming SMTP mail      #
>>######################################################################
>>begin acl

>>
>># This access control list is used for every RCPT command in an incoming
>># SMTP message. The tests are run in order until the address is either
>># accepted or denied.
>>acl_check_rcpt:
>> # Accept if the source is local SMTP (i.e. not over TCP/IP). We do this by
>> # testing for an empty sending host field.
>> accept hosts = :
>>
>>
>>#############################################################################
>>   # The following section of the ACL is concerned with local parts that
>>contain
>>   # @ or % or ! or / or | or dots in unusual places.
>>   #
>>   # The characters other than dots are rarely found in genuine local
>>parts, but
>>   # are often tried by people looking to circumvent relaying restrictions.
>>   # Therefore, although they are valid in local parts, these rules lock them
>>   # out, as a precaution.
>>   #
>>   # Empty components (two dots in a row) are not valid in RFC 2822, but Exim
>>   # allows them because they have been encountered. (Consider local parts
>>   # constructed as "firstinitial.secondinitial.familyname" when applied to
>>   # someone like me, who has no second initial.) However, a local part
>>starting
>>   # with a dot or containing /../ can cause trouble if it is used as part
>>of a
>>   # file name (e.g. for a mailing list). This is also true for local parts
>>that
>>   # contain slashes. A pipe symbol can also be troublesome if the local
>>part is
>>   # incorporated unthinkingly into a shell command line.
>>   #
>>   # Two different rules are used. The first one is stricter, and is
>>applied to
>>   # messages that are addressed to one of the local domains handled by this
>>   # host. It blocks local parts that begin with a dot or contain @ % ! /
>>or |.
>>   # If you have local accounts that include these characters, you will
>>have to
>>   # modify this rule.
>>#  old method
>>#  deny    local_parts   = ^.*[@%!/|] : ^\\.
>>   deny    domains       = +local_domains
>>           local_parts   = ^[.] : ^.*[@%!/|]
>>   # The second rule applies to all other domains, and is less strict. This
>>   # allows your own users to send outgoing messages to sites that use
>> slashes
>>   # and vertical bars in their local parts. It blocks local parts that begin
>>   # with a dot, slash, or vertical bar, but allows these characters
>>within the
>>   # local part. However, the sequence /../ is barred. The use of @ % and
>> ! is
>>   # blocked, as before. The motivation here is to prevent your users (or
>>   # your users' viruses) from mounting certain kinds of attack on remote
>>sites.
>>   deny    domains       = !+local_domains
>>           local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

>>
>>#############################################################################
>>
>>   deny    domains = *.refhost.net : list.cashculture.com
>>   deny    hosts = 217.158.42.0/255.255.255.0 : 202.179.7.51 : 202.131.0.7
>>: 216.18.7.59 : 81.199.84.104 : 61.154.79.46 : 68.208.25.230 :
>>80.179.249.197 : 192.116.116.103
>>   deny    senders = staff@??? : openlifebiz@??? :
>>introduce.site@???
>>   # deny if connection comes from different host, but domain is in
>>local_domains list
>>#  deny           hosts = !202.179.0.199
>>#          senders = *@chinggis.com
>>#         domains = +local_domains
>>   # Accept mail to postmaster in any local domain, regardless of the source,
>>   # and without verifying the sender.
>>   accept  local_parts   = postmaster
>>           domains       = +local_domains

>>
>>   # Deny unless the sender address can be verified.
>>   require verify        = sender

>>
>>
>>#############################################################################
>>   # There are no checks on DNS "black" lists because the domains that
>> contain
>>   # these lists are changing all the time. However, here are two examples of
>>   # how you could get Exim to perform a DNS black list lookup at this point.
>>   # The first one denies, while the second just warns.
>>   #
>>   deny    message       = rejected because $sender_host_address is in a
>>black list at $dnslist_domain\n$dnslist_text
>>           dnslists      = sbl-xbl.spamhaus.org : relays.ordb.org :
>>dnsbl.njabl.org : bl.spamcop.net : dnsbl.sorbs.net : dsn.rfc-ignorant.org :
>>list.dsbl.org
>>##  warn   hosts        = !127.0.0.1
>>##        message       = X-Warning: $sender_host_address is in a relay list
>>at $dnslist_domain
>>##         log_message   = found in $dnslist_domain
>>##         dnslists      = relays.mail-abuse.org
>>   deny    message       = rejected because $sender_host_address is listed
>>as routing via an insecure proxy at $dnslist_domain\n$dnslist_text
>>           dnslists      = opm.blitzed.org
>>#          dnslists      = opm.blitzed.org : formmail.relays.monkeys.com :
>>proxies.relays.monkeys.com

>>
>>
>>#############################################################################
>>   # Accept if the address is in a local domain, but only if the
>> recipient can
>>   # be verified. Otherwise deny. The "endpass" line is the border between
>>   # passing on to the next ACL statement (if tests above it fail) or denying
>>   # access (if tests below it fail).
>>   accept  domains       = +local_domains
>>           endpass
>>           message       = unknown user
>>#         verify        = sender/callout=15s
>>           verify        = recipient
>>   # Accept if the address is in a domain for which we are relaying, but
>>again,
>>   # only if the recipient can be verified.
>>   accept  domains       = +relay_to_domains
>>           endpass
>>           message       = unrouteable address
>>           verify        = recipient
>>   # If control reaches this point, the domain is neither in +local_domains
>>   # nor in +relay_to_domains.
>>   # Accept if the message comes from one of the hosts for which we are an
>>   # outgoing relay. Recipient verification is omitted here, because in many
>>   # cases the clients are dumb MUAs that don't cope well with SMTP error
>>   # responses. If you are actually relaying out from MTAs, you should
>>probably
>>   # add recipient verification here.
>>   accept  hosts         = +relay_from_hosts
>>   # Accept if the message arrived over an authenticated connection, from
>>   # any host. Again, these messages are usually from MUAs, so recipient
>>   # verification is omitted.
>>   accept  authenticated = *
>>   # Reaching the end of the ACL causes a "deny", but we might as well give
>>   # an explicit message.
>>   deny    message       = relay not permitted

>>
>># This access control list is used for content scanning with the exiscan-acl
>># patch. You must also uncomment the entry for acl_smtp_data (scroll up),
>># otherwise the ACL will not be used. IMPORTANT: the default entries here
>># should be treated as EXAMPLES. You MUST read the file
>>doc/exiscan-acl-spec.txt
>># to fully understand what you are doing ...
>>acl_check_content:
>>   deny  senders = :
>>         message = A valid sender header is required for bounces
>>         !verify  = header_sender
>>   # First unpack MIME containers and reject serious errors.
>>   deny  message = This message contains a MIME error ($demime_reason)
>>         demime = *
>>         condition = ${if >{$demime_errorlevel}{2}{1}{0}}
>>   # Reject typically wormish file extensions. There is almost no
>>   # sense in sending such files by email.
>>   deny  message = This message contains an unwanted file extension
>>($found_extension)
>>         demime = scr:vbs:bat:lnk:pif
>>   # Reject virus infested messages.
>>   deny  message = This message contains malware ($malware_name)
>>         demime = *
>>         malware = *
>>   # Reject messages containing "viagra" in all kinds of whitespace/case
>>combinations
>>   # WARNING: this is an example !
>>#  deny  message = This message matches a blacklisted regular expression
>>($regex_match_string)
>>#        regex = [Vv] *[Ii] *[Aa] *[Gg] *[Rr] *[Aa]
>>   # Always add X-Spam-Score and X-Spam-Report headers, using SA
>>system-wide settings
>>   # (user "nobody"), no matter if over threshold or not.
>>   warn  message = X-Spam-Score: $spam_score ($spam_bar)
>>         spam = nobody:true
>>#  warn  message = X-Spam-Report: $spam_report
>>#        !senders = *@mongol.net : *@publica.ub.mng.net : *@micom.mng.net
>>##        !hosts = +relay_from_hosts
>>#        spam = nobody:true
>>   # Add X-Spam-Flag if spam is over system-wide threshold
>>   warn message = X-Spam-Flag: YES
>>         spam = nobody
>>   # add second subject line with *SPAM* marker when message
>>   # is over threshold
>>   warn  message = Subject: ***SPAM*** $h_Subject
>>         spam = nobody
>>   # Reject spam messages. Remember to tweak your
>>   # site-wide SA profile. Do not spam-scan messages
>>   # larger than eighty kilobytes.
>>   deny message = Spam score too high ($spam_score)
>>      condition = ${if <{$message_size}{80k}{1}{0}}
>>      spam = nobody:true
>>      condition = ${if >{$spam_score_int}{80}{1}{0}}
>>   # finally accept all the rest
>>   accept

>>
>>
>>######################################################################
>>#                      ROUTERS CONFIGURATION                         #
>>#               Specifies how addresses are handled                  #
>>######################################################################
>>#     THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT!       #
>># An address is passed to each router in turn until it is accepted.  #
>>######################################################################
>>begin routers

>>
>>
>># This router routes to remote hosts over SMTP by explicit IP address,
>># when an email address is given in "domain literal" form, for example,
>># <user@???>. The RFCs require this facility. However, it is
>># little-known these days, and has been exploited by evil people seeking
>># to abuse SMTP relays. Consequently it is commented out in the default
>># configuration. If you uncomment this router, you also need to uncomment
>># allow_domain_literals above, so that Exim can recognize the syntax of
>># domain literal addresses.
>># domain_literal:
>># driver = ipliteral
>># domains = ! +local_domains
>># transport = remote_smtp
>>
>># This router routes addresses that are not in local domains by doing a DNS
>># lookup on the domain name. Any domain that resolves to 0.0.0.0 or to a
>># loopback interface address (127.0.0.0/8) is treated as if it had no DNS
>># entry. Note that 0.0.0.0 is the same as 0.0.0.0/32, which is commonly
>>treated
>># as the local host inside the network stack. It is not 0.0.0.0/0, the
>>default
>># route. If the DNS lookup fails, no further routers are tried because of
>># the no_more setting, and consequently the address is unrouteable.
>>dnslookup:
>> driver = dnslookup
>> domains = ! +local_domains
>> transport = remote_smtp
>> ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
>> no_more
>>
>># The remaining routers handle addresses in the local domain(s).
>>
>># This router handles aliasing using a traditional /etc/aliases file.
>>#
>>##### NB You must ensure that /etc/aliases exists. It used to be the case
>>##### NB that every Unix had that file, because it was the Sendmail default.
>>##### NB These days, there are systems that don't have it. Your aliases
>>##### NB file should at least contain an alias for "postmaster".
>>#
>># If any of your aliases expand to pipes or files, you will need to set
>># up a user and a group for these deliveries to run under. You can do
>># this by uncommenting the "user" option below (changing the user name
>># as appropriate) and adding a "group" option if necessary.
>>Alternatively, you
>># can specify "user" on the transports that are used. Note that the
>>transports
>># listed below are the same as are used for .forward files; you might want
>># to set up different ones for pipe and file deliveries from aliases.
>>#system_aliases:
>># driver = redirect
>># allow_fail
>># allow_defer
>># data = ${lookup{$local_part}lsearch{/etc/aliases}}
>># user = mailnull
>># group = mail
>># file_transport = address_file
>># pipe_transport = address_pipe
>>
>>#spamcheck_router:
>># no_verify
>># check_local_user
>># # When to scan a message :
>> # - it isn't already flagged as spam
>> # - it isn't already scanned
>># condition = "${if and { {!def:h_X-Spam-Flag:}
>>{!eq{$received_protocol}{spam-scanned}}} {1}{0}}"
>># driver = accept
>># transport = spamcheck
>>
>>zbtarouter:
>> driver = accept
>># condition = ${if eq {}{${lookup mysql {SELECT id FROM host WHERE name =
>>'$domain'}}}{no}{yes}}
>> domains = chinggis.com
>> transport = zbtamail
>>
>>system_aliases:
>> driver = redirect
>> allow_fail
>> allow_defer
>> data = ${lookup{$local_part}lsearch{/etc/aliases}}
>> user = mailnull
>> group = mail
>> file_transport = address_file
>> pipe_transport = address_pipe
>>
>># This router handles forwarding using traditional .forward files in users'
>># home directories. If you want it also to allow mail filtering when a
>>forward
>># file starts with the string "# Exim filter", uncomment the "allow_filter"
>># option.
>># The no_verify setting means that this router is skipped when Exim is
>># verifying addresses. Similarly, no_expn means that this router is
>>skipped if
>># Exim is processing an EXPN command.
>># The check_ancestor option means that if the forward file generates an
>># address that is an ancestor of the current one, the current one gets
>># passed on instead. This covers the case where A is aliased to B and B
>># has a .forward file pointing to A.
>># The three transports specified at the end are those that are used when
>># forwarding generates a direct delivery to a file, or to a pipe, or sets
>># up an auto-reply, respectively.
>>userforward:
>>   driver = redirect
>>   check_local_user
>>   file = $home/.forward
>>   no_verify
>>   no_expn
>>   check_ancestor
>># allow_filter
>>   file_transport = address_file
>>   pipe_transport = address_pipe
>>   reply_transport = address_reply
>>   condition = ${if exists{$home/.forward} {yes} {no} }
>># This router matches local user mailboxes.
>>#zbtarouter:
>>#  driver = accept
>>#  condition = ${if eq {}{${lookup mysql {SELECT id FROM host WHERE name =
>>'$domain'}}}{no}{yes}}
>>#  transport = zbtamail
>>localuser:
>>   driver = accept
>>   check_local_user
>>   transport = local_delivery
>>non_exist:
>>   driver = accept
>>   transport = non_exist_reply
>>   no_verify
>>######################################################################
>>#                      TRANSPORTS CONFIGURATION                      #
>>######################################################################
>>#                       ORDER DOES NOT MATTER                        #
>>#     Only one appropriate transport is called for each delivery.    #
>>######################################################################
>># A transport is used only when referenced from a router that successfully
>># handles an address.
>>begin transports
>>non_exist_reply:
>>   driver = autoreply
>>   user = mailnull
>>   to = $sender_address
>>   subject = User does not exist
>>   text = You sent mail to $local_part. That's not a valid user here.

>>
>># Spam Assassin
>>#spamcheck:
>># driver = pipe
>># command = /usr/local/sbin/exim -oMr spam-scanned -bS
>># use_bsmtp = true
>># transport_filter = /usr/local/bin/spamassassin -x -S
>># home_directory = "/tmp"
>># current_directory = "/tmp"
>># # must use a privileged user to set $received_protocol on the way back in!
>># user = mailnull
>># group = mail
>># log_output = true
>># return_fail_output = true
>># return_path_add = false
>># message_prefix =
>># message_suffix =
>>
>>
>># This transport is used for delivering messages over SMTP connections.
>>remote_smtp:
>> driver = smtp
>> data_timeout = 15m
>> command_timeout = 10m
>> connect_timeout = 10m
>>
>># This transport is used for local delivery to user mailboxes in traditional
>># BSD mailbox format. By default it will be run under the uid and gid of the
>># local user, and requires the sticky bit to be set on the /var/mail
>>directory.
>># Some systems use the alternative approach of running mail deliveries
>>under a
>># particular group instead of using the sticky bit. The commented options
>>below
>># show how this can be done.
>>local_delivery:
>> driver = appendfile
>> file = /var/mail/$local_part
>> delivery_date_add
>> envelope_to_add
>> return_path_add
>> group = mail
>> mode = 0660
>>
>># This transport is used for handling pipe deliveries generated by alias or
>># .forward files. If the pipe generates any standard output, it is returned
>># to the sender of the message as a delivery error. Set return_fail_output
>># instead of return_output if you want this to happen only when the pipe
>>fails
>># to complete normally. You can set different transports for aliases and
>># forwards if you want to - see the references to address_pipe in the routers
>># section above.
>>address_pipe:
>> driver = pipe
>> return_output
>>
>># This transport is used for handling deliveries directly to files that are
>># generated by aliasing or forwarding.
>>address_file:
>> driver = appendfile
>> delivery_date_add
>> envelope_to_add
>> return_path_add
>>
>># This transport is used for handling autoreplies generated by the filtering
>># option of the userforward router.
>>address_reply:
>> driver = autoreply
>>
>>######################################################################
>>#                             ZBTA DELIVERY                          #
>>######################################################################
>>zbtamail:
>>   driver = pipe
>>   command = ZBTAMAIL_SAVEMAIL "$local_part" "$domain" "$message_size"
>>"$spam_score" "$sender_address" "$sender_host_address"
>>   current_directory = ZBTAMAIL_HOME
>>   home_directory = ZBTAMAIL_HOME
>>   user = ZBTAMAIL_UID
>>   group = ZBTAMAIL_GID
>>   log_output
>>   log_defer_output
>>   return_fail_output
>>#  return_path_add
>>   delivery_date_add
>>   envelope_to_add

>>
>>
>>######################################################################
>>#                      RETRY CONFIGURATION                           #
>>######################################################################
>>begin retry
>># This single retry rule applies to all domains and all errors. It specifies
>># retries every 15 minutes for 2 hours, then increasing retry intervals,
>># starting at 1 hour and increasing each time by a factor of 1.5, up to 16
>># hours, then retries every 6 hours until 4 days have passed since the first
>># failed delivery.
>># Domain               Error       Retries
>># ------               -----       -------
>>*                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h

>>
>>######################################################################
>>#                      REWRITE CONFIGURATION                         #
>>######################################################################
>># There are no rewriting specifications in this default configuration file.
>>begin rewrite

>>
>>######################################################################
>>#                   AUTHENTICATION CONFIGURATION                     #
>>######################################################################
>># There are no authenticator specifications in this default configuration
>>file.
>>begin authenticators
>>plain:
>>     driver = plaintext
>>     public_name = PLAIN
>>     server_prompts = :
>>     server_condition = ${lookup mysql{select count(*) from usrs where \
>>(id = '${quote_mysql:$2}') and pwrd = '${quote_mysql:$3}' \
>>and pwrd != ''}}

>>
>>     server_set_id = $2
>>login:
>>     driver = plaintext
>>     public_name = LOGIN
>>     server_prompts = Username:: : Password::
>>     server_condition = ${lookup mysql{select count(*) from usrs where \
>>(id = '${quote_mysql:$1}') and pwrd = '${quote_mysql:$2}' \
>>and pwrd != ''}}

>>
>>     server_set_id = $1
>>cram:
>>     driver = cram_md5
>>     public_name = CRAM-MD5
>>     server_secret = ${lookup mysql{select pwrd from usrs \
>>where (id = '${quote_mysql:$1}') and pwrd != ''}}

>>
>>     server_set_id = $1

>>
>># End of Exim configuration file
>>
>>
>>--
>>
>>## List details at http://www.exim.org/mailman/listinfo/exim-users Exim
>>details at http://www.exim.org/ ##
>>
>
>
>--
>
>## List details at http://www.exim.org/mailman/listinfo/exim-users Exim
>details at http://www.exim.org/ ##
>
>