---
name: "bulk_mailer"
section: "8"
platform: "linux"
package: "bulkmail"
version: "1.8-2"
release: "Debian 2.1 (Slink)"
platforms: ["linux"]
url: "https://new.carta.tech/bulk_mailer"
---

# bulk\_mailer(8)

assist in delivery of mail to large numbers of recipients

## NAME

bulk\_mailer - assist in delivery of mail to large numbers of recipients

## SYNOPSIS

**bulk\_mailer** \[-**comment** *comment*\] \[-**debugf**\] \[-**domain** *domainname*\] \[-**maxdomains** *maxdomains*\] \[-**maxsize** *maxsize*\] \[-**owner** *list-owner-address*\] \[-**precedence** *precedence-keyword*\] \[-**reply-to** *reply-address*\] \[+**reply-to** *reply-address*\] \[-**s**\] \[-**sendmail** *sendmail-flags*\] \[-**v**\] *envelope-from* *recipient-list-file*

## DESCRIPTION

*Bulk\_mailer* reads the message to be sent (with headers already attached) from stdin, sets *envelope* as the envelope return address for the mailing list, and delivers it to all recipient addresses listed one-per-line in *recipient-list-file*. It sorts the recipient list by reversed domain (so similar ones sort together), splits up the recipients into several groups containing no more than N domains each, creates an SMTP envelope for each group of recipients, and feeds that envelope to /usr/lib/sendmail -bs.

Splitting the envelopes up allows sendmail to perform delivery in parallel, so instead of having one large queue entry (for which sendmail might take awhile to get around to attempting delivery for some recipients), it has several smaller queue entries.  Depending on your point-of-view, this can still be considered cluttering up your mail queue, but it does seem to deliver messages more quickly to most recipients.

The core of this program was extracted from a somewhat strange mailing list manager called na-net; it was designed to efficiently send out mail to 5000 people at a time. I have used this program to attempt delivery of a message to over 12000 recipients around the world, within a few hours. I'm currently using bulk\_mailer as a back-end for several mailing lists of modest size. However, the program is not extensively tested, and may not work well in all environments. See BUGS below.

*Envelope\_from* is the envelope return address for the mailing list. This should either be the address of a human list maintainer, or  the address of a robot that tries to recognize bounced mail messages and grok it, forwarding anything it doesn't understand to a human.

*Recipient\_list\_file* is a filename of a list of recipients, one recipient per line. **Bulk\_mailer's** address prefrobnicator tries to understand several forms of address, e.g.:

```
Keith Moore <moore@cs.utk.edu>
moore@cs.utk.edu (Keith Moore)
"Keith Moore" <"keith.moore"@cs.utk.edu>  (Moore, Keith)
```

should all do the right thing.

## OPTIONS

- **-debug**

  Don't actually mail the stuff. instead, spit SMTP to stdout

- **-domain***domainname*

  Set the local domain name to *domainname*.\
    if not set, **bulk\_mailer** will try to figure out the name on its own. Note: This should be a fully-qualified domain name - not just the first component (aka the hostname). If the domain name doesn't have a '.' it's rejected.

- **-maxdomains***maxdomains*

  Set the maximum number of domains per envelope to *maxdomains*. If not explicitly set, 20 is the default.

- **-maxsize***maxsize*

  Reject any message larger than *maxsize* bytes.

- **-owner***list-owner-address*

  Set the list owner address.  If the message looks like a bounce, or if it contains \[un\]subscribe commands and the -s flag is set, the mail will be forwarded to this address instead of being distributed to the list.

- **-precedence***precedence-keyword*

  Add a Precedence: *precdence-keyword* header. *Precedence-keyword* should be a keyword recognized by sendmail. NOT RECOMMENDED.

  WARNING: some mailers will bounce the mail if they see a Precedence header with a keyword they don't understand; some list managers will silently drop the mail if they see a Precedence header with a keyword they do understand. There is NO safe value for the Precedence header that won't cause some  mailer to mishandle the message. This option is therefore not recommended.

- **-reply-to***reply-address*

  Add a Reply-to: *reply-address* header to the resent message if there wasn't one in the input.

  Use of the reply-to header by lists is questionable; see http://www.unicom.com/FAQ/reply-to-evil.html for some of the reasons why.

- **+reply-to***reply-address*

  Add a Reply-to: *reply-address* header to the resent message, overriding any reply-to header in the input. NOT RECOMMENDED.

  If having a list use reply-to is questionable,  overriding the sender's reply-to header is even worse. This option should be used only in very unusual cases.

- **-s**

  Check for "unsubscribe" or similar administrative requests in the Subject header field or the message body.  If found, do not deliver the message to the list recipients but forward it to  the list owner.

- **-sendmail***sendmail-flags*

  Add *sendmail-flags* to the sendmail command-line. For instance, -sendmail -Odq would have bulk\_mailer pass the -Odq flag to sendmail, which tells it: just queue the message, don't attempt to deliver it immediately.

- **-v**

  Be verbose.

To have bulk\_mailer distributed mail to a list, add the following lines to /etc/aliases:

```
{FOO}-request: whoever-maintains-foo
owner-{FOO}: whoever-maintains-foo
{FOO}: "|{BULK_MAILER} owner-{FOO}@{YOUR.DOMAIN} {ADDRESS_LIST}"
```

where {FOO} is the name of the list, {YOUR.DOMAIN} is your fully-qualified domain, {BULK\_MAILER} is a full path name of the bulk\_mailer program, and {ADDRESS\_LIST} is a full path name of the file containing the list of addresses.

## DIAGNOSTICS

## SEE ALSO

[sendmail(8)](/sendmail/8.md) The documentation in /usr/doc/bulkmail

## AUTHOR

Keith Moore, \<moore@cs.utk.edu\>

## BUGS

If your system has per-user process quotas, or a small number of process table entries, you will want to modify this program to recover gracefully.
