12-06-05 spam.c: fix insider() domain check that skipped pure domain with not host
12-04-13 cmd1.c: fix empty list null pointer deref
12-02-29 add headfake boolean option to fake 'From ' line in saved message
11-09-11 add sender=/address/head/pattern/[&|]/head/pattern/...
11-07-17 fix message list to apply mimeview() to part 0 (main message body)
10-09-08 fix edited To: in message to override command line recipients
10-06-01 sync with ast api 20100601
09-06-09 names.c,vars.c: fix alias expansion cross-dictionary bug
09-05-15 proc.c,quit.c: add buffer checks to filetemp()
08-11-04 spam.c: fix 0-terminated overrun in usermatch() -- wow
08-02-12 local.c: favor fcntl() lock over flock() for N(otan)FS
08-01-15 cmd3.c: add `if f?path' so old Mail doesn't carp
07-02-06 cmd2.c: "S name" => .../From/name
06-10-11 data.c: ARG_MAX => private ARGMAX
06-10-11 add sfstropen()/sfstruse() error checks
06-06-24 fio.c: fix nul count scan bug
06-04-17 head.c,spam.c: catch and normalize inventive subject spaces
05-03-28 main.c: add -r address; add L variable attribute
05-02-17 head.c: CONTENT_type PART_text trumps CONTENT_encoding binary
05-02-08 local.h: blankline=>allblanks (lynxos libc symbol hijack)
04-08-17 head.c: handle Content-Type: message
04-07-22 lex.c: access() => eaccess()
04-04-15 spam.c: add spamtest mask names, fix spam() ordering
04-03-25 mailx.h: shquote=>shellquote to avoid netbsd clash in <stdlib.h>!!
04-03-17 spam.c: fix usermatch() loop
04-01-28 data.c: k,K are now autoprint (like d)
04-01-22 data.c: K is alias for mark; omitted mark defaults to nospam
list.c: addr- shorthand for addr-$
04-01-20 data.c: k is alias for mark; omitted mark defaults to spam
04-01-16 main.c: mark -f option value optional
03-12-10 spam.c: fix word match bug that matched prefixes instead of full word
03-11-20 main.c: optget() if _PACKAGE_ast -- finally
03-11-14 add spamsubhead=1 to edit spam subject heading list
03-01-17 add shquote() to quote popen pathnames; fix save to -f core dump
02-12-12 imap.c: handle no-name attachments
02-12-11 head.c: application of DeMorgan's law proves Murphy's
02-12-04 local.h: include FEATURE/lcl from lcl.iffe to avoid local.h clash
02-11-22 head.c: convert unfriendly attachment path name characters to '_'
02-10-31 imap.c: drop obsolete RFC2060 FETCH args
02-10-20 spam.c: test=0x0060 for Authentication-Warning: checks
02-10-16 spam.c: test=0x0010 to verify From: in domain matches Received: hosts
02-10-08 mailx: fix a few strncopy() size off-by-ones
02-10-01 mailx: fix ancient buffer overflows by comitting to ast -- bye bsd
02-09-22 local.c: honor MAIL if its a regular file
02-09-08 add spambody to catch mail filter warnings embedded in message bodies
02-09-07 head.c: fix bug that retained mime boundary from previous message
02-09-04 head.c: add call to isdate() to verify ishead() dates
02-09-03 handle \r\n => \n on input
02-08-28 vars.c: fix ${domain} initialization
02-08-21 spam.c: test=0x0004 for X-Authentication-Warning
send.c: disable interpolation "-- " signature test
02-06-07 spam.c: delay lower priority tests until all headers seen
02-05-31 imap.c: error messages to stderr -- duh
02-03-17 spam.c: add spamtest=bitmask: 0x0001: content-type==text/html
02-01-31 data.c: clarify imap var docs
02-01-30 local.iffe: add to handle no <termios.h> and ftruncate()
02-01-24 ifdef { SIGTSTP SIGTTOU SIGTTIN }
02-01-16 properly update References: in replies
01-10-15 `get attachment dir' copies attachment to dir
01-04-01 add state.var.hostname for smtp HELO
add fmtident() to initialize state.version
01-01-01 fix map bug that retained alias after expansion
smtp: add domain to RCPT TO: if omitted
00-11-27 add Date: and From: to smtp
00-09-21 drop leading */ from user name
00-05-09 add cd,pwd,${PWD},${OLDPWD} with ${CDPATH} check
00-05-04 lex: flush stdout before prompt!
00-03-17 add -Qn to get status of n most recent messages
fix imap -NS unread count
loosen up headerbotch header checks
00-02-29 handle multiline SMTP responses
99-07-17 fix imap reply via imap_setinput() omission
@x.y.z in spam list matches x.y.z domain suffix
tone down hostmatch(), check unknown in Received:
fix $MAIL lock by checking syscall return value -- how novel
add -S, -o justfrom
add -NS to print info and exit
spam: Message-Id: <>
spam: To: suppressed
spam: strgrpmatch() instead of strcasecmp()
imap: normalize imap message before send
98-12-25 "text/enriched" treated like "text/plain"
PART_text && PART_inline => in the body
98-11-11 `save +' with `set followup=+From' saves msg in `+From/sender'
98-06-01 fix header parse for message/rfc822
add sendmail=smtp://host sendmail=/dev/tcp/host/inet.smtp
98-02-14 more spam stuff
to==from==user isn't spam
Status: header means already scanned (MSCAN)
spam check in setinput() (either here or in setptr())
`---*' can separate headers from body
98-02-07 defined(SFIO_VERSION) insead of defined(printf) for sfio disciplines
98-01-11 set spam to mark spam candidates X
set spamlog=file to automatically log spam msgs on quit
set spamto=addr1,...,addrN for candidate spam recipients
set spamfrom=addr1,...,addrN for candidate spam senders
set spamsub=word1,...,wordN for candidate subject word prefixes
add :!x for messages not matching x
set local=domain1,...,domainN
check for nuls in mail file
set headerbotch treats \n\nReturn-Path: as From line if not in header
97-11-27 couldn't resist the date
97-11-11 change fflush() (in stdio.h) to do physical seek to logical position
this should squash the empty message bug
97-10-31 replace ferror() checks with checks at the io ops
97-08-11 ~m with no messages no longer dumps core
sendmail="<_PATH_SENDMAIL> -oi" to retain `.' lines (least suprise?)
keep most descriptive content-type
97-07-17 -t implies SEND mode
set quiet still lists folder status on startup
attachments named n-m instead of n:m for fat fs
if no encoding type and mimeview(encoding) then its an encoding
97-02-14 [Ss]plit now takes message list arg, Split ignores headers
no longer dumps for non-empty files with no From
~f preserves attachment encoding/boundaries
text/plain with name="" is now an attachment
${MAIL} is default system mailbox
${MAIL}/.. is default system mailbox dir
96-09-06 version 9.6
set headerbotch to handle mailers that add space between std headers
set more[=prompt] to enable sfio more discipline (overrides PAGER)
alias < file (note space around <) to read sendmail alias file for map
join [messagelist] -- reply with auto ~m ~v
Join [messagelist] -- Reply with auto ~m ~v
multipart content converted to print/type/split (attachment) lines
get attachment-index [path] after print/type decodes attachment to file
~g file interpolates content for multipart message
~g `uuencode -h -x base64': no header/trailer, base64 encoding
set fixedheaders="hdr1\nhdr2..." added to outgoing message header
help [ command | ~ [ command ] set [ variable ] ]
set MAILCAP; get checks ${MAILCAP} for view command(s), Get doesn't
mime [ pattern[;] command | < file ] -- add/del/list mime capabilities
alias case insensitive -- mail addrs and sendmail aliases are anyway
use <cdt.h>
use <mime.h>
mark [messagelist] mark
folder directories treated as mh folders
set inbox=+inbox -- SAVE messages not held in this mh folder
SAVE messages deleted from any mailbox
cast off_t %ld to (long) -- how do you say long long in portable?
if displayed message from me then don't ignore To:
mailbox() attempts all standard places
retain mime type/encoding in lower case
96-08-11 version 9.0
convert to prototyped ANSI C
all non-shared externs static
globals into state.*
internalize mail.help and mail.tildehelp
alternates: equivalent to: alias alt[i] myname
split to split messages into numbered files
blast,Blast to blast message headers and body into name=value list
if "a" [ == != ] "b"
${mode} is readonly with value either "send" or "receive"
some options are readonly
some options may only be set on command line
some options may not ne set while sourcing
most command line flags have option names
set all shows unset vars too