Loading ...
Sorry, an error occurred while loading the content.
 

Re: Say to Postfix which email need to be delivered locally based on the full email address and not just based on the local domain

Expand Messages
  • Michele Carandente
    Hi Noel. Thanks for the reply. The problem is not when I receive emails(because I ll fetch it with a perl script), but when I ve to send email(relay to
    Message 1 of 12 , Feb 1, 2010
      Hi Noel.
      Thanks for the reply.
      The problem is not when I receive emails(because I'll fetch it with a
      perl script), but when I've to send email(relay to smtp.gmail.com)
      from gmail.

      Any suggestions?
      Thanks

      Michele


      On 1 Feb 2010, at 17:16, Noel Jones <njones@...> wrote:

      > On 2/1/2010 5:41 AM, Michele Carandente wrote:
      >> Hello to everybody,
      >>
      >> I'm configuring a postfix server connected on internet with a slow
      >> dial-up connection.
      >> Basically I want to hold all emails to be sent (I'll send them
      >> manually when I want), plus I want to relay all the emails to
      >> different smtp servers (depends of the email).
      >> The configuration that I've is like that:
      >>
      >> virtual_alias_domains =
      >> virtual_alias_maps =
      >> proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf,
      >> mysql:/etc/postfix/mysql-virtual_email2email.cf
      >> virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-
      >> virtual_domains.cf
      >> virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-
      >> virtual_mailboxes.cf
      >> transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
      >> sender_dependent_relayhost_maps = hash:/etc/postfix/bysenderrelay
      >>
      >> With this configuration I'm able to say to the system which email is
      >> internal (so delivered locally). With bysenderrelay I can setup the
      >> smtp server for every email.
      >> The problem is that if, for example, I've a gmail account as local
      >> email and I want to send an email to another gmail account(external),
      >> postfix match in mail_domain that gmail.com is a local domain and try
      >> to send that email locally...
      >>
      >> How to say to postfix which email must be delivered locally based on
      >> the full email name and not just based on the domain?
      >>
      >> I will need something like relay_domains, but for the user. So that,
      >> if it not a local email, the bysenderrelay will tell to postfix where
      >> to relay the email...
      >>
      >> Any suggestion?
      >>
      >> Thanks
      >
      >
      > Don't define gmail.com as a local domain!!!!
      >
      > Use virtual_alias_maps to direct user@... to a local address.
      > http://www.postfix.org/documentation.html
      >
      >
      > -- Noel Jones
    • Noel Jones
      ... Please don t top post. Don t define gmail.com as a local domain!!!! Use virtual_alias_maps to direct user@gmail.com to a local address *instead of*
      Message 2 of 12 , Feb 1, 2010
        On 2/1/2010 12:55 PM, Michele Carandente wrote:
        > Hi Noel.
        > Thanks for the reply.
        > The problem is not when I receive emails(because I'll fetch it with a
        > perl script), but when I've to send email(relay to smtp.gmail.com) from
        > gmail.
        >
        > Any suggestions?



        Please don't top post.

        Don't define gmail.com as a local domain!!!!
        Use virtual_alias_maps to direct user@... to a local
        address *instead of* defining gmail.com as local.

        If that doesn't help, then your problem is unclear. Please
        provide 'postconf -n' output and logging of the problem, along
        with a description of what you expect to happen that doesn't.
        http://www.postfix.org/DEBUG_README.html#mail


        -- Noel Jones
      • Michele Carandente
        Hi Noel, I ll explain better my problem: I ve this mailserver under a slow dial-up connection. To fetch email from the main mailserver I use some Perl scripts,
        Message 3 of 12 , Feb 2, 2010
          Hi Noel,
          I'll explain better my problem:
          I've this mailserver under a slow dial-up connection.
          To fetch email from the main mailserver I use some Perl scripts, and
          they are working fine.
          I use postfix to queue the emails that needs to be send and then with
          the command "postqueue -i" I'll send the emails that I want(they will
          be relayed with smtp to the correspondent smtp server).

          In this mailserver I'll have most of the emails with a @...,
          but also few emails with @... or @...
          So if I add in mail_users the email user@... and so in
          mail_domains the gmail.com, everytime that from this mailserver I'll
          send an email to any @... email, postfix think that it's an
          internal email and try to delivery it as virtual(Recipient address
          rejected: User unknown in virtual mailbox table).

          To say to postfix which smtp server is related with the email, I've
          used sender_dependent_relayhost_maps.
          So the only issue that I've is just how to say to postfix which email
          is an internal one, based on the full email address and not based on
          just the domain.

          So I think that the alias in not helping me (but if I'm wrong please
          let me know :) ).

          Anyway, this is the output of postconf -n:
          alias_database = hash:/etc/aliases
          alias_maps = hash:/etc/aliases
          append_dot_mydomain = no
          biff = no
          broken_sasl_auth_clients = yes
          config_directory = /etc/postfix
          default_transport = hold
          defer_transports = hold
          html_directory = /usr/share/doc/postfix/html
          inet_interfaces = all
          inet_protocols = ipv4
          mailbox_size_limit = 0
          message_size_limit = 30720000
          mydestination = localhost, localhost.localdomain
          myhostname = hostname
          mynetworks = 127.0.0.0/8
          myorigin = /etc/mailname
          proxy_read_maps = $local_recipient_maps $mydestination
          $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps
          $virtual_mailbox_domains $relay_recipient_maps $relay_domains
          $canonical_maps $sender_canonical_maps $recipient_canonical_maps
          $relocated_maps $transport_maps $mynetworks
          $virtual_mailbox_limit_maps
          readme_directory = /usr/share/doc/postfix
          recipient_delimiter = +
          relay_domains = mysql:/etc/postfix/mysql-virtual_relaydomains.cf
          relay_recipient_maps = hash:/etc/postfix/relay_recipient
          relay_transport = virtual
          relayhost =
          sender_dependent_relayhost_maps = hash:/etc/postfix/bysenderrelay
          smtp_sasl_auth_enable = yes
          smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
          smtp_sasl_security_options = noanonymous
          smtp_sasl_tls_security_options = $smtp_sasl_security_options
          smtp_sasl_tls_verified_security_options = $smtp_sasl_security_options
          smtp_sasl_type = cyrus
          smtp_tls_CAfile = /etc/postfix/cacert.pem
          smtp_tls_cert_file = /etc/postfix/smtpd.cert
          smtp_tls_key_file = /etc/postfix/smtpd.key
          smtp_tls_loglevel = 2
          smtp_tls_scert_verifydepth = 5
          smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
          smtp_use_tls = yes
          smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
          smtpd_recipient_restrictions = permit_mynetworks,
          permit_sasl_authenticated, permit_auth_destination,
          reject_unauth_destination
          smtpd_sasl_auth_enable = yes
          smtpd_sasl_authenticated_header = yes
          smtpd_tls_CAfile = /etc/postfix/cacert.pem
          smtpd_tls_ask_ccert = yes
          smtpd_tls_auth_only = no
          smtpd_tls_cert_file = /etc/postfix/smtpd.cert
          smtpd_tls_key_file = /etc/postfix/smtpd.key
          smtpd_tls_loglevel = 1
          smtpd_tls_received_header = yes
          smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
          smtpd_use_tls = yes
          transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
          virtual_alias_domains =
          virtual_alias_maps =
          proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf,
          mysql:/etc/postfix/mysql-virtual_email2email.cf
          virtual_gid_maps = static:5000
          virtual_mailbox_base = /var/vmail
          virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
          virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
          virtual_uid_maps = static:5000

          Thanks a lot
          Michele
        • Stan Hoeppner
          ... Unrelated to your question, but... You say this machine is behind a dial up line? Ouch! You may want to seriously consider changing this to something
          Message 4 of 12 , Feb 2, 2010
            Michele Carandente put forth on 2/2/2010 3:57 AM:

            > message_size_limit = 30720000

            Unrelated to your question, but...

            You say this machine is behind a dial up line? Ouch! You may want to seriously
            consider changing this to something more sane like 262144. With a 56K modem
            averaging a real 45 Kb/s, it will take 47 seconds to transmit a single 256KB
            (262144 bytes) email. For 100 such messages it will take 78 minutes. If you
            allow 1MB (1048576 byte) messages, multiply transmission time by 4, which would
            be just over 5 hours for 100 messages of 1MB each.

            --
            Stan
          • Noel Jones
            ... Ah, I see. Do not add gmail.com or hotmail.com to your mail_domains. Only real local domains go there. To receive mail locally for you@gmail.com, add an
            Message 5 of 12 , Feb 2, 2010
              On 2/2/2010 3:57 AM, Michele Carandente wrote:
              > Hi Noel,
              > I'll explain better my problem:
              > I've this mailserver under a slow dial-up connection.
              > To fetch email from the main mailserver I use some Perl scripts, and
              > they are working fine.
              > I use postfix to queue the emails that needs to be send and then with
              > the command "postqueue -i" I'll send the emails that I want(they will
              > be relayed with smtp to the correspondent smtp server).
              >
              > In this mailserver I'll have most of the emails with a @...,
              > but also few emails with @... or @...
              > So if I add in mail_users the email user@... and so in
              > mail_domains the gmail.com, everytime that from this mailserver I'll
              > send an email to any @... email, postfix think that it's an
              > internal email and try to delivery it as virtual(Recipient address
              > rejected: User unknown in virtual mailbox table).

              Ah, I see.
              Do not add gmail.com or hotmail.com to your mail_domains.
              Only real local domains go there.

              To receive mail locally for you@..., add an entry to
              virtual_alias_maps (NOT! virtual_alias_domains) like
              you@... you@localhost


              >
              > To say to postfix which smtp server is related with the email, I've
              > used sender_dependent_relayhost_maps.
              > So the only issue that I've is just how to say to postfix which email
              > is an internal one, based on the full email address and not based on
              > just the domain.
              >
              > So I think that the alias in not helping me (but if I'm wrong please
              > let me know :) ).
              >
              > Anyway, this is the output of postconf -n:
              > mailbox_size_limit = 0
              > message_size_limit = 30720000

              That seems awfully generous for a dialup. In particular, you
              should put something for mailbox_size_limit.

              > relay_domains = mysql:/etc/postfix/mysql-virtual_relaydomains.cf
              > relay_recipient_maps = hash:/etc/postfix/relay_recipient
              > relay_transport = virtual

              This is wrong. The relay_* parameters are for relay domains.
              Don't abuse them by mixing in virtual domains.
              http://www.postfix.org/ADDRESS_CLASS_README.html

              > smtp_tls_loglevel = 2

              Using a TLS loglevel of 2 will give a lot of useless and
              confusing information. Use 1 or 0 unless you have some
              strange problem to track down and you understand what the
              detailed logs mean.

              > smtp_tls_scert_verifydepth = 5

              The default is 9, why do you change it?

              > smtpd_recipient_restrictions = permit_mynetworks,
              > permit_sasl_authenticated, permit_auth_destination,
              > reject_unauth_destination

              Eh? Remove the unneeded permit_auth_destination.

              > smtpd_tls_ask_ccert = yes

              It's wrong to set this to "yes" unless you are using
              certificate based relaying on a dedicated port. Some mailers
              will choke on this.

              > virtual_alias_maps =
              > proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf,
              > mysql:/etc/postfix/mysql-virtual_email2email.cf

              Add your "you@... you@localhost" entry to one of these
              virtual_alias_maps files.

              > virtual_gid_maps = static:5000
              > virtual_mailbox_base = /var/vmail
              > virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
              > virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
              > virtual_uid_maps = static:5000

              OK.

              >
              > Thanks a lot
              > Michele


              http://www.postfix.org/BASIC_CONFIGURATION_README.html
              http://www.postfix.org/SOHO_README.html
              http://www.postfix.org/STANDARD_CONFIGURATION_README.html
              http://www.postfix.org/VIRTUAL_README.html

              -- Noel Jones
            • Michele Carandente
              Hi Noel, Thanks for the corrections... anyway this solution doen t solve the problem that I have. Infact I fetch the email for all my accounts (included gmail
              Message 6 of 12 , Feb 2, 2010
                Hi Noel,
                Thanks for the corrections... anyway this solution doen't solve the
                problem that I have.
                Infact I fetch the email for all my accounts (included gmail and
                hotmail accounts) with some Perl POP3 scripts.

                I want to use Postfix just to send email(relay it) from a hold queue.

                Let me explain better the configuration:
                this mailserver is back on a dial-up connection.
                On this mailserver I've a @... and some emails from @gmail,
                @hotmail, etc...
                All the emails are not directly send to destination, but all are
                relayed to smtp servers.
                So @... are gonna be relayed to smtp.domain.com.
                However here is where it gets tricky, not all addresses for
                @... are used on this server. Some of them are hosted on
                smtp.domain.com. So user1@... might be valid on our server, but
                our smtp.domain.com server also has user2@... which our server
                is not aware off. So I basically want to relay all emails to
                @... which are NOT valid user mailboxes on our server via our
                second server (smtp.domain.com).
                I would also like to relay privat emails that needs to be sent from
                @...,@... etc to the relative smtp server. However I do
                not which to map these to the local domain.com domain. They should
                have seperate maildirs from the work related accounts.
                If for example I'll cancel 'gmail.com' from mail_domain, I'm able to
                relay without problem emails to smtp.gmail.com.
                The smtp server is decided in the file bysenderrelay, so that for
                every sender I've the correct smtp server.

                Is it more clear? Here is a example list of some users we have,

                Local server
                user1@...
                user2@...

                Internet server (smtp.domain.com)
                user1@...
                user2@...
                user3@...
                user4@...

                So to summerize, I want emails to user3@... to be relayed to
                smtp.domain.com and I want emails to user1@... to be delivered
                locally.

                My main.cf is very messy at the moment as I have tried loads of
                different configurations. Could you point me in the right direction to
                set this up as my above example?

                Thanks a lot for your help

                > To receive mail locally for you@..., add an entry to
                > virtual_alias_maps (NOT! virtual_alias_domains) like
                > you@...  you@localhost
              • Noel Jones
                ... Sorry, that s the only solution I have to offer. -- Noel Jones
                Message 7 of 12 , Feb 2, 2010
                  On 2/2/2010 11:11 AM, Michele Carandente wrote:
                  > Hi Noel,
                  > Thanks for the corrections... anyway this solution doen't solve the
                  > problem that I have.

                  Sorry, that's the only solution I have to offer.


                  -- Noel Jones

                  > Infact I fetch the email for all my accounts (included gmail and
                  > hotmail accounts) with some Perl POP3 scripts.
                  >
                  > I want to use Postfix just to send email(relay it) from a hold queue.
                  >
                  > Let me explain better the configuration:
                  > this mailserver is back on a dial-up connection.
                  > On this mailserver I've a @... and some emails from @gmail,
                  > @hotmail, etc...
                  > All the emails are not directly send to destination, but all are
                  > relayed to smtp servers.
                  > So @... are gonna be relayed to smtp.domain.com.
                  > However here is where it gets tricky, not all addresses for
                  > @... are used on this server. Some of them are hosted on
                  > smtp.domain.com. So user1@... might be valid on our server, but
                  > our smtp.domain.com server also has user2@... which our server
                  > is not aware off. So I basically want to relay all emails to
                  > @... which are NOT valid user mailboxes on our server via our
                  > second server (smtp.domain.com).
                  > I would also like to relay privat emails that needs to be sent from
                  > @...,@... etc to the relative smtp server. However I do
                  > not which to map these to the local domain.com domain. They should
                  > have seperate maildirs from the work related accounts.
                  > If for example I'll cancel 'gmail.com' from mail_domain, I'm able to
                  > relay without problem emails to smtp.gmail.com.
                  > The smtp server is decided in the file bysenderrelay, so that for
                  > every sender I've the correct smtp server.
                  >
                  > Is it more clear? Here is a example list of some users we have,
                  >
                  > Local server
                  > user1@...
                  > user2@...
                  >
                  > Internet server (smtp.domain.com)
                  > user1@...
                  > user2@...
                  > user3@...
                  > user4@...
                  >
                  > So to summerize, I want emails to user3@... to be relayed to
                  > smtp.domain.com and I want emails to user1@... to be delivered
                  > locally.
                  >
                  > My main.cf is very messy at the moment as I have tried loads of
                  > different configurations. Could you point me in the right direction to
                  > set this up as my above example?
                  >
                  > Thanks a lot for your help
                  >
                  >> To receive mail locally for you@..., add an entry to
                  >> virtual_alias_maps (NOT! virtual_alias_domains) like
                  >> you@... you@localhost
                • Seth Mattinen
                  ... UUCP? ;) ~Seth
                  Message 8 of 12 , Feb 2, 2010
                    On 2/2/10 10:05 AM, Noel Jones wrote:
                    > On 2/2/2010 11:11 AM, Michele Carandente wrote:
                    >> Hi Noel,
                    >> Thanks for the corrections... anyway this solution doen't solve the
                    >> problem that I have.
                    >
                    > Sorry, that's the only solution I have to offer.
                    >

                    UUCP? ;)

                    ~Seth
                  • Victor Duchovni
                    ... The OP is perhaps better off crafting his own solution, after reading the relevant documentation. To divert email from the default destination for the
                    Message 9 of 12 , Feb 2, 2010
                      On Tue, Feb 02, 2010 at 12:05:18PM -0600, Noel Jones wrote:

                      > On 2/2/2010 11:11 AM, Michele Carandente wrote:
                      >> Hi Noel,
                      >> Thanks for the corrections... anyway this solution doen't solve the
                      >> problem that I have.
                      >
                      > Sorry, that's the only solution I have to offer.

                      The OP is perhaps better off crafting his own solution, after reading
                      the relevant documentation.

                      To divert email from the default destination for the associated domain,
                      it is best to rewrite recipients into an alternate domain that can be
                      handled locally. Alternatively, one can use per-user transport-table
                      entries, but I would not encourage this approach.

                      One can with some care and sophistication use "fallback_transport"
                      and/or "luser_relay" to forward mail for local domains when there is no
                      corresponding local user, but these mechanisms are not robust in my view
                      and explicit rewriting is much better.

                      http://www.postfix.org/ADDRESS_REWRITING_README.html

                      --
                      Viktor.

                      P.S. Morgan Stanley is looking for a New York City based, Senior Unix
                      system/email administrator to architect and sustain our perimeter email
                      environment. If you are interested, please drop me a note.
                    • Michele Carandente
                      Hi to everybody. Thanks for the suggestions. It s look like I ve found what I was looking for... Basically I ve canceled the virtual_mailbox_domains , so that
                      Message 10 of 12 , Feb 3, 2010
                        Hi to everybody.
                        Thanks for the suggestions.

                        It's look like I've found what I was looking for...

                        Basically I've canceled the 'virtual_mailbox_domains', so that there
                        are no local domains.

                        All the internal emails are in 'transport_maps =
                        proxy:mysql:/etc/postfix/mysql-virtual_transports.cf', where in
                        mail_transport there all all the internal emails in a column and the
                        word 'virtual' in the other column.

                        If for some reason an internal email is not anymore internal, I'll
                        change 'virtual' with nothing and that email will be relayed as
                        external one...

                        I've tested this solution for all the afternoon and it's look like just fine...

                        Are some of you able to say if there is not a bad part on it that I can not see?

                        Thanks
                        Michele
                      Your message has been successfully submitted and would be delivered to recipients shortly.