mhfixmsg(1mh) - phpMan

Command: man perldoc info search(apropos)  


MHFIXMSG(1mh)                                                                       MHFIXMSG(1mh)

NAME
       mhfixmsg - nmh's MIME-email rewriter with various transformations

SYNOPSIS
       mhfixmsg [-help] [-version] [+folder] [msgs | absolute pathname | -file file] [-decodetext
            8bit|7bit|binary | -nodecodetext] [-decodetypes type/[subtype][,...]]  [-crlfline-
            breaks | -nocrlflinebreaks] [-textcharset charset | -notextcharset] [-reformat |
            -noreformat] [-replacetextplain | -noreplacetextplain] [-fixboundary | -nofixbound-
            ary] [-fixcte | -nofixcte] [-fixtype mimetype] [-outfile outfile] [-rmmproc program]
            [-normmproc] [-changecur | -nochangecur] [-verbose | -noverbose]

DESCRIPTION
       mhfixmsg rewrites MIME messages, applying specific transformations  such  as  decoding  of
       MIME-encoded message parts and repairing invalid MIME headers.

       MIME  messages are specified in RFC 2045 to RFC 2049 (see mhbuild(1)).  The mhlist command
       is invaluable for viewing the content structure of MIME messages.   mhfixmsg  passes  non-
       MIME  messages through without any transformations.  If no transformations apply to a MIME
       message, the original message or file is not modified  or  removed.   Thus,  mhfixmsg  can
       safely be run multiple times on a message.

       The -decodetext switch enables a transformation to decode each base64 and quoted-printable
       text message part to the selected 8-bit, 7-bit, or binary encoding.  If 7-bit is  selected
       for  a base64 part but it will only fit 8-bit, as defined by RFC 2045, then it will be de-
       coded to 8-bit quoted-printable.  Similarly, with 8-bit, if the decoded text would be  bi-
       nary,  then  the  part  is not decoded (and a message will be displayed if -verbose is en-
       abled).  Note that -decodetext binary can produce messages that are not RFC  2045  compli-
       ant.

       When  the  -decodetext  switch  is enabled, each carriage return character that precedes a
       linefeed character is removed from text parts encoded in ASCII, ISO-8859-x, UTF-8, or Win-
       dows-12xx.

       The  -decodetypes  switch  specifies the message parts, by type and optionally subtype, to
       which -decodetext applies.  Its argument is a comma-separated list  of  type/subtype  ele-
       ments.  If an element does not contain a subtype, then -decodetext applies to all subtypes
       of the type.  The default is -decodetypes text; it can be overridden, e.g., with  -decode-
       types text/plain to restrict -decodetext to just text/plain parts.

       By  default,  carriage return characters are preserved or inserted at the end of each line
       of text content.  The -crlflinebreaks switch selects this behavior and is enabled  by  de-
       fault.   The  -nocrlflinebreaks  switch  causes  carriage return characters to be stripped
       from, and not inserted in, text content when it is decoded and encoded.  Note that its use
       can cause the generation of MIME messages that do not conform to RFC 2046, <section>4.1.1,
       paragraph 1.

       The -textcharset switch specifies that all text/plain parts of the  message(s)  should  be
       converted  to  charset.   Charset conversions require that nmh be built with iconv(3); see
       the mhparam(1) man page for how determine whether your nmh installation includes that.  To
       convert text parts other than text/plain, an external program can be used, via the -refor-
       mat switch.

       The -reformat switch enables a transformation for text parts in  the  message.   For  each
       text  part  that  is not text/plain and that does not have a corresponding text/plain in a
       multipart/alternative part, mhfixmsg looks for a mhfixmsg-format-text/subtype profile  en-
       try that matches the subtype of the part.  If one is found and can be used to successfully
       convert the part to text/plain, mhfixmsg inserts that text/plain part at the beginning  of
       the containing multipart/alternative part, if present.  If not, it creates a multipart/al-
       ternative part.

       With the -reformat switch, multipart/related parts are  handled  differently  than  multi-
       part/alternative.   If the multipart/related has only a single part that is not text/plain
       and can be converted to text/plain, a text/plain part is added and the type of the part is
       changed  to  multipart/alternative.   If  the multipart/related has more than one part but
       does not have a text/plain part, mhfixmsg tries to add one.

       The -replacetextplain switch broadens the applicability of -reformat, by always  replacing
       a  corresponding  text/plain part, if one exists.  If -verbose is enabled, the replacement
       will be shown as two steps:  a removal of the text/plain part, followed by the  usual  in-
       sertion of a new part.

       -reformat  requires a profile entry for each text part subtype to be reformatted.  The mh-
       fixmsg-format-text/subtype profile entries are based on external conversion programs,  and
       are  used in the same way that mhshow uses its mhshow-show-text/subtype entries.  When nmh
       is installed, it searches for a conversion program for text/html content, and  if  one  is
       found,  inserts  a  mhfixmsg-format-text/html entry in /etc/nmh/mhn.defaults.  An entry of
       the same name in the user's profile takes precedence.  The user can add entries for  other
       text subtypes to their profile.

       The  -fixboundary  switch  enables  a transformation to repair the boundary portion of the
       Content-Type header field of the message to match the boundaries of the  outermost  multi-
       part  part of the message, if it does not.  That condition is indicated by a "bogus multi-
       part content in message" error message from mhlist and other nmh programs that parse  MIME
       messages.

       The  -fixcte  switch enables a transformation to change the Content-Transfer-Encoding from
       an invalid value to 8-bit in message parts with a Content-Type of multipart  and  message,
       as  required by RFC 2045, <section>6.4.  That condition is indicated by a "must be encoded
       in 7bit, 8bit, or binary" error message from mhlist and other nmh programs that parse MIME
       messages.

       The  -fixtype switch ensures that each part of the message has the correct MIME type shown
       in its Content-Type header.  It may be repeated.  It is typically used to replace  "appli-
       cation/octet-stream"  with a more descriptive MIME type.  It may not be used for multipart
       and message types.

       mhfixmsg applies two transformations unconditionally.  The  first  removes  an  extraneous
       trailing  semicolon  from the parameter lists of MIME header field values.  The second re-
       places RFC 2047 encoding with RFC 2231 encoding of name and filename  parameters  in  Con-
       tent-Type and Content-Disposition header field values, respectively.

       The  -verbose switch directs mhfixmsg to output informational message for each transforma-
       tion applied.

       The return status of mhfixmsg is 0 if all of the requested transformations are  performed,
       or  non-zero otherwise.  (mhfixmsg will not decode to binary content with the default -de-
       codetext setting, but a request to do so is not considered a failure, and  is  noted  with
       -verbose.)   If  a problem is detected with any one of multiple messages such that the re-
       turn status is non-zero, then none of the messages will be modified.

       The -file file switch directs mhfixmsg to use the specified file as  the  source  message,
       rather  than  a message from a folder.  Only one file argument may be provided.  The -file
       switch is implied if file is an absolute pathname.  If the file is "-", then mhfixmsg  ac-
       cepts  the source message on the standard input stream.  If the -outfile switch is not en-
       abled when using the standard input stream, mhfixmsg will not produce a transformed output
       message.

       mhfixmsg, by default, transforms the message in place.  If the -outfile switch is enabled,
       then mhfixmsg does not modify the input message or file, but instead places its output  in
       the specified file.  An outfile name of "-" specifies the standard output stream.

       Combined  with the -verbose switch, the -outfile switch can be used to show what transfor-
       mations mhfixmsg would apply without actually applying them, e.g.,

            mhfixmsg -outfile /dev/null -verbose

       As always, this usage obeys any mhfixmsg switches in the user's profile.

       -outfile can be combined with rcvstore to add a single transformed message to a  different
       folder, e.g.,

            mhfixmsg -outfile - | \
            /usr/lib/mh/rcvstore +folder

   Summary of Applicability
       The  transformations  apply to the parts of a message depending on content type and/or en-
       coding as follows:

            -decodetext         base64 and quoted-printable encoded text parts
            -decodetypes        limits parts to which -decodetext applies
            -crlflinebreaks     text parts
            -textcharset        text/plain parts
            -reformat           text parts that are not text/plain
            -fixboundary        outermost multipart part
            -fixcte             multipart or message part
            -fixtype            all except multipart and message parts

   Backup of Original Message/File
       If it applies any transformations to a message or file, and the  -outfile  switch  is  not
       used,  mhfixmsg  backs  up the original the same way as rmm.  That is, it uses the rmmproc
       profile component, if present.  If not present, mhfixmsg moves the original message  to  a
       backup  file.   The  -rmmproc  switch may be used to override this profile component.  The
       -normmproc switch disables the use of any rmmproc profile component and negates all  prior
       -rmmproc switches.

   Integration with inc
       mhfixmsg  can  be  used  as  an add-hook, as described in /usr/share/doc/nmh/README-HOOKS.
       Note that add-hooks are called from all nmh programs that add a message to a  folder,  not
       just  inc.   Alternatively,  a simple shell alias or function can be used to call mhfixmsg
       immediately after a successful invocation of inc.  One approach could be based on:

            msgs=`inc -format '%(msg)'`  &&  [  -n  "$msgs"  ]   &&   scan  $msgs   &&   mhfixmsg
            -nochangecur $msgs

       Another  approach  would rely on adding a sequence to Unseen-Sequence, which inc sets with
       the newly incorporated messages.  Those could then be supplied to mhfixmsg.  An example is
       shown below.

   Integration with procmail
       By way of example, here is an excerpt from a procmailrc file that filters messages through
       mhfixmsg before storing them in the user's nmh-workers folder.  It also stores the  incom-
       ing message in the Backups folder in a filename generated by mkstemp, which is a non-POSIX
       utility to generate a temporary file.  Alternatively, mhfixmsg could be called on the mes-
       sage after it is stored.

            PATH = /usr/bin/mh:$PATH
            LANG = en_US.utf8
            MAILDIR = `mhparam path`
            #### The Backups directory is relative to MAILDIR.
            MKSTEMP = 'mkstemp -directory Backups -prefix mhfixmsg'
            MHFIXMSG = 'mhfixmsg -noverbose -file - -outfile -'
            STORE = /usr/lib/mh/rcvstore

            :0 w: nmh-workers/procmail.$LOCKEXT
            * ^TOnmh-workers AT nongnu.org
            | tee `$MKSTEMP` | $MHFIXMSG | $STORE +nmh-workers

EXAMPLES
   Basic usage
       To run mhfixmsg on the current message in the current folder, with default transformations
       to fix MIME boundaries and Content-Transfer-Encoding, to decode text  and  application/ics
       content parts to 8 bit, and to add a corresponding text/plain part where lacking:

              mhfixmsg -verbose

   Specified folder and messages
       To run mhfixmsg on specified messages, without its informational output:

              mhfixmsg +inbox last:4

   View without modification
       By  default,  mhfixmsg  transforms  the message in place.  To view the MIME structure that
       would result from running mhfixmsg on the current message, without modifying the message:

              mhfixmsg -outfile - | mhlist -file -

   Search message without modification
       To search the current message, which possibly contains base64 or quoted printable  encoded
       text parts, without modifying it, use the -outfile switch:

              mhfixmsg -outfile - | grep pattern

       -outfile  can  be abbreviated in usual MH fashion, e.g., to -o.  The search will be on the
       entire message, not just text parts.

   Translate text/plain parts to UTF-8
       To translate all text/plain parts in the current message to UTF-8, in addition to  all  of
       the default transformations:

              mhfixmsg -textcharset utf-8

   Fix all messages in a folder
       To run mhfixmsg on all of the messages in a folder:

              mhfixmsg +folder all

       Alternatively,  mhfixmsg can be run on each message separately, e.g., using a Bourne shell
       loop:

              for msg in `pick +folder`; do mhfixmsg +folder $msg; done

       The two appearances of the +folder switch in that command protect against concurrent  con-
       text changes by other nmh command invocations.

   Run on newly incorporated messages
       To run mhfixmsg on messages as they are incorporated:

              inc  &&  mhfixmsg -nochangecur unseen

       This  assumes that the Unseen-Sequence profile entry is set to unseen, as shown in mh-pro-
       file(5).

FILES
       mhfixmsg looks for mhn.defaults in multiple locations: absolute pathnames are accessed di-
       rectly,  tilde  expansion  is  done on usernames, and files are searched for in the user's
       Mail directory as  specified  in  their  profile.   If  not  found  there,  the  directory
       "/etc/nmh" is checked.

       $HOME/.mh_profile      The user profile
       /etc/nmh/mhn.defaults  Default mhfixmsg conversion entries

PROFILE COMPONENTS
       Path:                To determine the user's nmh directory
       Current-Folder:      To find the default current folder
       rmmproc:             Program to delete original messages or files

SEE ALSO
       iconv(3),   inc(1),   mh-mkstemp(1),  mh-profile(5),  mhbuild(1),  mhlist(1),  mhparam(1),
       mhshow(1), procmail(1), procmailrc(5), rcvstore(1), rmm(1)

DEFAULTS
       `+folder' defaults to the current folder
       `msgs' defaults to cur
       `-decodetext 8bit'
       `-decodetypes text,application/ics'
       `-crlflinebreaks'
       `-notextcharset'
       `-reformat'
       `-noreplacetextplain'
       `-fixboundary'
       `-fixcte'
       `-changecur'
       `-noverbose'

CONTEXT
       If a folder is given, it will become the current folder.  The last message selected from a
       folder will become the current message, unless the -nochangecur switch is enabled.  If the
       -file switch or an absolute pathname is used, the context will not be modified.

nmh-1.7.1                                   2016-11-08                              MHFIXMSG(1mh)

Generated by $Id: phpMan.php,v 4.55 2007/09/05 04:42:51 chedong Exp $ Author: Che Dong
On Apache
Under GNU General Public License
2024-10-04 22:27 @3.236.112.101 CrawledBy CCBot/2.0 (https://commoncrawl.org/faq/)
Valid XHTML 1.0!Valid CSS!