704 lines
		
	
	
	
		
			30 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			704 lines
		
	
	
	
		
			30 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| <!-- $Id: article.sgml,v 1.2 1997-07-01 21:38:44 max Exp $ -->
 | |
| <!-- FreeBSD Documentation Project -->
 | |
| 
 | |
| <!DOCTYPE BOOK PUBLIC "-//Davenport//DTD DocBook V3.0//EN">
 | |
| <book>
 | |
| 
 | |
| <bookinfo>
 | |
| <bookbiblio>
 | |
| <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>
 | |
| 
 | |
| </bookbiblio>
 | |
| </bookinfo>
 | |
| 
 | |
| <chapter id="mhintro">
 | |
| <title>Introduction</title>
 | |
| 
 | |
| <para>MH started back in 1977 at the RAND Corporation, where the
 | |
| initial philosophies behind MH were developed. MH isn't 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</> 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># <userinput>pkg_add /cdrom/packages/mh-6.8.3.tgz</></screen>
 | |
| </informalexample>
 | |
| You will notice that it created a <filename>/usr/local/lib/mh</>
 | |
| directory for you as well as adding several binaries to the
 | |
| <filename>/usr/local/bin</> 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. Also you might 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>
 | |
| 
 | |
| </chapter>
 | |
| 
 | |
| <chapter>
 | |
| <title>Reading Mail</title>
 | |
| 
 | |
| <para>This section covers how to use <command>inc</>,
 | |
| <command>show</>, <command>scan</>, <command>next</>,
 | |
| <command>prev</>, <command>rmm</>, <command>rmf</>, and
 | |
| <command>msgchk</>.  One of the best things about MH is the
 | |
| consistent interface between programs. A few things to keep in mind
 | |
| when using these commands is how to specify message lists. In the
 | |
| case of <command>inc</> this doesn't really make any sense but with
 | |
| commands like <command>show</> it is useful to know. </para>
 | |
| 
 | |
| <para>A message list can consist of something like <parameter>23 20
 | |
| 16</> which will act on messages 23, 20 and 16. This is fairly simple
 | |
| but you can do more useful things like <parameter>23-30</> which will
 | |
| act on all the messages between 23 and 30. You can also specify
 | |
| something like <parameter>cur:10</> which will act on the current
 | |
| message and the next 9 messages. The <parameter>cur</>,
 | |
| <parameter>last</>, and <parameter>first</> messages are special
 | |
| messages that refer to the current, last or first message in the
 | |
| folder.</para>
 | |
| 
 | |
| 
 | |
| <sect1 id="inc">
 | |
| <title><command>inc</>, <command>msgchk</>—read in your new email or check it</title>
 | |
| 
 | |
| <para>If you just type in <userinput>inc</> and hit <keycap>return</>
 | |
| you will be well on your way to getting started with MH. The first
 | |
| time you run <command>inc</> it will setup your account to use all
 | |
| the MH defaults and ask you about creating a Mail directory. If you
 | |
| have mail waiting to be downloaded you will see something that looks
 | |
| like:
 | |
| <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>
 | |
| This is the same thing you will see from a <command>scan</> (see
 | |
| <xref linkend="scan">). If you just run <command>inc</> 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</> a few command
 | |
| line arguments. 
 | |
| <informalexample>
 | |
| <screen>tempest% <userinput>inc -host mail.pop.org -user <replaceable>username</> -norpop</></screen>
 | |
| </informalexample>
 | |
| That tells <command>inc</> to go to <parameter>mail.pop.org</> to
 | |
| download your email, and that your username on their system is
 | |
| <replaceable>username</>. The <option>-norpop</option> option tells
 | |
| <command>inc</> 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 inc such as audit files and scan format files
 | |
| this will get you going.</para>
 | |
| 
 | |
| <para>The <command>msgchk</> command is used to get information on
 | |
| whether or not you have new email. <command>msgchk</> takes the same
 | |
| <option>-host</option> and <option>-user</option> options that
 | |
| <command>inc</> takes.</para>
 | |
| 
 | |
| </sect1>
 | |
| 
 | |
| <sect1 id="show">
 | |
| <title><command>show</>, <command>next</> and <command>prev</>—displaying and moving through email</title>
 | |
| 
 | |
| <para><command>show</> is to show a letter in your current folder.
 | |
| Like <command>inc</>, <command>show</> is a fairly straightforward
 | |
| command. If you just type <userinput>show</> and hit <keycap>return</>
 | |
| then it displays the current message. You can also give specific
 | |
| message numbers to show:
 | |
| <informalexample>
 | |
| <screen>tempest% <userinput>show 32 45 56</></screen>
 | |
| </informalexample>
 | |
| This would display message numbers 32, 45 and 56 right after each
 | |
| other. Unless you change the default behavior <command>show</>
 | |
| basically just does a <command>more</> on the email message.</para>
 | |
| 
 | |
| <para><command>next</> is used to move onto the next message and
 | |
| <command>prev</> will go to the previous message. Both commands have
 | |
| an implied <command>show</> command so that when you go to the next
 | |
| message it automatically displays it.</para>
 | |
| 
 | |
| </sect1>
 | |
| 
 | |
| <sect1 id="scan">
 | |
| <title><command>scan</>—shows you a scan of your messages</title>
 | |
| 
 | |
| <para><command>scan</> will display a brief listing of the messages
 | |
| in your current folder. This is an example of what the
 | |
| <command>scan</> command will give you.
 | |
| <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>
 | |
| 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>+</> means that message is the current message, so if you do
 | |
| a <command>show</> 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</> is to have it read from a file. If you want to scan
 | |
| your incoming mailbox on FreeBSD without having to <command>inc</> it
 | |
| you can do <command>scan -file
 | |
| /var/mail/<replaceable>username</></command>. This can be used with
 | |
| any file that is in the <database>mbox</> format.</para>
 | |
| 
 | |
| </sect1>
 | |
| 
 | |
| <sect1 id="rmm">
 | |
| <title><command>rmm</> and <command>rmf</>—remove the current message or folder</title>
 | |
| 
 | |
| <para><command>rmm</> 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 need to
 | |
| through periodically and physically delete the <quote>removed</>
 | |
| messages.</para>
 | |
| 
 | |
| <para>The <command>rmf</> command is used to remove folders. This
 | |
| doesn't just rename the files but actually removes the from the hard
 | |
| drive so you should be careful when you use this command.</para>
 | |
| 
 | |
| </sect1>
 | |
| 
 | |
| <sect1 id="samplereading">
 | |
| <title>A typical session of reading with MH</title>
 | |
| 
 | |
| <para>The first thing that you will want to do is <command>inc</>
 | |
| your new mail. So at a shell prompt just type in <command>inc</> and
 | |
| hit <keycap>return</>.
 | |
| <informalexample>
 | |
| <screen>tempest% <userinput>inc</>
 | |
| 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 
 | |
| tempest%</screen>
 | |
| </informalexample>
 | |
| This shows you the new email that has been added to your mailbox. So
 | |
| the next thing to do is <command>show</> the email and move around.
 | |
| <informalexample>
 | |
| <screen>tempest% <userinput>show</>
 | |
| 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
 | |
| 
 | |
| tempest% <userinput>rmm</>
 | |
| tempest% <userinput>next</>
 | |
| 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>
 | |
| 
 | |
| <para>The <command>rmm</> removed the current message and the
 | |
| <command>next</> 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:
 | |
| <informalexample>
 | |
| <screen>tempest% <userinput>scan last:10</>
 | |
|   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 
 | |
| tempest%</screen>
 | |
| </informalexample>
 | |
| Then if I wanted to read message number 27 I would do a
 | |
| <userinput>show 27</> 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>
 | |
| 
 | |
| </sect1>
 | |
| </chapter>
 | |
| 
 | |
| <chapter>
 | |
| <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 haven't 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</> for the first time and it asked
 | |
| you if it could create a <filename>Mail</> directory it began storing
 | |
| everything in that directory. If you look at that directory you will
 | |
| find a directory named <filename>inbox</>. The <filename>inbox</>
 | |
| directory houses all of your incoming mail that hasn't 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</> directory, and messages
 | |
| in that folder are going to be stored in that directory. When new
 | |
| email comes in that new email is thrown into your <filename>inbox</>
 | |
| directory with a file name that is equivalent to the message number.
 | |
| So even if you didn't 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's 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</>
 | |
| 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</> it
 | |
| will scan your <filename>freebsd</> folder, and your current folder
 | |
| will be changed to <filename>freebsd</>. If you do a <command>show
 | |
| +freebsd 23 16 42</>, <command>show</> is going to switch to your
 | |
| <filename>freebsd</> folder and display messages 23, 16 and 42. So
 | |
| remember that <option>+<replaceable>folder</></> 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</>
 | |
| so doing a <command>folder +inbox</> 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</>.</para>
 | |
| 
 | |
| 
 | |
| <sect1>
 | |
| <title><command>pick</>—search email that matches certain criteria</title>
 | |
| 
 | |
| <para><command>pick</> is one of the more complex commands in the MH
 | |
| system. So you might want to read the
 | |
| <citerefentry><refentrytitle>pick</><manvolnum>1</></> man page for a
 | |
| more thorough understanding. At its simplest level you can do
 | |
| something like
 | |
| <informalexample>
 | |
| <screen>tempest% <userinput>pick -search pci</>
 | |
| 15
 | |
| 42
 | |
| 55
 | |
| 56
 | |
| 57</screen>
 | |
| </informalexample>
 | |
| 
 | |
| This will tell <command>pick</> 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</> in. You can then
 | |
| <command>show</> those messages and read them if you wish or
 | |
| <command>rmm</> them. You would have to specify something like
 | |
| <command>show 15 42 55-57</> to display them though. A slightly more
 | |
| useful thing to do is this:
 | |
| <informalexample>
 | |
| <screen>tempest% <userinput>pick -search pci -seq pick</>
 | |
| 5 hits
 | |
| tempest% <userinput>show pick</></screen>
 | |
| </informalexample>
 | |
| This will show you the same messages you just didn't have to work as
 | |
| hard to do it. The <option>-seq</option> option is really an
 | |
| abbreviation of <option>-sequence</option> and <command>pick</> 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</> 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</> allows you to use the following
 | |
| predefined search criteria:
 | |
| 
 | |
| <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 dat</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</> to find all emails with a certain reply-to in
 | |
| the header)</para>
 | |
| </listitem>
 | |
| </varlistentry>
 | |
| 
 | |
| </variablelist></para>
 | |
|   
 | |
| <para>This allows you to do things like
 | |
| <informalexample>
 | |
| <screen>tempest% <userinput>pick -to freebsd-hackers@freebsd.org -seq hackers</></screen>
 | |
| </informalexample>
 | |
| to get a list of all the email send to the FreeBSD hackers mailing
 | |
| list. <command>pick</> also allows you to group these criteria in
 | |
| different ways using the following options:
 | |
| <itemizedlist>
 | |
| 
 | |
| <listitem>
 | |
| <para>… <option>-and</option> …</para>
 | |
| </listitem>
 | |
| 
 | |
| <listitem>
 | |
| <para>… <option>-or</option> &hellip</para>
 | |
| </listitem>
 | |
| 
 | |
| <listitem>
 | |
| <para><option>-not</option> …</para>
 | |
| </listitem>
 | |
| 
 | |
| <listitem>
 | |
| <para><option>-lbrace</option> … <option>-rbrace</option></para>
 | |
| </listitem>
 | |
| 
 | |
| </itemizedlist>
 | |
| These commands allow you to do things like
 | |
| <informalexample>
 | |
| <screen>tempest% <userinput>pick -to freebsd-hackers -and -cc freebsd-hackers</></screen>
 | |
| </informalexample>
 | |
| 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
 | |
| <informalexample>
 | |
| <screen>tempest% <userinput>pick -lbrace -to freebsd-hackers -and 
 | |
|   -not -cc freebsd-questions -rbrace -and -subject pci</></screen>
 | |
| </informalexample></para>
 | |
| 
 | |
| <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
 | |
| aren't cc'd to the freebsd-questions list that contain something on
 | |
| pci 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</>. It's fairly complex so you might want to study
 | |
| the man page. This document is just to help you get acquainted with
 | |
| MH.</para>
 | |
|   
 | |
| </sect1>
 | |
| 
 | |
| <sect1>
 | |
| <title><command>folder</>, <command>folders</>, <command>refile</>—three useful programs for folder maintenance</title>
 | |
| 
 | |
| <para>There are three programs which are primarily just for
 | |
| manipulating your folders. The <command>folder</> program is used to
 | |
| switch between folders, pack them, and list them. At its simplest
 | |
| level you can do a <command>folder +<replaceable>newfolder</></> and
 | |
| you will be switched into <replaceable>newfolder</>. From there on
 | |
| out all your MH commands like <command>comp</>, <command>repl</>,
 | |
| <command>scan</>, and <command>show</> will act on that
 | |
| <command>newfolder</> folder.</para>
 | |
| 
 | |
| <para>Sometimes when you are reading and deleting messages you will
 | |
| develop <quote>holes</> in your folders. If you do a <command>scan</>
 | |
| 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 doesn't actually delete any
 | |
| messages though. So you may need to periodically go through and
 | |
| physically delete <command>rmm</>'d messages.</para>
 | |
| 
 | |
| <para>If you need statistics on your folders you can do a
 | |
| <command>folders</> 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</>. A <command>folders</> command looks
 | |
| like this:
 | |
| <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>
 | |
|   
 | |
| <para>The <command>refile</> command is what you use to move messages
 | |
| between folders. When you do something like <command>refile 23
 | |
| +netfuture</> message number 23 is moved into the
 | |
| <filename>netfuture</> folder. You could also do something like
 | |
| <command>refile 23 +netfuture/latest</> which would put message
 | |
| number 23 in a subfolder called <filename>latest</> under the
 | |
| <filename>netfuture</> 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</> but also list in your <filename>netfuture</>
 | |
| folder. You are probably beginning to realize some of the really
 | |
| powerful things you can do with MH.</para>
 | |
| 
 | |
| </sect1>
 | |
| </chapter>
 | |
| 
 | |
| <chapter>
 | |
| <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. Then to the <command>whatnow</> program. When
 | |
| you are at the <prompt>What now?</prompt> prompt you can tell it to
 | |
| <command>send</>, <command>list</>, <command>edit</>,
 | |
| <command>edit</>, <command>push</>, and <command>quit</>. 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</> program what to do with your
 | |
| email.</para>
 | |
| 
 | |
| 
 | |
| <sect1>
 | |
| <title><command>comp</>, <command>forw</>, <command>reply</>—compose, forward or reply to a message to someone</title>
 | |
| 
 | |
| <para>The <command>comp</> 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</> which comes
 | |
| with MH. It's 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/</> or <command>comp
 | |
| -editor /usr/local/bin/pico/</> instead. Once you have run
 | |
| <emphasis>comp</emphasis> you are in your editor and you see
 | |
| something that looks like this:
 | |
| <informalexample>
 | |
| <screen>To:
 | |
| cc:
 | |
| Subject:
 | |
| --------
 | |
| </screen>
 | |
| </informalexample></para>
 | |
| 
 | |
| <para>You need to put the person you are sending the mail to after the
 | |
| <literal>To:</> line. It works the same way for the other headers
 | |
| also, so you would need to put your subject after the
 | |
| <literal>Subject:</> 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 isn't any point to that. Plus this
 | |
| really gives you excellent flexibility.
 | |
| <informalexample>
 | |
| <screen>To:<userinput>freebsd-rave@freebsd.org</>
 | |
| cc:
 | |
| Subject:<userinput>And on the 8th day God created the FreeBSD core team</>
 | |
| --------
 | |
| <userinput>Wow this is an amazing operating system. Thanks!</></screen>
 | |
| </informalexample>
 | |
| You can now save this message and exit your editor. You will see the
 | |
| <prompt>What now?</> prompt and you can type in
 | |
| <userinput>send</> or <userinput>s</> and hit
 | |
| <keycap>return</>. Then the freebsd core team will receive their just
 | |
| rewards. As I mentioned earlier you can also use other commands, for
 | |
| example <command>quit</> if you don't want to send the
 | |
| message.</para>
 | |
| 
 | |
| <para>The <command>forw</> 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</> it
 | |
| will forward your current message. You can always tell it to forward
 | |
| something else by doing something like <command>forw 23</> and then
 | |
| message number 23 will be put in your outgoing message instead of the
 | |
| current message. Beyond those small differences <command>forw</>
 | |
| functions exactly the same as <command>comp</>. You go through the
 | |
| exact same message sending process.</para>
 | |
| 
 | |
| <para>The <command>repl</> command will reply to whatever your
 | |
| current message is, unless you give it a different message to reply
 | |
| to. <command>repl</> will do its best to go ahead and fill in some of
 | |
| the email headers already. So you will notice that the
 | |
| <literal>To:</> header already has the address of the recipient in
 | |
| there. Also the <literal>Subject:</> 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>to</>, <parameter>cc</>, <parameter>me</> after the
 | |
| <option>-cc</option> option to have <command>repl</> automatically
 | |
| add the various addresses to the cc list in the message. You have
 | |
| probably noticed that the original message isn't included. This is
 | |
| because most MH setups are configured to do this from the
 | |
| start.</para>
 | |
| 
 | |
| </sect1>
 | |
| 
 | |
| <sect1>
 | |
| <title><filename>components</>, and <filename>replcomps</>—components files for <command>comp</> and <command>repl</></title>
 | |
| 
 | |
| <para>The <filename>components</> 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</> 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</> file:
 | |
| <informalexample>
 | |
| <screen>To:
 | |
| Fcc: out
 | |
| Subject:
 | |
| X-Mailer: MH 6.8.3
 | |
| X-Home-Page: http://www.freebsd.org/
 | |
| -------</screen>
 | |
| </informalexample>
 | |
| 
 | |
| MH would then copy this components file and throw you into your
 | |
| editor. The <filename>components</> file is fairly simple. If you
 | |
| wanted to have a signature on those messages you would just put your
 | |
| signature in that <filename>components</> file.</para>
 | |
| 
 | |
| <para>The <filename>replcomps</> file is a bit more complex. The default
 | |
| <filename>replcomps</> looks like this:
 | |
| <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>
 | |
| 
 | |
| <para>It's in the same basic format as the <filename>components</> file but
 | |
| it contains quite a few extra formatting codes. The
 | |
| <literal>%(lit)</> command makes room for the address. The
 | |
| <literal>%(formataddr</> is a function that returns a proper email
 | |
| address. The next part is <literal>%<</literal> which means if and
 | |
| the <literal>{reply-to}</> means the reply-to field in the original
 | |
| message. So that might be translated this way:
 | |
| <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>
 | |
|   
 | |
| <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</> file you won't need to touch it
 | |
| again. No other email program really gives you the power and
 | |
| flexibility that MH gives you.</para>
 | |
|   
 | |
| </sect1>
 | |
| </chapter>
 | |
| </book>
 |