+ Add a comma to separate parts of existing sentences more clearly. + Change "Also you might want" to "You might also want". + Remove a duplicate <command>edit</command>. + Reword and split sentences, minor other grammar fixes.
		
			
				
	
	
		
			764 lines
		
	
	
	
		
			34 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			764 lines
		
	
	
	
		
			34 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| <!-- $FreeBSD$ -->
 | |
| <!-- FreeBSD Documentation Project -->
 | |
| 
 | |
| <!DOCTYPE ARTICLE PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN">
 | |
| <article>
 | |
|   <articleinfo>
 | |
|     <title>An MH Primer</title>
 | |
| 
 | |
|     <authorgroup>
 | |
|       <author>
 | |
| 	<firstname>Matt</firstname>
 | |
| 
 | |
| 	<surname>Midboe</surname>
 | |
| 
 | |
| 	<affiliation>
 | |
| 	  <address>
 | |
| 	    <email>matt@garply.com</email>
 | |
| 	  </address>
 | |
| 	</affiliation>
 | |
|       </author>
 | |
|     </authorgroup>
 | |
| 
 | |
|     <pubdate>v1.0, 16 January 1996</pubdate>
 | |
| 
 | |
|     <abstract>
 | |
|       <para>This document contains an introduction to using MH on
 | |
| 	FreeBSD</para>
 | |
|     </abstract>
 | |
|   </articleinfo>
 | |
| 
 | |
|   <sect1 id="mhintro">
 | |
|     <title>Introduction</title>
 | |
| 
 | |
|     <para>MH started back in 1977 at the RAND Corporation, where the
 | |
|       initial philosophies behind MH were developed. MH is not so much
 | |
|       a monolithic email program but a philosophy about how best to
 | |
|       develop tools for reading email. The MH developers have done a
 | |
|       great job adhering to the <acronym>KISS</acronym> principle: Keep It
 | |
|       Simple Stupid.  Rather than have one large program for reading,
 | |
|       sending and handling email they have written specialized
 | |
|       programs for each part of your email life. One might liken MH to
 | |
|       the specialization that one finds in insects and nature. Each
 | |
|       tool in MH does one thing, and does it very well.</para>
 | |
| 
 | |
|     <para>Beyond just the various tools that one uses to handle their
 | |
|       email MH has done an excellent job keeping the configuration of
 | |
|       each of these tools consistent and uniform. In fact, if you are
 | |
|       not quite sure how something is supposed to work or what the
 | |
|       arguments for some command are supposed to be, then you can
 | |
|       generally guess and be right.  Each MH command is consistent
 | |
|       about how it handles reading the configuration files and how it
 | |
|       takes arguments on the command line.  One useful thing to
 | |
|       remember is that you can always add a <option>-help</option> to
 | |
|       the command to have it display the options for that
 | |
|       command.</para>
 | |
| 
 | |
|     <para>The first thing that you need to do is to make sure that you
 | |
|       have installed the MH package on your FreeBSD machine. If you
 | |
|       installed from CDROM you should be able to execute the following
 | |
|       to load mh:
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>&prompt.root; <userinput>pkg_add /cdrom/packages/mh-6.8.3.tgz</userinput></screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       You will notice that it created a <filename>/usr/local/lib/mh</filename>
 | |
|       directory for you as well as adding several binaries to the
 | |
|       <filename>/usr/local/bin</filename> directory. If you would prefer to
 | |
|       compile it yourself then you can anonymous ftp it from <ulink
 | |
| 	URL="ftp://ftp.ics.uci.edu/">ftp.ics.uci.edu</ulink> or <ulink
 | |
| 	URL="ftp://louie.udel.edu/">louie.udel.edu</ulink>.</para>
 | |
| 
 | |
|     <para>This primer is not a full comprehensive explanation of how
 | |
|       MH works. This is just intended to get you started on the road
 | |
|       to happier, faster mail reading. You should read the man pages
 | |
|       for the various commands. You might also want to read the <ulink
 | |
| 	URL="news:comp.mail.mh">comp.mail.mh</ulink> newsgroup. Also
 | |
|       you can read the <ulink
 | |
| 	URL="http://www.cis.ohio-state.edu/hypertext/faq/usenet/mh-faq/part1/faq.html">FAQ
 | |
| 	for MH</ulink>. The best resource for MH is the O'Reilly and
 | |
|       Associates book written by Jerry Peek.</para>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Reading Mail</title>
 | |
| 
 | |
|     <para>This section covers how to use <command>inc</command>,
 | |
|       <command>show</command>, <command>scan</command>, <command>next</command>,
 | |
|       <command>prev</command>, <command>rmm</command>, <command>rmf</command>, and
 | |
|       <command>msgchk</command>.  One of the best things about MH is the
 | |
|       consistent interface between programs. One thing to keep in
 | |
|       mind when using these commands is how to specify message lists.
 | |
|       In the case of <command>inc</command> this does not really make any
 | |
|       sense but with commands like <command>show</command> it is useful to
 | |
|       know. </para>
 | |
| 
 | |
|     <para>A message list can consist of something like <parameter>23
 | |
| 	20 16</parameter> which will act on messages 23, 20 and 16. This is
 | |
|       fairly simple but you can do more useful things like
 | |
|       <parameter>23-30</parameter> which will act on all the messages between
 | |
|       23 and 30. You can also specify something like
 | |
|       <parameter>cur:10</parameter> which will act on the current message and
 | |
|       the next 9 messages. The <parameter>cur</parameter>, <parameter>last</parameter>,
 | |
|       and <parameter>first</parameter> messages are special messages that refer
 | |
|       to the current, last or first message in the folder.</para>
 | |
| 
 | |
|     <sect2 id="inc">
 | |
|       <title><command>inc</command>, <command>msgchk</command>—read in your
 | |
| 	new email or check it</title>
 | |
| 
 | |
|       <para>If you just type in <userinput>inc</userinput> and hit
 | |
| 	<keycap>return</keycap> you will be well on your way to getting
 | |
| 	started with MH. The first time you run <command>inc</command> it
 | |
| 	will setup your account to use all the MH defaults and ask you
 | |
| 	about creating a <filename>Mail</filename> directory under your HOME directory. If you have mail waiting to
 | |
| 	be downloaded you will see something that looks like:</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>  29  01/15 Doug White         Re: Another Failed to boot problem<<On Mon, 15 J
 | |
|   30  01/16 "Jordan K. Hubbar  Re: FBSD 2.1<<> Do you want a library instead of
 | |
|   31  01/16 Bruce Evans        Re: location of bad144 table<<>> >It would appea
 | |
|   32  01/16 "Jordan K. Hubbar  Re: video is up<<> Anyway, mrouted won't run, ev
 | |
|   33  01/16 Michael Smith      Re: FBSD 2.1<<Nate Williams stands accused of sa</screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>This is the same thing you will see from a
 | |
| 	<command>scan</command> (see <xref linkend="scan">). If you just run
 | |
| 	<command>inc</command> with no arguments it will look on your
 | |
| 	computer for email that is supposed to be coming to
 | |
| 	you.</para>
 | |
| 
 | |
|       <para>A lot of people like to use POP for grabbing their email.
 | |
| 	MH can do POP to grab your email. You will need to give
 | |
| 	<command>inc</command> a few command line arguments.</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>&prompt.user; <userinput>inc -host mail.pop.org -user <replaceable>username</replaceable> -norpop</userinput></screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>That tells <command>inc</command> to go to
 | |
| 	<parameter>mail.pop.org</parameter> to download your email, and that
 | |
| 	your username on their system is <replaceable>username</replaceable>. The
 | |
| 	<option>-norpop</option> option tells <command>inc</command> to use
 | |
| 	plain POP3 for downloading your email. MH has support for a
 | |
| 	few different dialects of POP. More than likely you will never
 | |
| 	ever need to use them though. While you can do more complex
 | |
| 	things with <command>inc</command> such as audit files and scan format files this
 | |
| 	will get you going.</para>
 | |
| 
 | |
|       <para>The <command>msgchk</command> command is used to get information
 | |
| 	on whether or not you have new email. <command>msgchk</command> takes
 | |
| 	the same <option>-host</option> and <option>-user</option>
 | |
| 	options that <command>inc</command> takes.</para>
 | |
|     </sect2>
 | |
| 
 | |
|     <sect2 id="show">
 | |
|       <title><command>show</command>, <command>next</command> and
 | |
| 	<command>prev</command>—displaying and moving through
 | |
| 	email</title>
 | |
| 
 | |
|       <para><command>show</command> is to show a letter in your current
 | |
| 	folder.  Like <command>inc</command>, <command>show</command> is a fairly
 | |
| 	straightforward command. If you just type <userinput>show</userinput>
 | |
| 	and hit <keycap>return</keycap> then it displays the current
 | |
| 	message. You can also give specific message numbers to
 | |
| 	show:</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>&prompt.user; <userinput>show 32 45 56</userinput></screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>This would display message numbers 32, 45 and 56 right
 | |
| 	after each other. Unless you change the default behavior
 | |
| 	<command>show</command> basically just does a <command>more</command> on the
 | |
| 	email message.</para>
 | |
| 
 | |
|       <para><command>next</command> is used to move onto the next message and
 | |
| 	<command>prev</command> will go to the previous message. Both
 | |
| 	commands have an implied <command>show</command> command so that when
 | |
| 	you go to the next message it automatically displays
 | |
| 	it.</para>
 | |
|     </sect2>
 | |
| 
 | |
|     <sect2 id="scan">
 | |
|       <title><command>scan</command>—shows you a scan of your
 | |
| 	messages</title>
 | |
| 
 | |
|       <para><command>scan</command> will display a brief listing of the
 | |
| 	messages in your current folder. This is an example of what
 | |
| 	the <command>scan</command> command will give you.</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>  30+ 01/16 Jordan K. Hubbar   Re: FBSD 2.1<<> Do you want a library instead of
 | |
|   31  01/16 Bruce Evans        Re: location of bad144 table<<>> >It would appea
 | |
|   32  01/16 Jordan K. Hubbar   Re: video is up<<> Anyway, mrouted won't run, ev
 | |
|   33  01/16 Michael Smith      Re: FBSD 2.1<<Nate Williams stands accused of sa</screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>Like just about everything in MH this display is very
 | |
| 	configurable.  This is the typical default display. It gives
 | |
| 	you the message number, the date on the email, the sender, the
 | |
| 	subject line, and a sentence fragment from the very beginning
 | |
| 	of the email if it can fit it. The <literal>+</literal> means that
 | |
| 	message is the current message, so if you do a
 | |
| 	<command>show</command> it will display that message.</para>
 | |
| 
 | |
|       <para>One useful option for scan is the
 | |
| 	<option>-reverse</option> option. This will list your messages
 | |
| 	with the highest message number first and lowest message
 | |
| 	number last. Another useful option with <command>scan</command> is to
 | |
| 	have it read from a file. If you want to scan your incoming
 | |
| 	mailbox on FreeBSD without having to <command>inc</command> it you
 | |
| 	can do <command>scan -file
 | |
| 	  /var/mail/<replaceable>username</replaceable></command>. This can be used
 | |
| 	with any file that is in the <database>mbox</database> format.</para>
 | |
|     </sect2>
 | |
| 
 | |
|     <sect2 id="rmm">
 | |
|       <title><command>rmm</command> and <command>rmf</command>—remove the
 | |
| 	current message or folder</title>
 | |
| 
 | |
|       <para><command>rmm</command> is used to remove a mail message. The
 | |
| 	default is typically to not actually remove the message but to
 | |
| 	rename the file to one that is ignored by the MH commands. You
 | |
| 	will periodically need to go through and physically delete the
 | |
| 	<quote>removed</quote> messages.</para>
 | |
| 
 | |
|       <para>The <command>rmf</command> command is used to remove folders.
 | |
| 	This does not just rename the files but actually removes the
 | |
| 	from the hard drive so you should be careful when you use this
 | |
| 	command.</para>
 | |
|     </sect2>
 | |
| 
 | |
|     <sect2 id="samplereading">
 | |
|       <title>A typical session of reading with MH</title>
 | |
| 
 | |
|       <para>The first thing that you will want to do is
 | |
| 	<command>inc</command> your new mail. So at a shell prompt just type
 | |
| 	in <command>inc</command> and hit <keycap>return</keycap>.</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>&prompt.user; <userinput>inc</userinput>
 | |
| Incorporating new mail into inbox...
 | |
| 
 | |
|   36+ 01/19 Stephen L. Lange   Request...<<Please remove me as contact for pind
 | |
|   37  01/19 Matt Thomas        Re: kern/950: Two PCI bridge chips fail (multipl
 | |
|   38  01/19 Amancio Hasty Jr   Re: FreeBSD and VAT<<>>> Bill Fenner said: > In 
 | |
| &prompt.user;</screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>This shows you the new email that has been added to your
 | |
| 	mailbox. So the next thing to do is <command>show</command> the email
 | |
| 	and move around.</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>&prompt.user; <userinput>show</userinput>
 | |
| Received: by sashimi.wwa.com (Smail3.1.29.1 #2)
 | |
|         id m0tdMZ2-001W2UC; Fri, 19 Jan 96 13:33 CST
 | |
| Date: Fri, 19 Jan 1996 13:33:31 -0600 (CST)
 | |
| From: "Stephen L. Lange" <stvlange@wwa.com>
 | |
| To: matt@garply.com
 | |
| Subject: Request...
 | |
| Message-Id: <Pine.BSD.3.91.960119133211.824A-100000@sashimi.wwa.com>
 | |
| Mime-Version: 1.0
 | |
| Content-Type: TEXT/PLAIN; charset=US-ASCII
 | |
| 
 | |
| 
 | |
| Please remove me as contact for pindat.com
 | |
| 
 | |
| &prompt.user; <userinput>rmm</userinput>
 | |
| &prompt.user; <userinput>next</userinput>
 | |
| Received: from localhost (localhost [127.0.0.1]) by whydos.lkg.dec.com (8.6.11/8
 | |
| .6.9) with SMTP id RAA24416; Fri, 19 Jan 1996 17:56:48 GMT
 | |
| Message-Id: <199601191756.RAA24416@whydos.lkg.dec.com>
 | |
| X-Authentication-Warning: whydos.lkg.dec.com: Host localhost didn't use HELO pro
 | |
| tocol
 | |
| To: hsu@clinet.fi
 | |
| Cc: hackers@FreeBSD.org
 | |
| Subject: Re: kern/950: Two PCI bridge chips fail (multiple multiport ethernet 
 | |
|  boards) 
 | |
| In-Reply-To: Your message of "Fri, 19 Jan 1996 00:18:36 +0100."
 | |
|              <199601182318.AA11772@Sysiphos> 
 | |
| X-Mailer: exmh version 1.5omega 10/6/94
 | |
| Date: Fri, 19 Jan 1996 17:56:40 +0000
 | |
| From: Matt Thomas <matt@lkg.dec.com>
 | |
| Sender: owner-hackers@FreeBSD.org
 | |
| Precedence: bulk
 | |
| 
 | |
| 
 | |
| This is due to a typo in pcireg.h (to
 | |
| which I am probably the guilty party).</screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>The <command>rmm</command> removed the current message and the
 | |
| 	<command>next</command> command moved me on to the next message.  Now
 | |
| 	if I wanted to look at ten most recent messages so I could
 | |
| 	read one of them here is what I would do:</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>&prompt.user; <userinput>scan last:10</userinput>
 | |
|   26  01/16 maddy              Re: Testing some stuff<<yeah, well, Trinity has 
 | |
|   27  01/17 Automatic digest   NET-HAPPENINGS Digest - 16 Jan 1996 to 17 Jan 19
 | |
|   28  01/17 Evans A Criswell   Re: Hey dude<<>From matt@tempest.garply.com Tue 
 | |
|   29  01/16 Karl Heuer         need configure/make volunteers<<The FSF is looki
 | |
|   30  01/18 Paul Stephanouk    Re: [alt.religion.scientology] Raw Meat (humor)<
 | |
|   31  01/18 Bill Lenherr       Re: Linux NIS Solaris<<--- On Thu, 18 Jan 1996 1
 | |
|   34  01/19 John Fieber        Re: Stuff for the email section?<<On Fri, 19 Jan
 | |
|   35  01/19 support@foo.garpl  [garply.com #1138] parlor<<Hello. This is the Ne
 | |
|   37+ 01/19 Matt Thomas        Re: kern/950: Two PCI bridge chips fail (multipl
 | |
|   38  01/19 Amancio Hasty Jr   Re: FreeBSD and VAT<<>>> Bill Fenner said: > In 
 | |
| &prompt.user;</screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>Then if I wanted to read message number 27 I would do a
 | |
| 	<userinput>show 27</userinput> and it would be displayed. As you can
 | |
| 	probably tell from this sample session MH is pretty easy to
 | |
| 	use and looking through emails and displaying them is fairly
 | |
| 	intuitive and easy.</para>
 | |
|     </sect2>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Folders and Mail Searching</title>
 | |
| 
 | |
|     <para>Anybody who gets lots of email definitely wants to be able
 | |
|       to prioritize, stamp, brief, de-brief, and number their emails
 | |
|       in a variety of different ways. MH can do this better than just
 | |
|       about anything. One thing that we have not really talked about is
 | |
|       the concept of folders. You have undoubtedly come across the
 | |
|       folders concept using other email programs. MH has folders too.
 | |
|       MH can even do sub-folders of a folder. One thing you should
 | |
|       keep in mind with MH is that when you ran <command>inc</command> for
 | |
|       the first time and it asked you if it could create a
 | |
|       <filename>Mail</filename> directory it began storing everything in that
 | |
|       directory. If you look at that directory you will find a
 | |
|       directory named <filename>inbox</filename>. The <filename>inbox</filename>
 | |
|       directory houses all of your incoming mail that has not been
 | |
|       thrown anywhere else.</para>
 | |
| 
 | |
|     <para>Whenever you create a new folder a new directory is going to
 | |
|       be created underneath your MH <filename>Mail</filename> directory, and
 | |
|       messages in that folder are going to be stored in that
 | |
|       directory.  When a new email message comes, it is thrown
 | |
|       into your <filename>inbox</filename> directory with a file name that is
 | |
|       equivalent to the message number.  So even if you did not have
 | |
|       any of the MH tools to read your email you could still use
 | |
|       standard Unix commands to munge around in those directories and
 | |
|       just more your files. It is this simplicity that really gives you
 | |
|       a lot of power with what you can do with your email.</para>
 | |
| 
 | |
|     <para>Just as you can use message lists like <parameter>23 16
 | |
| 	42</parameter> with most MH commands there is a folder option you can
 | |
|       specify with just about every MH command. If you do a
 | |
|       <command>scan +freebsd</command> it will scan your <filename>freebsd</filename>
 | |
|       folder, and your current folder will be changed to
 | |
|       <filename>freebsd</filename>. If you do a <command>show +freebsd 23 16
 | |
| 	42</command>, <command>show</command> is going to switch to your
 | |
|       <filename>freebsd</filename> folder and display messages 23, 16 and 42.
 | |
|       So remember that <option>+<replaceable>folder</replaceable></option> syntax. You
 | |
|       will need to make sure you use it to make commands process
 | |
|       different folders. Remember you default folder for mail is
 | |
|       <filename>inbox</filename> so doing a <command>folder +inbox</command> should
 | |
|       always get you back to your mail. Of course, in MH's infinite
 | |
|       flexibility this can be changed but most places have probably
 | |
|       left it as <command>inbox</command>.</para>
 | |
| 
 | |
|     <sect2>
 | |
|       <title><command>pick</command>—search email that matches certain
 | |
| 	criteria</title>
 | |
| 
 | |
|       <para><command>pick</command> is one of the more complex commands in
 | |
| 	the MH system. So you might want to read the
 | |
| 	<citerefentry><refentrytitle>pick</refentrytitle><manvolnum>1</manvolnum></citerefentry> man
 | |
| 	page for a more thorough understanding. At its simplest level
 | |
| 	you can do something like</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>&prompt.user; <userinput>pick -search pci</userinput>
 | |
| 15
 | |
| 42
 | |
| 55
 | |
| 56
 | |
| 57</screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>This will tell <command>pick</command> to look through every
 | |
| 	single line in every message in your current folder and tell
 | |
| 	you which message numbers it found the word <literal>pci</literal>
 | |
| 	in. You can then <command>show</command> those messages and read them
 | |
| 	if you wish or <command>rmm</command> them. You would have to specify
 | |
| 	something like <command>show 15 42 55-57</command> to display them
 | |
| 	though. A slightly more useful thing to do is this:</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>&prompt.user; <userinput>pick -search pci -seq pick</userinput>
 | |
| 5 hits
 | |
| &prompt.user; <userinput>show pick</userinput></screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>This will show you the same messages you just did not have
 | |
| 	to work as hard to do it. The <option>-seq</option> option is
 | |
| 	really an abbreviation of <option>-sequence</option> and
 | |
| 	<command>pick</command> is just a sequence which contains the message
 | |
| 	numbers that matched. You can use sequences with just about
 | |
| 	any MH command. So you could have done an <command>rmm pick</command>
 | |
| 	and all those messages would be removed instead. You sequence
 | |
| 	can be named anything. If you run pick again it will overwrite
 | |
| 	the old sequence if you use the same name.</para>
 | |
| 
 | |
|       <para>Doing a <command>pick -search</command> can be a bit more
 | |
| 	time consuming than just searching for message from someone,
 | |
| 	or to someone. So <command>pick</command> allows you to use the
 | |
| 	following predefined search criteria:</para>
 | |
| 
 | |
|       <variablelist>
 | |
| 	<varlistentry>
 | |
| 	  <term><option>-to</option></term>
 | |
| 
 | |
| 	  <listitem>
 | |
| 	    <para>search based upon who the message is to</para>
 | |
| 	  </listitem>
 | |
| 	</varlistentry>
 | |
| 
 | |
| 	<varlistentry>
 | |
| 	  <term><option>-cc</option></term>
 | |
| 
 | |
| 	  <listitem>
 | |
| 	    <para>search based on who is in the cc list</para>
 | |
| 	  </listitem>
 | |
| 	</varlistentry>
 | |
| 
 | |
| 	<varlistentry>
 | |
| 	  <term><option>-from</option></term>
 | |
| 
 | |
| 	  <listitem>
 | |
| 	    <para>search for who sent the message</para>
 | |
| 	  </listitem>
 | |
| 	</varlistentry>
 | |
| 
 | |
| 	<varlistentry>
 | |
| 	  <term><option>-subject</option></term>
 | |
| 
 | |
| 	  <listitem>
 | |
| 	    <para>search for emails with this subject</para>
 | |
| 	  </listitem>
 | |
| 	</varlistentry>
 | |
| 
 | |
| 	<varlistentry>
 | |
| 	  <term><option>-date</option></term>
 | |
| 
 | |
| 	  <listitem>
 | |
| 	    <para>find emails with a matching date</para>
 | |
| 	  </listitem>
 | |
| 	</varlistentry>
 | |
| 
 | |
| 	<varlistentry>
 | |
| 	  <term><option>--<replaceable>component</replaceable></option></term>
 | |
| 
 | |
| 	  <listitem>
 | |
| 	    <para>search for any other component in the header. (i.e.
 | |
| 	      <option>--reply-to</option> to find all emails with a certain
 | |
| 	      reply-to in the header)</para>
 | |
| 	  </listitem>
 | |
| 	</varlistentry>
 | |
|       </variablelist>
 | |
|   
 | |
|       <para>This allows you to do things like
 | |
| 
 | |
| 	<informalexample>
 | |
| 	  <screen>&prompt.user; <userinput>pick -to freebsd-hackers@FreeBSD.org -seq hackers</userinput></screen>
 | |
| 	</informalexample>
 | |
| 
 | |
| 	to get a list of all the email send to the FreeBSD hackers
 | |
| 	mailing list. <command>pick</command> also allows you to group these
 | |
| 	criteria in different ways using the following options:</para>
 | |
| 
 | |
|       <itemizedlist>
 | |
| 	<listitem>
 | |
| 	  <para>… <option>-and</option> …</para>
 | |
| 	</listitem>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para>… <option>-or</option> …</para>
 | |
| 	</listitem>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para><option>-not</option> …</para>
 | |
| 	</listitem>
 | |
| 
 | |
| 	<listitem>
 | |
| 	  <para><option>-lbrace</option> …
 | |
| 	    <option>-rbrace</option></para>
 | |
| 	</listitem>
 | |
|       </itemizedlist>
 | |
| 
 | |
|       <para>These commands allow you to do things like</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>&prompt.user; <userinput>pick -to freebsd-hackers -or -cc freebsd-hackers</userinput></screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>That will grab all the email in your inbox that was sent
 | |
| 	to freebsd-hackers or cc'd to that list. The brace options
 | |
| 	allow you to group search criteria together. This is sometimes
 | |
| 	very necessary as in the following example</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>&prompt.user; <userinput>pick -lbrace -to freebsd-hackers -and 
 | |
|   -not -cc freebsd-questions -rbrace -and -subject pci</userinput></screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>Basically this says <quote>pick (to freebsd-hackers and
 | |
| 	  not cc'd on freebsd-questions) and the subject is
 | |
| 	  pci</quote>.  It should look through your folder and find
 | |
| 	all messages sent to the freebsd-hackers list that are not cc'd
 | |
| 	to the freebsd-questions list and contain <quote>pci</quote> in
 | |
| 	the subject line. Ordinarily you might have to worry about
 | |
| 	something called operator precedence. Remember in math how you
 | |
| 	evaluate from left to right and you do multiplication and
 | |
| 	division first and addition and subtraction second? MH has the
 | |
| 	same type of rules for <command>pick</command>. It is fairly complex
 | |
| 	so you might want to study the man page. This document is just
 | |
| 	to help you get acquainted with MH.</para>
 | |
|     </sect2>
 | |
| 
 | |
|     <sect2>
 | |
|       <title><command>folder</command>, <command>folders</command>,
 | |
| 	<command>refile</command>—three useful programs for folder
 | |
| 	maintenance</title>
 | |
| 
 | |
|       <para>There are three programs which are primarily just for
 | |
| 	manipulating your folders. The <command>folder</command> program is
 | |
| 	used to switch between folders, pack them, and list them. At
 | |
| 	its simplest level you can do a <command>folder
 | |
| 	+<replaceable>newfolder</replaceable></command> and you will be switched into
 | |
| 	<replaceable>newfolder</replaceable>. From there on out all your MH
 | |
| 	commands like <command>comp</command>, <command>repl</command>,
 | |
| 	<command>scan</command>, and <command>show</command> will act on that
 | |
| 	<command>newfolder</command> folder.</para>
 | |
| 
 | |
|       <para>Sometimes when you are reading and deleting messages you
 | |
| 	will develop <quote>holes</quote> in your folders. If you do a
 | |
| 	<command>scan</command> you might just see messages 34, 35, 36, 43,
 | |
| 	55, 56, 57, 80. If you do a <command>folder -pack</command>
 | |
| 	this will renumber all your messages so that there are no
 | |
| 	holes. It does not actually delete any messages though. So you
 | |
| 	may need to periodically go through and physically delete
 | |
| 	<command>rmm</command>'d messages.</para>
 | |
| 
 | |
|       <para>If you need statistics on your folders you can do a
 | |
| 	<command>folders</command> or <command>folder -all</command> to list
 | |
| 	all your folders, how many messages they have, what the
 | |
| 	current message is in each one and so on. This line of stats
 | |
| 	it displays for all your folders is the same one you get when
 | |
| 	you change to a folder with <command>folder +foldername</command>. A
 | |
| 	<command>folders</command> command looks like this:</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>                Folder      # of messages (  range  ); cur  msg  (other files)
 | |
|               announce  has    1 message  (   1-   1).
 | |
|                 drafts  has   no messages.
 | |
|              f-hackers  has   43 messages (   1-  43).
 | |
|            f-questions  has   16 messages (   1-  16).
 | |
|                  inbox+ has   35 messages (   1-  38); cur=  37.
 | |
|                  lists  has    8 messages (   1-   8).
 | |
|              netfuture  has    1 message  (   1-   1).
 | |
|                    out  has   31 messages (   1-  31).
 | |
|               personal  has    6 messages (   1-   6).
 | |
|                   todo  has   58 messages (   1-  58); cur=   1.
 | |
| 
 | |
|                      TOTAL=  199 messages in 13 folders.</screen>
 | |
|       </informalexample>
 | |
|   
 | |
|       <para>The <command>refile</command> command is what you use to move
 | |
| 	messages between folders. When you do something like
 | |
| 	<command>refile 23 +netfuture</command> message number 23 is moved
 | |
| 	into the <filename>netfuture</filename> folder. You could also do
 | |
| 	something like <command>refile 23 +netfuture/latest</command> which
 | |
| 	would put message number 23 in a subfolder called
 | |
| 	<filename>latest</filename> under the <filename>netfuture</filename> folder.
 | |
| 	If you want to keep a message in the current folder and link
 | |
| 	it you can do a <command>refile -link 23 +netfuture</command>
 | |
| 	which would keep 23 in your current <filename>inbox</filename> but
 | |
| 	also list in your <filename>netfuture</filename> folder. You are
 | |
| 	probably beginning to realize some of the really powerful
 | |
| 	things you can do with MH.</para>
 | |
|     </sect2>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1>
 | |
|     <title>Sending Mail</title>
 | |
| 
 | |
|     <para>Email is a two way street for most people so you want to be
 | |
|       able to send something back. The way MH handles sending mail can
 | |
|       be a bit difficult to follow at first, but it allows for
 | |
|       incredible flexibility. The first thing MH does is to copy a
 | |
|       components file into your outgoing email. A components file is
 | |
|       basically a skeleton email letter with stuff like the To: and
 | |
|       Subject: headers already in it.  You are then sent into your
 | |
|       editor where you fill in the header information and then type
 | |
|       the body of your message below the dashed lines in the message.
 | |
|       When you leave the editor, the <command>whatnow</command> program is run.  When you are at the
 | |
|       <prompt>What now?</prompt> prompt you can tell it to
 | |
|       <command>send</command>, <command>list</command>, <command>edit</command>,
 | |
|       <command>push</command>, and <command>quit</command>. Most
 | |
|       of these commands are self-explanatory. So the message sending
 | |
|       process involves copying a component file, editing your email,
 | |
|       and then telling the <command>whatnow</command> program what to do with
 | |
|       your email.</para>
 | |
| 
 | |
|     <sect2>
 | |
|       <title><command>comp</command>, <command>forw</command>,
 | |
| 	<command>reply</command>—compose, forward or reply to a message
 | |
| 	to someone</title>
 | |
| 
 | |
|       <para>The <command>comp</command> program has a few useful command line
 | |
| 	options. The most important one to know right now is the
 | |
| 	<option>-editor</option> option. When MH is installed the
 | |
| 	default editor is usually a program called
 | |
| 	<command>prompter</command> which comes with MH. It is not a very
 | |
| 	exciting editor and basically just gets the job done. So when
 | |
| 	you go to compose a message to someone you might want to use
 | |
| 	<command>comp -editor /usr/bin/vi</command> or <command>comp -editor
 | |
| 	/usr/local/bin/pico</command> instead. Once you have run
 | |
| 	<emphasis>comp</emphasis> you are in your editor and you see
 | |
| 	something that looks like this:</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>To:
 | |
| cc:
 | |
| Subject:
 | |
| --------</screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>You need to put the person you are sending the mail to
 | |
| 	after the <literal>To:</literal> line. It works the same way for the
 | |
| 	other headers also, so you would need to put your subject
 | |
| 	after the <literal>Subject:</literal> line. Then you would just put
 | |
| 	the body of your message after the dashed lines. It may seem a
 | |
| 	bit simplistic since a lot of email programs have special
 | |
| 	requesters that ask you for this information but there really
 | |
| 	is no point to that. Plus this really gives you excellent
 | |
| 	flexibility.</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>To:<userinput>freebsd-rave@FreeBSD.org</userinput>
 | |
| cc:
 | |
| Subject:<userinput>And on the 8th day God created the FreeBSD core team</userinput>
 | |
| --------
 | |
| <userinput>Wow this is an amazing operating system. Thanks!</userinput></screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>You can now save this message and exit your editor. You
 | |
| 	will see the <prompt>What now?</prompt> prompt and you can type in
 | |
| 	<userinput>send</userinput> or <userinput>s</userinput> and hit
 | |
| 	<keycap>return</keycap>. Then the FreeBSD core team will receive
 | |
| 	their just rewards. As I mentioned earlier, you can also use
 | |
| 	other commands at the <prompt>What now?</prompt> prompt.
 | |
| 	For example you can use <command>quit</command>, if you do not want
 | |
| 	to send the message.</para>
 | |
| 
 | |
|       <para>The <command>forw</command> command is stunningly similar. The
 | |
| 	big difference being that the message you are forwarding is
 | |
| 	automatically included in the outgoing message. When you run
 | |
| 	<command>forw</command> it will forward your current message. You can
 | |
| 	always tell it to forward something else by doing something
 | |
| 	like <command>forw 23</command> and then message number 23 will be
 | |
| 	put in your outgoing message instead of the current message.
 | |
| 	Beyond those small differences <command>forw</command> functions
 | |
| 	exactly the same as <command>comp</command>. You go through the exact
 | |
| 	same message sending process.</para>
 | |
| 
 | |
|       <para>The <command>repl</command> command will reply to the
 | |
| 	current message, unless you give it a different message to
 | |
| 	reply to. <command>repl</command> will do its best to go ahead and
 | |
| 	fill in some of the email headers already. So you will notice
 | |
| 	that the <literal>To:</literal> header already has the address of the
 | |
| 	recipient in there. Also the <literal>Subject:</literal> line will
 | |
| 	already be filled in.  You then go about the normal message
 | |
| 	composition process and you are done. One useful command line
 | |
| 	option to know here is the <option>-cc</option> option. You
 | |
| 	can use <parameter>all</parameter>, <parameter>to</parameter>, <parameter>cc</parameter>,
 | |
| 	<parameter>me</parameter> after the <option>-cc</option> option to have
 | |
| 	<command>repl</command> automatically add the various addresses to
 | |
| 	the cc list in the message. You have probably noticed that the
 | |
| 	original message is not included. This is because most MH
 | |
| 	setups are configured to do this from the start.</para>
 | |
|     </sect2>
 | |
| 
 | |
|     <sect2>
 | |
|       <title><filename>components</filename>, and
 | |
| 	<filename>replcomps</filename>—components files for
 | |
| 	<command>comp</command> and <command>repl</command></title>
 | |
| 
 | |
|       <para>The <filename>components</filename> file is usually in
 | |
| 	<filename>/usr/local/lib/mh</filename>. You can copy that file
 | |
| 	into your MH Mail directory and edit to contain what you want
 | |
| 	it to contain. It is a fairly basic file. You have various
 | |
| 	email headers at the top, a dashed line and then nothing. The
 | |
| 	<command>comp</command> command just copies this
 | |
| 	<filename>components</filename> file and then edits it. You can add
 | |
| 	any kind of valid RFC822 header you want. For instance you
 | |
| 	could have something like this in your <filename>components</filename>
 | |
| 	file:</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>To:
 | |
| Fcc: out
 | |
| Subject:
 | |
| X-Mailer: MH 6.8.3
 | |
| X-Home-Page: http://www.FreeBSD.org/
 | |
| -------</screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>MH would then copy this components file and throw you into
 | |
| 	your editor. The <filename>components</filename> file is fairly
 | |
| 	simple.  If you wanted to have a signature on those messages
 | |
| 	you would just put your signature in that
 | |
| 	<filename>components</filename> file.</para>
 | |
| 
 | |
|       <para>The <filename>replcomps</filename> file is a bit more complex. The
 | |
| 	default <filename>replcomps</filename> looks like this:</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>%(lit)%(formataddr %<{reply-to}%?{from}%?{sender}%?{return-path}%>)\
 | |
| %<(nonnull)%(void(width))%(putaddr To: )\n%>\
 | |
| %(lit)%(formataddr{to})%(formataddr{cc})%(formataddr(me))\
 | |
| %<(nonnull)%(void(width))%(putaddr cc: )\n%>\
 | |
| %<{fcc}Fcc: %{fcc}\n%>\
 | |
| %<{subject}Subject: Re: %{subject}\n%>\
 | |
| %<{date}In-reply-to: Your message of "\
 | |
| %<(nodate{date})%{date}%|%(pretty{date})%>."%<{message-id}
 | |
|              %{message-id}%>\n%>\
 | |
| --------</screen>
 | |
|       </informalexample>
 | |
| 
 | |
|       <para>It is in the same basic format as the
 | |
| 	<filename>components</filename> file but it contains quite a few extra
 | |
| 	formatting codes. The <literal>%(lit)</literal> command makes room
 | |
| 	for the address. The <literal>%(formataddr</literal> is a function
 | |
| 	that returns a proper email address. The next part is
 | |
| 	<literal>%<</literal> which means if and the
 | |
| 	<literal>{reply-to}</literal> means the reply-to field in the
 | |
| 	original message. So that might be translated this way:</para>
 | |
| 
 | |
|       <informalexample>
 | |
| 	<screen>%<<emphasis remap=bf>if</emphasis> {reply-to} <emphasis remap=bf>the original message has a reply-to</emphasis> 
 | |
| then give that to formataddr, %? <emphasis remap=bf>else</emphasis> {from} <emphasis remap=bf>take the
 | |
| from address</emphasis>, %? <emphasis remap=bf>else</emphasis> {sender} <emphasis remap=bf>take the sender address</emphasis>, %?
 | |
| <emphasis remap=bf>else</emphasis> {return-path} <emphasis remap=bf>take the return-path from the original
 | |
| message</emphasis>, %> <emphasis remap=bf>endif</emphasis>.</screen>
 | |
|       </informalexample>
 | |
|   
 | |
|       <para>As you can tell MH formatting can get rather involved. You
 | |
| 	can probably decipher what most of the other functions and
 | |
| 	variables mean. All of the information on writing these format
 | |
| 	strings is in the MH-Format man page. The really nice thing is
 | |
| 	that once you have built your customized
 | |
| 	<filename>replcomps</filename> file you will not need to touch it again.
 | |
| 	No other email program really gives you the power and
 | |
| 	flexibility that MH gives you.</para>
 | |
|     </sect2>
 | |
|   </sect1>
 | |
| </article>
 |