|
|
| |
BULK_MAILER(1) |
FreeBSD General Commands Manual |
BULK_MAILER(1) |
bulk_mailer - assist in delivery of mail to large numbers of recipients
bulk_mailer [-comment comment] [-debug]
[-domain domainname] [-list-archive
text] [-list-help text]
[-list-owner text]
[-list-post text]
[-list-unsubscribe text]
[-maxdomains maxdomains]
[-maxrcpts maxrcpts]
[-maxsize maxsize]
[-owner list-owner-address]
[-precedence precedence-keyword]
[-private] [-reply-to
reply-address] [+reply-to
reply-address] [-s]
[-sendmail sendmail-flags]
[-v ] envelope-from
recipient-list-file
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.
- -delete-list-hdrs
- Delete any List-* header fields that appear in the input. This option is
automatically set if any of the -list-* options are set.
- -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.
- -list-archive text
- Add a header of the form 'List-Archive: text'. This should contain
a URL pointing to a list archive, or a mailto: URL which, if sent a piece
of mail, will return instructions to access the list archive. The URL
should be surrounded by < and >. Read RFC 2369 before setting this
option.
- -list-help text
- Add a header of the form 'List-Help: text'. This should contain a
URL of a help file, or a mailto: URL which, if sent a piece of mail, will
cause the help file to be returned. The URL should be surrounded by <
and >. Read RFC 2369 before setting this option.
- -list-owner text
- Add a header of the form 'List-Owner: text'. This should contain
the mailto: URL of the list owner, surrounded by < and >. Read RFC
2369 before setting this option.
- -list-post text
- Add a header of the form 'List-Post: text'. This should contain
either the word "NO", or a URL giving the posting address for
the list. (Normally this will be a mailto: URL, but it might also be a web
page.) Read RFC 2369 before setting this option.
- -list-subscribe text
- Add a header of the form 'List-Subscribe: text'. This should
contain the URL (surrounded by < >) of a web page or mail server
that can be used to subscribe to the list. Read RFC 2369 before setting
this option.
- -list-unsubscribe text
- Add a header of the form 'List-Unsubscribe: text'. This should
contain the URL (surrounded by < >) of a web page or mail server
that can be used to unsubscribe to the list. Read RFC 2369 before setting
this option.
- -maxdomains maxdomains
- Set the maximum number of domains per envelope to maxdomains. If
not explicitly set, 20 is the default.
- -maxrcpts maxrcpts
- Set the maximum number of recipients per envelope to maxrcpts. If
not explicitly set, 100 is the default. This is used to work around a bug
in RFC 821 (and in many MTAs) where a permanent error code is returned
when the number of recipients in an SMTP session exceeds some pre-set
limit.
- -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.
- -private
- If this flag is set, and the address in the From header field does not
match the address of one of the list subscribers (or if there is no From
header field), print an error message to stderr and return a EX_NOPERM
exit code. If bulk_mailer was called from sendmail, this exit code will
cause a nondelivery report to be returned to the author.
- -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.
sendmail(8)
G. Neufeld, J. Baer. The Use of URLs as Meta-Syntax for Core Mail List
Commands and their Transport through Message Header Fields. RFC 2369, July
1998.
Keith Moore, <moore@cs.utk.edu>
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 when these
are exhausted.
The -private flag currently has a number of shortcomings. It
always bounces the message if the author is not a list subscriber (there's
no provision for a moderator), the error message text is hard-coded into the
program, there's no provision for a separate list of people who are allowed
to post even though they are not list subscribers, and the address matching
algorithm only does exact (case-insensitive) matching - it doesn't take
sub-addresses, or sub-domains, into account.
Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc. |