	README for the demo programs in this directory
	==============================================

These demo programs illustrate how to use the JavaMail API to
perform a number of common email functions.  Note these these
programs are not intended to be examples of good user interfaces,
or good command line interfaces.  No one is expected to actually
*use* these programs for anything real.  Rather, their value is
in the source code.  Don't look at their command line arguments
or user interface to figure out what JavaMail can do, look at
their source code.  We strongly recommend that you read the
source code and understand what these programs are doing before
running them.

All of these programs are simple command line tools with a UNIX
style interface.  On Windows you'll need to run them in an MS-DOS
window.  We apologize in advance for the inconsistency in how these
programs accept options.  There are generally two styles.  The very
simple style (e.g., as used by copier.java) requires a fixed number
of arguments in a fixed order.  Others (e.g., folderlist.java) take
UNIX-style options, many of which are optional, and which may appear
in any order.  The following notes should help you figure it out,
but if in doubt, read the source code.



- copier.java

	This program copies the specified messages from one folder to
	another. Both folders must belong to the same store.

  Usage:
	java copier <urlname> <src> <dest> <start> <end>

  Arguments (in order):

  <urlname>	: URL of the Store. The URL should include
		  the password as well (if needed).
		  Example: "imap://john:password@mailstore.com"

  <src>		: source folder
  <dest>	: destination folder
  <start>	: start message number
  <end>		: end message number


- folderlist.java

	This program lists information about the folders in a Store.

   Usage:
	java folderlist -L <url> -T <protocol> -H <host> -U <user> -P <passwd>
		   [-R <root>] [-r] [-v] [-D] <pattern>

   Options:

   -L <url>	: URL of the Store. The URL should include
		  the password as well (if needed).
		  Example: "imap://john:password@mailstore.com"
   -T <protocol> : store protocol (Ex: "imap")
   -H <host>	: hostname of store.
   -U <user>	: username (if needed)
   -P <passwd>	: password (if needed)
   -R <root>	: root of the folder hierarchy. This is optional. If
		  not present, listing starts from the default folder.
   -r		: list recursively - folder and all subfolders.
   -v		: verbose - show more info about each folder.
   -D		: Turn on session debugging
   <pattern>	: folders that match this pattern are listed. Use "*"
		  as wildcard to match everything.


- monitor.java

	Illustrates how to monitor a folder for interesting events,
	like new mail arrival.

   Usage:
	java monitor <host> <user> <password> <mbox> <freq>

   Arguments (in order):

   <host>	: hostname of store.
   <user>	: username (if needed)
   <passwd>	: password (if needed)
   <mbox>	: folder to monitor
   <freq>	: frequency of monitoring


- mover.java

	Moves messages between folders.  The folders must belong to the
	same store.

   Usage:
	java mover -T <protocol> -H <host> -U <user> -P <passwd> [-v]
		-s <src> -d <dest> [-x] <start> <end>

   Options:

   -T <protocol> : store protocol (Ex: "imap")
   -H <host>	: hostname of store.
   -U <user>	: username (if needed)
   -P <passwd>	: password (if needed)
   -s <src>	: source folder
   -d <dest>	: destination folder
   -v		: Optional verbose option
   -x		: Optional expunge option, to expunge the deleted
		  messages from src

   Arguments (in order):

   <start>	: start message number
   <end>	: end message number


- msgmultisendsample.java

	Demonstrates how to construct and send a multipart message.

   Usage:
	java msgmultisendsample <to> <from> <smtphost> true|false

   Arguments (in order):

   <to>		: Recipient address
   <from>	: Sender address
   <smtphost>	: name of SMTP server
   true|false	: "true" to turn on session debugging, "false" otherwise


- msgsend.java

	Send a simple text message. Optionally saves a copy
	of the outgoing message in a folder (record-folder).

	Most parameters to this program are optional. When
	the program is run, it interactively asks for
	the "To" and "Subject" fields if not already available.
	Then the program expects the body of the message.
	After you type in the body, hit Ctrl-D on Unix
	systems or Ctrl-Z on Windows systems to send
	the message.

   Usage:
	java msgsend -L <store-url> -T <protocol> -H <host> -U <user>
		-P <passwd> -s <subject> -o <from> -c <cc> -b <bcc>
		-f <record> -M <smtphost> [-d] <to>

   Options:

   -L <store-url> : URL of the store for the record-folder
   -T <protocol> : If <store-url> is not present, this indicates
		  the store protocol for the record-folder.
   -H <host>	: If <store-url> is not present, this indicates
		  the hostname for the record-folder.
   -U <user>	: If <store-url> is not present, this indicates
		  the username for the record-folder.
   -P <passwd>	: If <store-url> is not present, this indicates
		  the password for the record-folder.
   -f <record>	: name of record-folder.
   -M <smtphost> : Host name of SMTP server.  Defaults to "localhost"
		  which often works on UNIX but rarely on Windows.
   -s <subject>	: Subject of message to be sent
   -o <from>	: From address of message to be sent
   -c <cc>	: Cc address of message to be sent
   -b <bcc>	: Bcc address of message to be sent
   -d		: Turn on session debugging.

   Argument:

   <to>		: To address of message to be sent


- msgsendsample.java

	Demonstrates how to construct and send a simple text message.

   Usage:
	java msgsendsample <to> <from> <smtphost> true|false

   Arguments (in order):

   <to>		: Recipient address
   <from>	: Sender address
   <smtphost>	: name of SMTP server
   true|false	: "true" to turn on session debugging, "false" otherwise


- msgshow.java

	Displays message(s) from a folder or from stdin.

   Usage:
	java msgshow -L <url> -T <protocol> -H <host> -p <port>
		-U <user> -P <password> -f <mailbox>
		[-D] [-s] [-S] [-a] [-v] [msgnum]
	java msgshow -m [-D] [-s] [-S] [-v]

   Options:

   -L <url>	: URL of the Store. The URL should include
		  the password as well (if needed).
		  Example: "imap://john:password@mailstore.com"
   -T <protocol> : If <url> is not present, this indicates
		  the store protocol
   -H <host>	: If <url> is not present, this indicates
		  the hostname
   -p <port>	: If <url> is not present, this indicates
		  the port number (usually not needed)
   -U <user>	: If <url> is not present, this indicates
		  the username
   -P <passwd>	: If <url> is not present, this indicates
		  the password
   -f <mailbox>	: Folder to open
   -m		: Read message from standard input
   -D		: Turn on session debugging
   -s		: Show the structure of the message, but not the contents
   -S		: Save attachments to appropriately named files
   -a		: Show ALERTS and NOTIFICATIONS from the Store
   -v		: Verbose mode - show total messages and number of new messages

   Argument:

   <msgnum>	: the message to be displayed. If this
  		  parameter is not present, all messages in the
		  folder are displayed.


- namespace.java

	Displays the namespaces supported by a store.

   Usage:
	java namespace -L <url> -T <protocol> -H <host> -p <port>
		-U <user> -P <password> [-D]

   Options:

   -L <url>	: URL of the Store. The URL should include
		  the password as well (if needed).
		  Example: "imap://john:password@mailstore.com"
   -T <protocol> : If <url> is not present, this indicates
		  the store protocol
   -H <host>	: If <url> is not present, this indicates
		  the hostname
   -p <port>	: If <url> is not present, this indicates
		  the port number (usually not needed)
   -U <user>	: If <url> is not present, this indicates
		  the username
   -P <passwd>	: If <url> is not present, this indicates
		  the password
   -D		: Turn on session debugging


- populate.java

	Copies an entire folder hierarchy from one message store to
	another.

   Usage:
	java populate -s <src-url> -d <dest-url> -D -f

   Options:

   -s <src-url>	: URL of source folder
   -d <dest-url> : URL of destination folder
   -D		: Turn on session debugging
   -f		: force the copy to occur even if the destination
		  folder already exists
   -S		: skip special folders named "SCCS", "Drafts", "Trash", and
		  "Shared Folders"
   -c		: clear out old folders before copying messages


- registry.java

	Demonstrates how to query the JavaMail "registry" for providers,
	set default providers, etc.

   Usage:
	java registry


- search.java

	Search the given folder for messages matching the
	given criteria.  Illustrates the use of the
	javax.mail.search package.

   Usage:
	java search -L <url> -T <prot> -H <host> -U <user> -P <passwd>
		-f <folder> -subject <subject> -from <from>
		-today -or

   Options:

   -L <url>	: URL of the store
   -T <protocol> : If <url> is not present, this indicates
		  the store protocol
   -H <host>	: If <url> is not present, this indicates
		  the hostname
   -U <user>	: If <url> is not present, this indicates
		  the username
   -P <passwd>	: If <url> is not present, this indicates
		  the password
   -f <folder>	: folder to search

   -or		: If this flag is present, the search will
		  return messages that match any one of the
		  below criteria. Else the search will only
		  return messages that match all the criteria

   -subject <subject>	: search for messages containing this string
			  as the Subject
   -from <from>		: search for messages containing this string
			  as the From address
   -today		: search for messages received today


- sendfile.java

	Send the specified file to the given address.  The file
	is sent as an attachment.  An SMTP server must be available.

   Usage:
	java sendfile <to> <from> <smtphost> <file> true|false

   Arguments (in order):

   <to>		: Recipient address
   <from>	: Sender address
   <smtphost>	: name of SMTP server
   <file>	: name of file to be sent
   true|false	: "true" to turn on session debugging, "false" otherwise


- sendhtml.java

	The sendhtml program works like the msgsend program, taking
	the same options and input, but the text collected from the
	user is sent as type "text/html" instead of "text/plain".

	This program is a good example of how to send arbitrary
	string data as any arbitrary MIME type.


- smtpsend.java

	Takes the same options as the msgsend program, but illustrates
	how to handle SMTP-specific error codes.  Also accepts the
	following option:

   Option:

   -a		: use SMTP authentication

- transport.java

	Illustrates how to use an explicit Transport object, how to
	handle transport exceptions, and how to handle transport events.

   Usage:
	java transport <to> <from> <smtphost> <file> true|false

   Arguments (in order):

   <to>		: Recipient address
   <from>	: Sender address
   <smtphost>	: name of SMTP server
   <file>	: name of file to be sent
   true|false	: "true" to turn on session debugging, "false" otherwise


- uidmsgshow.java

	The uidmsgshow program works like the msgshow program, taking
	the same options, except instead of using message numbers, it
	uses message UID's.  This will typically only work with IMAP
	message stores.
