---
name: "mail.local"
section: "8"
platform: "openbsd"
package: "man"
version: "8.0-current-20261101"
release: "OpenBSD 8.0-current (2026-11-01)"
platforms: ["linux", "freebsd", "openbsd"]
url: "https://new.carta.tech/mail.local/8"
---

# mail.local(8)

store mail in a mailbox

## NAME

**mail.local** – store mail in a mailbox

## SYNOPSIS

**mail.local** \[**-Ll**\] \[**-f** *from*\] *user* *...*

## DESCRIPTION

**mail.local** reads the standard input up to an end-of-file and appends it to each *user*'s *mail* file. The *user* must be a valid user name.

The options are as follows:

- **-f** *from*

  Specify the sender's name.

- **-L**

  Don't create a *username.lock* file while locking the spool.

- **-l**

  For compatibility, request that files named *username.lock* be used for locking. (This is the default behavior.)

Individual mail messages in the mailbox are delimited by an empty line followed by a line beginning with the string “From ”. A line containing the string “From ”, the sender's name and a timestamp is prepended to each delivered mail message. A blank line is appended to each message. A greater-than character (‘\>’) is prepended to any line in the message which could be mistaken for a “From ” delimiter line.

Significant effort has been made to ensure that **mail.local** acts as securely as possible. It will only deliver to a mail spool directory that is not world-writable. The default mode of */var/mail* on OpenBSD is 755, which prevents non-root processes from creating mail spool files. The MTA is expected to either create the mail spool file itself, or call **mail.local** as root.

The mailbox is always locked using [flock(2)](/flock/2.md) while mail is appended. Unless the **-L** flag is specified, a *username.lock* file is also used.

If the [biff(1)](/biff/1.md) service is returned by [getservbyname(3)](/getservbyname/3.md), the biff server is notified of delivered mail.

## ENVIRONMENT

- TZ

  Used to set the appropriate time zone on the timestamp.

## FILES

- */tmp/local.XXXXXXXXXX*

  temporary files

- */var/mail/user*

  user's mailbox directory

## EXIT STATUS

The **mail.local** utility exits 0 on success, and \>0 if an error occurs.

## SEE ALSO

[biff(1)](/biff/1.md), [mail(1)](/mail/1.md), [flock(2)](/flock/2.md), [getservbyname(3)](/getservbyname/3.md), [comsat(8)](/comsat/8.md), [smtpd(8)](/smtpd/8.md)

## HISTORY

A superset of **mail.local** (handling mailbox reading as well as mail delivery) appeared in Version 7 AT&T UNIX as the program [mail(1)](/mail/1.md).

## BUGS

Using quotas in */var/mail* can be problematic if using [sendmail(8)](/sendmail/8.md) as an MTA, since it asks **mail.local** to deliver a message to multiple recipients if possible. This causes problems in a quota environment since a message may be delivered to some users but not others due to disk quotas. Even though the message was delivered to some of the recipients, **mail.local** will exit with an exit code \> 0, causing [sendmail(8)](/sendmail/8.md) to attempt redelivery later. That means that some users will keep getting the same message every time [sendmail(8)](/sendmail/8.md) runs its queue. This problem does not exist for [smtpd(8)](/smtpd/8.md) users.

If you are running [sendmail(8)](/sendmail/8.md) and have disk quotas on */var/mail*, it is imperative that you unset the “m” mailer flag for the ‘local’ mailer. To do this, locate the line beginning with “Mlocal” in */etc/mail/sendmail.cf* and remove the “m” from the flags section, denoted by “F=”. Alternately, you can override the default mailer flags by adding the line:

```
define(`LOCAL_MAILER_FLAGS', `rn9S')dnl
```

to your “.mc” file (this is the source file that is used to generate */etc/mail/sendmail.cf*).
