Podręcznik FreeBSD
Poprzedni | Rozdział 24. Electronic Mail | Następny

# 24.5. Troubleshooting

24.5.1. Why do I have to use the FQDN for hosts on my site?
24.5.2. sendmail says `mail loops back to myself`
24.5.3. How can I run a mail server on a dial-up PPP host?
24.5.4. Why do I keep getting `Relaying Denied` errors when sending mail from other hosts?

24.5.1. Why do I have to use the FQDN for hosts on my site?

You will probably find that the host is actually in a different domain; for example, if you are in `foo.bar.edu` and you wish to reach a host called `mumble` in the `bar.edu` domain, you will have to refer to it by the fully-qualified domain name, `mumble.bar.edu`, instead of just `mumble`.

Traditionally, this was allowed by BSD BIND resolvers. However the current version of BIND that ships with FreeBSD no longer provides default abbreviations for non-fully qualified domain names other than the domain you are in. So an unqualified host `mumble` must either be found as `mumble.foo.bar.edu`, or it will be searched for in the root domain.

This is different from the previous behavior, where the search continued across `mumble.bar.edu`, and `mumble.edu`. Have a look at RFC 1535 for why this was considered bad practice, or even a security hole.

As a good workaround, you can place the line:

    search foo.bar.edu bar.edu

instead of the previous:

    domain foo.bar.edu

into your `/etc/resolv.conf`. However, make sure that the search order does not go beyond the boundary between local and public administration, as RFC 1535 calls it.

24.5.2. sendmail says `mail loops back to myself`

This is answered in the sendmail FAQ as follows:

    I'm getting these error messages:

    553 MX list for domain.net points back to relay.domain.net
    554 <user@domain.net>... Local configuration error

    How can I solve this problem?

    You have asked mail to the domain (e.g., domain.net) to be
    forwarded to a specific host (in this case, relay.domain.net)
    by using an MX record, but the relay machine does not recognize
    itself as domain.net. Add domain.net to /etc/mail/local-host-names
    [known as /etc/sendmail.cw prior to version 8.10]
    (if you are using FEATURE(use_cw_file)) or add Cw domain.net
    to /etc/mail/sendmail.cf.

The sendmail FAQ can be found at http://www.sendmail.org/faq/ and is recommended reading if you want to do any tweaking of your mail setup.

24.5.3. How can I run a mail server on a dial-up PPP host?

You want to connect a FreeBSD box on a LAN to the Internet. The FreeBSD box will be a mail gateway for the LAN. The PPP connection is non-dedicated.

There are at least two ways to do this. One way is to use UUCP.

Another way is to get a full-time Internet server to provide secondary MX services for your domain. For example, if your company's domain is `example.com` and your Internet service provider has set `example.net` up to provide secondary MX services to your domain:

    example.com.          MX        10      example.com.
                          MX        20      example.net.

Only one host should be specified as the final recipient (add `Cw example.com` in `/etc/mail/sendmail.cf` on `example.com`).

When the sending `sendmail` is trying to deliver the mail it will try to connect to you (`example.com`) over the modem link. It will most likely time out because you are not online. The program sendmail will automatically deliver it to the secondary MX site, i.e. your Internet provider (`example.net`). The secondary MX site will then periodically try to connect to your host and deliver the mail to the primary MX host (`example.com`).

You might want to use something like this as a login script:

    #!/bin/sh
    # Put me in /usr/local/bin/pppmyisp
    ( sleep 60 ; /usr/sbin/sendmail -q ) &
    /usr/sbin/ppp -direct pppmyisp

If you are going to create a separate login script for a user you could use `sendmail -qRexample.com` instead in the script above. This will force all mail in your queue for `example.com` to be processed immediately.

A further refinement of the situation is as follows:

Message stolen from the FreeBSD Internet service provider's mailing list.

    > we provide the secondary MX for a customer. The customer connects to
    > our services several times a day automatically to get the mails to
    > his primary MX (We do not call his site when a mail for his domains
    > arrived). Our sendmail sends the mailqueue every 30 minutes. At the
    > moment he has to stay 30 minutes online to be sure that all mail is
    > gone to the primary MX.
    >
    > Is there a command that would initiate sendmail to send all the mails
    > now? The user has not root-privileges on our machine of course.

    In the privacy flags section of sendmail.cf, there is a
    definition Opgoaway,restrictqrun

    Remove restrictqrun to allow non-root users to start the queue processing.
    You might also like to rearrange the MXs. We are the 1st MX for our
    customers like this, and we have defined:

    # If we are the best MX for a host, try directly instead of generating
    # local config error.
    OwTrue

    That way a remote site will deliver straight to you, without trying
    the customer connection.  You then send to your customer.  Only works for
    hosts, so you need to get your customer to name their mail
    machine customer.com as well as
    hostname.customer.com in the DNS.  Just put an A record in
    the DNS for customer.com.

24.5.4. Why do I keep getting `Relaying Denied` errors when sending mail from other hosts?

In default FreeBSD installations, sendmail is configured to only send mail from the host it is running on. For example, if a POP server is available, then users will be able to check mail from school, work, or other remote locations but they still will not be able to send outgoing emails from outside locations. Typically, a few moments after the attempt, an email will be sent from MAILER-DAEMON with a `5.7 Relaying Denied` error message.

There are several ways to get around this. The most straightforward solution is to put your ISP's address in a relay-domains file at `/etc/mail/relay-domains`. A quick way to do this would be:

    # echo "your.isp.example.com" > /etc/mail/relay-domains

After creating or editing this file you must restart sendmail. This works great if you are a server administrator and do not wish to send mail locally, or would like to use a point and click client/system on another machine or even another ISP. It is also very useful if you only have one or two email accounts set up. If there is a large number of addresses to add, you can simply open this file in your favorite text editor and then add the domains, one per line:

    your.isp.example.com
    other.isp.example.net
    users-isp.example.org
    www.example.org

Now any mail sent through your system, by any host in this list (provided the user has an account on your system), will succeed. This is a very nice way to allow users to send mail from your system remotely without allowing people to send SPAM through your system.

Poprzedni | Spis treści | Następny
Changing Your Mail Transfer Agent | Początek rozdziału | Advanced Topics

Ten i inne dokumenty można pobrać z ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

W przypadku pytań o FreeBSD prosimy przeczytać dostępną dokumentację przed kontaktem z <questions@FreeBSD.org>.
W sprawie zapytań o tę dokumentację prosimy o kontakt z <doc@FreeBSD.org>.