NAME

mail - implementation of Berkeley mail(1)

SYNOPSIS

mail [-f mailbox]

mail [-s subject] [-c cc-addrs] [-b bcc-addrs] to-addr [..toaddr..]

DESCRIPTION

When called without command-line options (except -f) mail allows the user to interactively send mail, and manage a mail folder. Otherwise, mail allows the user to send outgoing E-mail to recipients.

When run interactively, the mail folder ~/mbox is used. If the home directory cannot be determined, ./mbox is assumed. This can be overridden with the -f option.

OPTIONS

mail accepts the following options

-f mailbox

Specifies a mail folder to use.

-s subject

Specify a subject for the mail message.

-c cc-addrs

A comma-separated list of addresses to be copied to on the mail message.

-b bcc-addrs

A comma-separated list of addresses to be copied to on the mail message, without appearing in the headers.

to-addr

E-Mail destination addresses. You may not be notified if mail fails to deliver to the address properly.

COMMANDS

In the list below, "msg" indicates a message list. Acceptable values are comma or space separated lists, ranges (i.e. 1-5) or single digits. Special values are "$" (end of list) and * (all messages). If messages are unspecified, the current message is used. "path" indicates a filename argument. "addr" indicates a mail message address list (comma or space separated).

number

Read message number.

!command

Execute the "command" with the command interpreter.

copy msg path

Copy indicated messages (msg) to filename at path. co is an alias for this command.

delete msg

Delete indicated messages. d is an alias for this command.

exit

Exit the mail program saving no changes to the mailbox. x is an alias for this command.

from msg

Display the headers from the specified messages. f is an alias for this command.

headers msg

Display a brief list of headers from the messages. h is an alias for this command.

hold msg

Mark messages as unread. ho,preserve are aliases for this command.

mail addr

Send a mail message to addr. m is an alias for this command.

next

Print the next message in sequence. n is an alias for this command.

Print the specified mail message. p,CR are aliases for this command.

quit

Exit the mail program. The (possibly) edited mailbox is re-written to its original file. See Bugs. q is an alias for this command.

reply msg

Reply to the original sender of msg. r is an alias for this command.

Reply msg

Reply to the original sender, and all visible recipients of msg. R is an alias for this command.

save msg path

Save msg into the file specified at path. If the file exists, it is appended. s is an alias for this command.

shell

Start an interactive bourne shell. (This does not work under Win32). sh is an alias for this command.

top

Display the first few lines of the current mail message.

undelete msg

Mark as undeleted any specified mail messages. u is an alias for this command.

unread msg

Mark as unread any specified mail messages. U is an alias for this command.

visal msg

Invoke the visual editor (specified in $VISUAL, or /usr/bin/vi) on the indicated messages. Re-read those messages in afer the editing session. v is an alias for this command.

write msg path

Write the bodies of the indicated messages to path. w is an alias for this command.

EDITING COMMANDS

When sending a mail message (commands mail, reply or Reply) a primitive line-mode editor is used to get the body of the mail message, and possibly change any header options. During the editing session, special commands may be used when typed at the beginning of the line.

To send the message, send an EOF character or a "." on a line by itself.

~ssubject

Change message subject to subject.

~q

Quit the message editor. No changes are made, no message is sent.

~caddr[,addr...]

Add the addrs to the CC list for the message

~baddr[,addr...]

Add the addrs to the BCC list for the message

~taddr[,addr...]

Add the addrs to the To: list for the message

~mmsg

Read the specified messages into the current message at the end.

~fmsg

Read the specified messages into the current message at the end, indenting each line with the sequence "> ".

~rfile

Read the contents of file into the message.

~v

Invoke the visual editor on the message. When the user is done editing the message, read the message back in, and continue editing at the end.

BUGS

Numerous. Mostly lack of refinement in the implementation, any of which can be fixed without hassle, I'm sure.

  • Many (many, many..) features left unimplemented. Command-line, commands and editing functions have all been decimated. I only implemented what I thought was useful. BSD mail had many years to develop its many tentacles. I don't have that kind of patience.

  • Keeping track of the "current" message in the mail folder is sloppy.

  • Screen length is assumed to be 23 characters. Width is 79.

  • Argument parsing doesn't ensure sane (and legal) combinations.

  • There is no file locking. Of anything. You wanna re-write the mailbox and there's local delivery going on? Fine. Have fun. mail will refuse to write back a mailbox whose size has changed however...

  • mail doesn't act as a Local Delivery Agent.

  • mail's method of picking through mail message headers to find from, to and cc addresses violates several FAQ's, RFC's, and is void where prohibited. Also easy to fix, I simply ran out of patience. See the _extract method in the message class if you're adventuresome.

  • To perform delivery, mail searches for $USER or $LOGNAME in your environment to see who you are (for a From address). It then searches for an SMTP agent on localhost. Not finding that, it wants $RELAYHOST set to your SMTP relaying host name. Your reply address is taken from $REPLYADDR or your system's environment. Whichever is easier. Win32 systems, be prepared to setup your environment properly for this to work!

  • ...speaking of SMTP... mail talks directly to SMTP instead of using a more sane method like Mail::Mailer. This was done so that PPT mail(1) could remain "pure" and un-encumbered by external modules.

  • This code is not "use strict" safe. Although there's not much keeping it from being "use strict" safe. Use of package-based variables will probably get me thumped from Tom.

AUTHOR

The Perl implementation of mail was written by Clinton Pierce, clintp@geeksalad.org.

COPYRIGHT and LICENSE

This program is Copyright 1999, by Clinton Pierce.

Freely redistributable under the Perl Artistic License.