Commit 1a5381e0 authored by Thomas Roessler's avatar Thomas Roessler

Initial revision

This diff is collapsed.
Copyright (C) 1996-8 Michael R. Elkins <[email protected]>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
This diff is collapsed.
Changes since 0.92.7
- [patch-0.92.7.handler.empty_cc_bcc.1] fixed bug in edit_envelope() which
caused the message to be aborted if the cc or bcc field was empty
- buffer used to store the error message in mutt_pattern_comp() called
sizeof() on the wrong variable
- renamed $header_format to $index_format ($hdr_format is still accepted)
- [patch-0.92.7.vikas.postpone.1] fixed typo for binding the `postpone'
menu, and changes the menu to use $index_format for display of postponed
- mutt_error() is now a function pointer which either has the value of
mutt_curses_error() or mutt_nocurses_error() which simplifies the muttrc
parsing code
- "source '~/bin/myscript|'" was fixed so that it works correctly
- [] fixed bug where syncing mh mailboxes silently
- [] fixes bug with mismatched backtics in the
pattern language
- mutt_default_from() no longer sets the "real name" portion of the return
address so that it can be delayed until after execution of send-hook
PGP-related changes since 0.92.6i
- [patch-0.92.6i.tlr.pgp_longids.1] Correct the
calculation of 64 bit "v4" key IDs.
Supported platforms
Mutt has been reported to compile and run under the following Unix operating
Data General Unix (DG/UX)
Digital Unix (OSF/1)
Atari MiNT
- An ANSI C compiler (such as gcc) is required.
- You must also have a SysV compatible curses library, or you must
install either
GNU ncurses,
Installing Mutt is rather painless through the use of the GNU autoconf
package. Simply untar the Mutt distribution, and run the ``configure''
script. In most cases, it will automatically determine everything it needs
to know in order to compile. However, there are a few options to
``configure'' to help it out, or change the default behavior:
install Mutt in DIR instead of /usr/local
specify where to put architecture independent data files
use the curses lib in DIR/lib. If you have ncurses, ``configure''
will automatically look in /usr/include/ncurses for the include
use the S-Lang library instead of ncurses. This library seems to
work better for some people because it is less picky about proper
termcap entries than ncurses. It is recommended that you use at
*least* version 0.99-38 with Mutt.
specify where the spool mailboxes are located on your system
treat file in the user's home directory as the spool mailbox. Note
that this is *not* the full pathname, but relative to the user's
home directory. Defaults to "mailbox" if FILE is not specified.
enable POP3 support
local hostname is not part of the FQDN.
use GNU rx instead of local regexp routines. Many systems don't
have the POSIX compliant regcomp/regexec/regfree routines, so this
provides a way to support them.
use flock() to lock files
by default, Mutt uses fcntl() to lock files. Over NFS this can
result in poor performance on read/write. Note that using this
option could be dangerous if dotlocking is also disabled
some implementations of NFS do not always write the
atime/mtime of small files. This means that Mutt's ``mailboxes''
feature does not always work properly, as it uses these
attributes to work out whether the file has new mail. This
option enables a workaround to this bug.
on some systems, the result of isprint() can't be used reliably
to decide which characters are printable, even if you set the
LANG environment variable. If you set this option, Mutt will
assume all characters in the ISO-8859-* range are printable. If
you leave it unset, Mutt will attempt to use isprint() if either
of the environment variables LANG, LC_ALL or LC_CTYPE is set,
and will revert to the ISO-8859-* range if they aren't.
on some versions of unix, /bin/sh has a bug that makes using emacs
with mutt very difficult. If you have the problem that whenever
you press control-G in emacs, mutt and emacs become very confused,
you may want to try using a Bourne-derived shell other than
/bin/sh here. Some shells that may work are bash, zsh, and ksh.
C shells such as csh and tcsh will amost certainly not work right.
Note that this option is unrelated to what shell mutt gives you
when you press '!'. Only use this option to solve the above problem,
and only specify one of the above shells as its argument.
By default, Mutt will rewrite all addresses in the form
Personal Name <[email protected]>
regardless of the input. By enabling this option, Mutt will write
addresses in the same form they are parsed. NOTE: this requires
significantly more memory
Once ``configure'' has completed, simply type ``make install.''
Mutt should compile cleanly (without errors) and you should end up with a
binary called ``mutt.'' If you get errors about undefined symbols like
A_NORMAL or KEY_MIN, then you probably don't have a SysV compliant curses
library. You should install either ncurses or S-Lang (see above), and then
run the ``configure'' script again.
Platform Notes
Solaris 2.4
The system regcomp() and regexec() routines are very badly broken.
So much so that using them will cause Mutt to be totally unusable.
The --with-rx option to `configure' should always be used. (Note:
the problems have apparently been fixed in Solaris 2.5)
Color does not work right with Solaris curses. You will have to
compile with either ncurses or slang to get working color support.
# Copyright (C) 1996,1997 Michael R. Elkins <[email protected]>
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
VERSION=@[email protected]
prefix=@[email protected]
exec_prefix=@[email protected]
bindir=@[email protected]
libdir=@[email protected]
mandir=@[email protected]
sharedir=@[email protected]
srcdir=@[email protected]
VPATH=@[email protected]
@[email protected]
INSTALL=@[email protected]
CC=@[email protected]
XCPPFLAGS=-I. @[email protected]
CFLAGS=@[email protected] -DSHAREDIR=\"$(sharedir)\" $(XCPPFLAGS)
LDFLAGS=@[email protected]
LIBS=@[email protected]
OPS=@[email protected]
OBJS= addrbook.o alias.o attach.o browser.o buffy.o color.o \
commands.o complete.o compose.o copy.o curs_lib.o curs_main.o date.o \
edit.o enter.o flags.o init.o filter.o from.o getdomain.o \
handler.o hash.o hdrline.o headers.o help.o hook.o keymap.o lib.o \
main.o mbox.o menu.o mh.o mx.o pager.o parse.o pattern.o \
postpone.o query.o recvattach.o rfc822.o \
rfc1524.o rfc2047.o score.o send.o sendlib.o signal.o sort.o \
status.o system.o thread.o @[email protected]
CLEANFILES=mutt *.o core
VERYCLEANFILES=$(CLEANFILES) Makefile config.cache config.log \
config.status config.h
DISTCLEANFILES=$(VERYCLEANFILES) tags keymap_defs.h *.rej *.orig *~ Makefile.bak
# kill these files when making new export distributions
NONEXPORT=pgp.c pgp.h pgpinvoke.c pgpkey.c pgppubring.c sha.h sha1dgst.c \
sha_locl.h OPS.PGP doc/pgp-Notes.txt doc/language.txt \
all: mutt
mutt: keymap_defs.h $(OBJS) $(REGEX)
$(CC) -o mutt $(OBJS) $(REGEX) $(LDFLAGS) $(LIBS)
keymap_defs.h: Makefile $(OPS)
rm -f keymap_defs.h
$(srcdir)/gen_defs $(OPS) > keymap_defs.h
install: mutt
$(srcdir)/mkinstalldirs $(bindir)
-mv -f $(bindir)/mutt $(bindir)/mutt.old
$(INSTALL) @[email protected] -m @[email protected] mutt $(bindir)
$(srcdir)/mkinstalldirs $(mandir)/man1
$(INSTALL) -m 644 $(srcdir)/doc/ $(mandir)/man1/mutt.1
-if [ ! -f $(sharedir)/Muttrc ]; then \
$(srcdir)/mkinstalldirs $(sharedir); \
$(INSTALL) -m 644 $(srcdir)/Muttrc $(sharedir); \
-if [ ! -f $(sharedir)/mime.types ]; then \
$(INSTALL) -m 644 $(srcdir)/mime.types $(sharedir); \
rm -f $(bindir)/mutt $(sharedir)/Muttrc $(mandir)/man1/mutt.1
$(srcdir)/configure: $(srcdir)/
Makefile: $(srcdir)/
./config.status $(srcdir)/acconfig.h
config.h: $(srcdir)/
(cd $(srcdir) && ctags *.[ch])
dep: Makefile
mv Makefile Makefile.bak
awk -f $(srcdir)/depend.awk < Makefile.bak > Makefile
echo '# DO NOT REMOVE THIS LINE' >> Makefile
$(CC) -MM $(XCPPFLAGS) $(srcdir)/*.c >> Makefile
(cd $(srcdir) && rm -f $(CLEANFILES))
(cd $(srcdir)/doc && $(MAKE) [email protected])
(cd $(srcdir) && rm -f $(DISTCLEANFILES))
(cd $(srcdir)/doc && $(MAKE) [email protected])
rm -f $(srcdir)/reldate.h
echo 'const char *ReleaseDate = "'`date +%Y-%m-%d`'";' > $(srcdir)/reldate.h
# make export version
usdist: distclean reldate
rm -rf /tmp/mutt-$(VERSION)
(cd .. && cp -r mutt-$(VERSION) /tmp)
for i in `grep _PGPPATH $(srcdir)/*.[ch] | sed 's/^\([^:]*\).*/\1/' | grep -v '/main\.c' | grep -v '/pgp'` ; do \
target=`basename $$i` ; \
$(srcdir)/ _PGPPATH < $(srcdir)/$$target > /tmp/mutt-$(VERSION)/$$target; \
for i in $(NONEXPORT); do \
rm -f /tmp/mutt-$(VERSION)/$$i; \
(cd /tmp && tar cvf mutt-$(VERSION).tar mutt-$(VERSION) && gzip mutt-$(VERSION).tar)
rm -rf /tmp/mutt-$(VERSION)
# make international distribution
dist: distclean reldate
(cd $(srcdir)/.. && tar cfz mutt-$(VERSION)i.tar.gz mutt-$(VERSION)i)
(cd rx && $(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)")
# Key bindings similar to those of MUSH
bind index . display-message
bind index t display-message
macro index n j\n
bind index + next-message
bind index j next-message
bind index J next-message
bind index - previous-message
bind index k previous-message
bind index K previous-message
bind index { top-page
bind index } bottom-page
bind index f change-folder
bind index \cu sync-mailbox
bind index * flag-message
# System configuration file for Mutt
# default list of header fields to weed when displaying
ignore "from " received content- mime-version status x-status message-id
ignore sender references return-path lines
# imitate the old search-body function
macro index \eb '/~b '
# simluate the old url menu
macro index \cb |urlview\n
macro pager \cb |urlview\n
# If Mutt is unable to determine your sites domain name correctly, you can
# set the default here.
# set
# If your sendmail supports the -B8BITMIME flag, enable the following
# set use_8bitmime
Announcing Mutt 0.91
NOTE: PLEASE read the following list of changes carefully, especially the
first couple entries related to changes in variables/commands and see the
manual before posting questions. Taking a little time to read this notice
will significantly reduce the amount of confusion as to why some things
might seem broken at first.
Major changes since 0.89.1:
- The matching for the send-hook, save-hook and fcc-hook commands has been
extended so that it understands Mutt's matching language (used for
searching and limits). You may still use a "simple" regular expression,
but Mutt will expand that with the value of $default_hook (similar to
$simple_search). Additionally, all hooks are now executed in the order
they appear in your .muttrc instead of first doing `to', then `cc'.
- new config command `score' which allows you to assign a numerical value to
a message based upon header information (similar to scoring in slrn). the
score can be displed in $hdr_format with %N, you can sort by `score' and
you can match messages with a certain score (or range) with the `~n'
- new variable $beep_new which causes Mutt to beep when new mail is
delivered to a mailbox specified by the `mailboxes' command
- new sort method `to' for sorting by who messages are addressed to
- new variable $meta_key which causes Mutt to interpet keystrokes with the
hi bit set as ESC plus the key with the hi bit stripped (eg. ALT-x will
get interpetted as "\ex")
- new variable $sort_alias which controls the order the aliases appear in
the menu (may be either "alias" or "address")
- new variable $alias_format to control the way the aliases are displayed in
the alias menu
- additional operators to the pattern matching lanauge:
~S superseded messages
~E expired messages
~p personal mail (finds $alternates in to: or cc:)
~P mail from you (finds $alternates in from: or sender:)
~l list mail (finds `lists' in to: or cc:)
~L<pattern> finds <pattern> in to:, cc:, from: or sender:
~C<pattern> finds <pattern> in to: or cc:
- additional formats for $hdr_format
%N displays the message score
%(fmt) displayes the message's received time using strftime()
- additional formats for $status_format
%P percentage of menu seen
%S current value of $sort_aux (%s no longer displays $sort_aux)
%o number of old messages
%u number of unread messages
- new configure option `--enable-exact-address' which causes Mutt to rewrite
addresses in the same format they were parsed instead of rewriting them in
the form `Name <[email protected]>'
- new command line argument `-e' which allows you to specify configuration
commands to be executed *after* your .muttrc is parsed
(eg. mutt -e 'set edit_hdrs' mutt-dev)
- you can now use `mono <object> normal' to set to normal attribute
- new function `search-opposite' which searches for the current search
pattern in the opposition direction from the previous search
Mutt's primary distribution point is
See the Mutt Home Page ( for mirror sites.
Bug reports should be sent to the Mutt User's Mailing List
<mutt-u[email protected]>.
Michael Elkins <[email protected]>
April 10, 1998
OP_NULL "null operation"
OP_ATTACH_VIEW_MAILCAP "force viewing of attachment using mailcap"
OP_ATTACH_VIEW_TEXT "view attachment as text"
OP_BOTTOM_PAGE "move to the bottom of the page"
OP_BOUNCE_MESSAGE "remail a message to another user"
OP_BROWSER_NEW_FILE "select a new file in this directory"
OP_CHANGE_DIRECTORY "change directories"
OP_CHECK_NEW "check mailboxes for new mail"
OP_COMPOSE_ATTACH_FILE "attach a file(s) to this message"
OP_COMPOSE_EDIT_BCC "edit the BCC list"
OP_COMPOSE_EDIT_CC "edit the CC list"
OP_COMPOSE_EDIT_DESCRIPTION "edit attachment description"
OP_COMPOSE_EDIT_ENCODING "edit attachment transfer-encoding"
OP_COMPOSE_EDIT_FCC "enter a file to save a copy of this message in"
OP_COMPOSE_EDIT_FILE "edit the file to be attached"
OP_COMPOSE_EDIT_FROM "edit the from field"
OP_COMPOSE_EDIT_HEADERS "edit the message with headers"
OP_COMPOSE_EDIT_MESSAGE "edit the message"
OP_COMPOSE_EDIT_MIME "edit attachment using mailcap entry"
OP_COMPOSE_EDIT_REPLY_TO "edit the Reply-To field"
OP_COMPOSE_EDIT_SUBJECT "edit the subject of this message"
OP_COMPOSE_EDIT_TO "edit the TO list"
OP_COMPOSE_EDIT_TYPE "edit attachment type"
OP_COMPOSE_ISPELL "run ispell on the message"
OP_COMPOSE_NEW_MIME "compose new attachment using mailcap entry"
OP_COMPOSE_POSTPONE_MESSAGE "save this message to send later"
OP_COMPOSE_RENAME_FILE "rename/move an attached file"
OP_COMPOSE_SEND_MESSAGE "send the message"
OP_COMPOSE_TOGGLE_UNLINK "toggle whether to delete file after sending it"
OP_COPY_MESSAGE "copy a message to a file/mailbox"
OP_CREATE_ALIAS "create an alias from a message sender"
OP_CURRENT_BOTTOM "move entry to bottom of screen"
OP_CURRENT_MIDDLE "move entry to middle of screen"
OP_CURRENT_TOP "move entry to top of screen"
OP_DECODE_COPY "make decoded (text/plain) copy"
OP_DECODE_SAVE "make decoded copy (text/plain) and delete"
OP_DELETE "delete the current entry"
OP_DELETE_SUBTHREAD "delete all messages in subthread"
OP_DELETE_THREAD "delete all messages in thread"
OP_DISPLAY_ADDRESS "display full address of sender"
OP_DISPLAY_HEADERS "display message with full headers"
OP_DISPLAY_MESSAGE "display a message"
OP_EDITOR_BACKSPACE "delete the char in front of the cursor"
OP_EDITOR_BACKWARD_CHAR "move the cursor one character to the left"
OP_EDITOR_BOL "jump to the beginning of the line"
OP_EDITOR_BUFFY_CYCLE "cycle among incoming mailboxes"
OP_EDITOR_COMPLETE "complete filename or alias"
OP_EDITOR_COMPLETE_QUERY "complete address with query"
OP_EDITOR_DELETE_CHAR "delete the char under the cursor"
OP_EDITOR_EOL "jump to the end of the line"
OP_EDITOR_FORWARD_CHAR "move the cursor one character to the right"
OP_EDITOR_HISTORY_DOWN "scroll up through the history list"
OP_EDITOR_HISTORY_UP "scroll up through the history list"
OP_EDITOR_KILL_EOL "delete chars from cursor to end of line"
OP_EDITOR_KILL_LINE "delete all chars on the line"
OP_EDITOR_KILL_WORD "delete the word in front of the cursor"
OP_EDITOR_QUOTE_CHAR "quote the next typed key"
OP_ENTER_COMMAND "enter a muttrc command"
OP_ENTER_MASK "enter a file mask"
OP_EXIT "exit this menu"
OP_FILTER "filter attachment through a shell command"
OP_FIRST_ENTRY "move to the first entry"
OP_FLAG_MESSAGE "toggle a message's 'important' flag"
OP_FORWARD_MESSAGE "forward a message with comments"
OP_GENERIC_SELECT_ENTRY "select the current entry"
OP_GROUP_REPLY "reply to all recipients"
OP_HALF_DOWN "scroll down 1/2 page"
OP_HALF_UP "scroll up 1/2 page"
OP_HELP "this screen"
OP_JUMP "jump to an index number"
OP_LAST_ENTRY "move to the last entry"
OP_LIST_REPLY "reply to specified mailing list"
OP_MACRO "execute a macro"
OP_MAIL "compose a new mail message"
OP_MAIN_CHANGE_FOLDER "open a different folder"
OP_MAIN_CHANGE_FOLDER_READONLY "open a different folder in read only mode"
OP_MAIN_CLEAR_FLAG "clear a status flag from a message"
OP_MAIN_DELETE_PATTERN "delete messages matching a pattern"
OP_MAIN_FETCH_MAIL "retrieve mail from POP server"
OP_MAIN_FIRST_MESSAGE "move to the first message"
OP_MAIN_LAST_MESSAGE "move to the last message"
OP_MAIN_LIMIT "show only messages matching a pattern"
OP_MAIN_NEXT_NEW "jump to the next new message"
OP_MAIN_NEXT_SUBTHREAD "jump to the next subthread"
OP_MAIN_NEXT_THREAD "jump to the next thread"
OP_MAIN_NEXT_UNDELETED "move to the next undeleted message"
OP_MAIN_NEXT_UNREAD "jump to the next unread message"
OP_MAIN_PREV_THREAD "jump to previous thread"
OP_MAIN_PREV_SUBTHREAD "jump to previous subthread"
OP_MAIN_PREV_UNDELETED "move to the last undelete message"
OP_MAIN_PREV_NEW "jump to the previous new message"
OP_MAIN_PREV_UNREAD "jump to the previous unread message"
OP_MAIN_READ_THREAD "mark the current thread as read"
OP_MAIN_READ_SUBTHREAD "mark the current subthread as read"
OP_MAIN_SET_FLAG "set a status flag on a message"
OP_MAIN_SYNC_FOLDER "save changes to mailbox"
OP_MAIN_TAG_PATTERN "tag messages matching a pattern"
OP_MAIN_UNDELETE_PATTERN "undelete messages matching a pattern"
OP_MAIN_UNTAG_PATTERN "untag messages matching a pattern"
OP_MIDDLE_PAGE "move to the middle of the page"
OP_NEXT_ENTRY "move to the next entry"
OP_NEXT_LINE "scroll down one line"
OP_NEXT_PAGE "move to the next page"
OP_PAGER_BOTTOM "jump to the bottom of the message"
OP_PAGER_EXIT "return to the main-menu"
OP_PAGER_HIDE_QUOTED "toggle display of quoted text"
OP_PAGER_SKIP_QUOTED "skip beyond quoted text"
OP_PAGER_TOP "jump to the top of the message"
OP_PIPE "pipe message/attachment to a shell command"
OP_PREV_ENTRY "move to the previous entry"
OP_PREV_LINE "scroll up one line"
OP_PREV_PAGE "move to the previous page"
OP_PRINT "print the current entry"
OP_QUERY "query external program for addresses"
OP_QUERY_APPEND "append new query results to current results"
OP_QUIT "save changes to mailbox and quit"
OP_RECALL_MESSAGE "recall a postponed message"
OP_REDRAW "clear and redraw the screen"
OP_REPLY "reply to a message"
OP_SAVE "save message/attachment to a file"
OP_SEARCH "search for a regular expression"
OP_SEARCH_REVERSE "search backwards for a regular expression"
OP_SEARCH_NEXT "search for next match"
OP_SEARCH_OPPOSITE "search for next match in opposite direction"
OP_SEARCH_TOGGLE "toggle search pattern coloring"
OP_SHELL_ESCAPE "invoke a command in a subshell"
OP_SORT "sort messages"
OP_SORT_REVERSE "sort messages in reverse order"
OP_TAG "tag the current entry"
OP_TAG_PREFIX "apply next function to tagged messages"
OP_TAG_SUBTHREAD "tag the current subthread"
OP_TAG_THREAD "tag the current thread"
OP_TOGGLE_NEW "toggle a message's 'new' flag"
OP_TOGGLE_WRITE "toggle whether the mailbox will be rewritten"
OP_TOP_PAGE "move to the top of the page"
OP_UNDELETE "undelete the current entry"
OP_UNDELETE_THREAD "undelete all messages in thread"
OP_UNDELETE_SUBTHREAD "undelete all messages in subthread"
OP_VERSION "show the Mutt version number and date"
OP_VIEW_ATTACH "view attachment using mailcap entry if necessary"
OP_VIEW_ATTACHMENTS "show MIME attachments"
OP_MAIN_SHOW_LIMIT "show currently active limit pattern"
OP_COMPOSE_ATTACH_KEY "attach a PGP public key"
OP_COMPOSE_PGP_MENU "show PGP options"
OP_EXTRACT_KEYS "extract PGP public keys"
OP_FORGET_PASSPHRASE "wipe PGP passphrase from memory"
OP_MAIL_KEY "mail a PGP public key"
OP_VERIFY_KEY "verify a PGP public key"
OP_VIEW_ID "view the key's user id"
# This file contains commands to change the keybindings in Mutt to be
# similar to those of PINE 3.95.
bind index v display-message
bind index p previous-undeleted
bind index n next-undeleted
bind index ' ' next-page
bind index c mail
bind index g change-folder
bind index w search
bind index y print-message
bind index x sync-mailbox
bind index $ sort-mailbox
bind index a tag-prefix
bind index ; tag-message
# Not possible to simulate zoom-out...
macro index z ltagged\r
bind pager p previous-undeleted
bind pager n next-undeleted
bind pager ' ' next-page
bind pager g change-folder
bind pager c mail
bind pager w search
bind pager y print-message
bind pager \n noop # PINE prints "No default action for this menu."
bind pager up previous-line
bind pager down next-line
bind compose \cx send-message
# PINE has different defaults for this variables
set folder=~/mail
set record=+sent-mail
set nosave_name
set postponed=~/postponed-msgs
set hdr_format="%Z %3C %{%b %d} %-19.19L (%5c) %s"
README for mutt-0.90i
Installation instructructions are detailed in ``INSTALL''.
The user manual is in doc/manual.txt.
PGP users please read doc/pgp-Notes.txt before proceeding.
For more information, see the Mutt home page,
The primary distribution point for Mutt is See the home page for mirror sites.
Michael Elkins <[email protected]>, January 22, 1998
Thomas Roessler <[email protected]>, February 3, 1998
- Other than multipart/mixed and PGP/MIME, Mutt should allow the user to
specify what to do with other types of multipart messages (i.e., so a user
can deal with S/MIME messages reasonably)
- option to not include attachments in replies
- handle message/external-body in some fashion
- handle message/partial reconstruction
- not possible to view the header of a single part message which contains
something that requires a mailcap entry to view
- need to clean up the error recovery when running out of space when syncing
a mbox/mmdf mailbox
- BODY struct should probably have a pointer to its corresponding HEADER
struct. this is needed for mh/maildir mailboxes so the correct pathname
can be found. Or perhaps all we need is a .hdr member of the STATE struct
so that all of the MIME handlers can look up the corresponding HEADERs if
need be?
- mailbox resync code for mh and maildir mailboxes
- fold long user-defined header fields
- history classes
- document honored environment variables
- add -v flag to pass to sendmail...