home *** CD-ROM | disk | FTP | other *** search
- ----------------------------------------------------------------------
- Pegasus Mail Message Templates
- ----------------------------------------------------------------------
- Pegasus Mail System,
- Copyright (c) 1990-99, David Harris, All Rights Reserved.
- ----------------------------------------------------------------------
-
-
- Contents:
-
- 1: Overview of Message Templates
- 2: Types of Templates
- 3: Using Templates within Pegasus Mail
- 4: The Message Template Script Language
- 4.1: String literals
- 4.1.1: Filenames
- 4.2: Optional parameters
- 4.3: Command substitutions
- 4.4: Script language commands
-
-
-
- 1: Overview of Message Templates
- --------------------------------
-
- Imagine that you're the web master for your Internet site; you receive a
- huge amount of mail for much of which the answer is essentially the
- same... You laboriously reply to the message, remove the pieces you don't
- want, type in your canned response, then send the message. Wouldn't it be
- good if there was some way of automating all of this? Well, there is --
- Message Templates.
-
- A Message Template is simply a script that tells Pegasus Mail how to
- compose a mail message. The template script commands allow you to set any
- address or feature field, include the original message for replies (or a
- portion of the message), change or modify addresses, add attachments and
- generally give you complete control over the shape of your automatically-
- generated message. What's even better, you can define variables in
- templates: when you use the template, Pegasus Mail will prompt you for
- values for the variables it contains; the script language can then take
- the values you enter, manipulate them, and insert them seamlessly into
- the generated message.
-
- Using a message template, you can generate a complex mail message and
- send it with only a couple of keystrokes.
-
- What uses might you have for a template? Here are some ideas:
-
- * Helpdesk submissions (as per the sample HELPDESK.PM5 template)
-
- * Mail server management forms (to simplify the process of
- subscribing to and unsubscribing from lists)
-
- * Forms: any kind of complex data-entry based mail form could
- be generated using a template
-
- * Order submission
-
- * Automated replies
-
-
- 2: Types of templates
- ---------------------
-
- Pegasus Mail supports two types of templates - those used to create new
- messages from scratch, and those used to create replies to messages.
- Template files are simply plain text files containing template script
- language commands, one per line.
-
- Templates used to create new messages have the extension .PM5; the name
- portion can be anything you wish.
-
- Templates used to create replies to messages have the extension .PM6; once
- again, the name portion can be anything you wish.
-
- For both types of template, the script language's TITLE command must be
- the first line in the file, so that Pegasus Mail can show the name in its
- selector window. Pegasus Mail will not burrow through a template file
- looking for a TITLE command if it is not on the first line.
-
- Template files can be located in your home mailbox directory, or may be
- placed in the same directory as the Pegasus Mail executable program, in
- which case they become system-wide and are made available to all users
- running that copy of the program. There is no effective limit on the
- number of templates you can define.
-
- For now, in order to create a template file you must use a text editor of
- some kind - for instance, the Windows NOTEPAD applet. If you use NOTEPAD,
- make sure that the Wordwrap option is turned off - each line in a
- template file must contain a single command and you cannot run lines
- together. Future versions of Pegasus Mail may include a user-interface for
- creating template files.
-
-
- 3: Using templates within Pegasus Mail
- --------------------------------------
-
- You can create a new message using a template by selecting Template...
- from the New Message submenu of the File menu. This will open a dialog
- listing all the templates available on your system. Select the template
- you want to use by highlighting it and clicking Open, or by double-
- clicking it. A window will open prompting you for any variables the
- template uses; at this point, you can choose whether to open a new
- message editor window filled out with the message created by the
- template, or simply to send the message without further ado.
-
- You can use a template to create a reply to a message in one of two ways:
-
- 1: Right-click the message and choose "Reply using template..." from
- the popup menu
-
- 2: Highlight the message, then hold down <Shift> as you press the
- "Reply" button, or else hold down <Shift> and press the R key.
-
-
-
- 4: The Message Template Script Language
- ---------------------------------------
-
- The script language used by Pegasus Mail templates is very simple. Each
- command in the file must appear on a single line of its own -- commands
- may not wrap lines, nor may more than one command appear on a single
- line. Lines starting with \, * ; or # are treated as comments and are
- ignored.
-
-
- 4.1: String literals
-
- Most template script commands in the language accept strings as
- parameters. String literals of this kind must be entered in quote
- characters if they contain spaces or special characters.
-
- For example, if you want to use the "insert" command to write the string
-
- Mary had a little lamb
-
- into an outgoing message, you would need to enter the command like this:
-
- insert "Mary had a little lamb"
-
- since otherwise, only the word "Mary" would be inserted.
-
- If your string contains a quote character, or a backslash character, then
- you will need to perform a small amount of conversion. So, if you want to
- insert the string
-
- Mary had a "little" lamb
-
- you would have to enter the "insert" command like this:
-
- insert "Mary had a \"little\" lamb"
-
- These rules for string construction apply in all places throughout the
- script language.
-
-
- 4.1.1: Filenames
-
- Filenames are treated as strings by the script language, and as such are
- subject to the same rules. In particular note that long filenames
- containing spaces will need to be quoted, and that '\' characters will
- need to be doubled in file paths... So, if you wanted to use the include
- command to include the file
-
- c:\docs\Mary's "little" lamb
-
- You would need to form the command as
-
- include "c:\\docs\\Mary's \"little\" lamb"
-
-
- 4.2: Optional parameters
-
- Some script commands are shown as having "optional" parameters. This
- notion needs some clarification... A parameter may be omitted only if all
- the parameters following it are also omitted - it is not possible to omit
- only one parameter from the middle of a list.
-
- So, using the "include" command as an example, if you wanted to include a
- file in quoted format, you would have to include the "0" value for the
- count parameter as well.
-
-
- 4.3: Command substitutions
-
- Practically any string parameter to a script command can contain command
- substitutions: these are special character sequences that are replaced by
- variables or other information when they are encountered. Pegasus Mail
- recognizes the following command substitutions in any place where they
- may be used:
-
- ~vvariable_name~ The current value of a template script variable
- ~z A single newline (CR/LF)
- ~f The "from" field of the original message
- ~s The "subject" field of the original message
- ~r The preferred reply address for the message
- ~kfieldname~ Any field from the original message
- ~n The current user's basic username
- ~i The current user's Internet e-mail address
- ~8 The current user's username truncated to 8 chars
- ~p The current user's personal name preference
- ~d A random integer expressed as 4 hex digits
- ~y The current date and time in RFC822 format
- ~%name% The value of environment variable %name%
- ~lname~l The user's address looked up from a synonym file
- ~a The Pegasus Mail executable directory
- ~h The current user's home mailbox
- ~w The current user's new mailbox
- ~~ A single tilde (~).
-
- Examples:
-
- Assuming that the current user's name is "david" and the variable
- "sub" has been assigned the value "your order", the string
-
- "This is a message from ~8, regarding ~vsub~"
-
- would yield the following string after substitution:
-
- "This is a message from david, regarding your order."
-
- Command substitution is the single most powerful feature of the scripting
- language used for templates, and a good understanding of what it can do
- is essential for writing useful scripts.
-
-
- 4.4: Script language commands
-
- The following commands are valid in template scripts.
-
- title Set the title for a template script
- helpfile Set the help file for a template script
- picture Add a picture to the variable prompt dialog
- text Add a line of informational text to the prompt dialog
- option Set options controlling the way the template is processed
-
- string Create a string variable for the script
- set Set a message field or variable value
- insert Write a formatted line into the message body
- include Include a file or the original message body
- attach Attach a file to the message
-
- extract Extract elements from an e-mail address
- lookup Look up an item from a list using a key value
-
- chain Execute another template when the current template finishes
-
-
- # title <string>
-
- Set the title for the script file. string can be any string up to 50
- characters in length, and can contain all command substitutions except
- for variables, which are not defined at the time this command is
- processed.
-
-
- # helpfile <filename> [section]
-
- Set the help file which should be accessed when the user clicks the Help
- button in the variable prompt dialog. filename should be a full reference
- to any valid Windows Help file (*.HLP) on your system, and may contain
- all command substitions except for variables, which will have not been
- defined at the time this command is processed. section is an optional
- integer value that indicates the context help section within the help
- file that should be presented when the help button is pressed. If it is
- absent, section 0, the table of contents, is presented.
-
-
- # option <option_name> = <value>
-
- This command controls aspects of the way the template behaves as it is
- being processed. One option_name value is currently defined:
-
- "EDITOR" = "Yes" or "No".
- - Determines the state of the "Send message without opening a message
- editor" control in the template's variable dialog.
-
- Example: OPTION EDITOR = NO
- - Checks the "send without editor" control by default.
-
-
- # string <name> ["Default"] ["Prompt"] [len] [flags]
-
- Define a variable for use within the script. A maximum of 20 variables
- may be defined for any script. name is the name for the variable; it must
- not contain spaces, and is not case-sensitive (so var1 and VAR1 are
- considered the same). All the parameters following the name parameter are
- optional, and you can end the string early if you wish (you cannot omit a
- parameter if you need to supply a parameter following it on the line).
- "default" is a string which should be used as a default value for the
- variable: if it contains spaces or special characters, it must be
- enclosed in quotes (see "String literals", above, for more information).
- If this parameter is omitted, the default value is an empty string.
- "prompt" is the string Pegasus Mail should place next to the editing field
- in the variable prompt dialog. If omitted or zero-length, Pegasus Mail
- will not prompt the user for a value for this variable. "len" is an integer
- defining the maximum allowable length of this variable. If omitted, the
- default is "no limit". "flags" defines the format and type of the variable:
- the following flag values are available:
-
- multiline creates a multi-line variable
- address creates an e-mail address variable
- filename creates a filename variable
- password creates a password variable
- list creates a list - see below for more details
- uppercase specifies that the variable must be all in uppercase
-
- Only "uppercase" may be used with other values.
-
-
- Creating LIST variables
-
- When you use the LIST flag in a STRING statement, you create a variable
- that has a list of possible values from which the user can select. LIST
- variables require that you provide a DEFAULT value for the variable,
- which contains the list of possible values the variable can have. The
- first character in the default value should be the character used to
- separate the list items from each other, and the remainder of the default
- value should be the items, separated by that character.
-
- Example: you want to allow the user to select from the values "Red",
- "Green" and "Blue": your string statement would look like this:
-
- string v1 ";Red;Green;Blue" "Select a colour" 0 list
-
-
- # set <field> = <"value">
- or set variable <variable_name> = <"value">
-
- The first form of this command sets a field within the mail message being
- generated to the specified value. field may be one of the following:
-
- to
- cc
- bcc
- reply-to
- subject
- identity (all take an obvious string parameter)
-
- urgent
- confirm-reading
- confirm-delivery
- copyself
- volatile
- mime (all take either a "Y" or "N" parameter)
-
- header (a fully-formed e-mail header including the keyword)
- encrypted ("encryptor_name", "password", "flags" - see below
- for more details).
-
- When encrypting a template message, use the "encrypted" parameter to the
- set command. "encryptor" is the name of the module that should be used
- for encryption - to use the Pegasus Mail built in encryptor, use the name
- "builtin". "password" is the password for the message - this can be up to
- 96 characters in length. "flags" controls the type of encryption
- performed; to encrypt a message, set it to 1; to add a digital signature
- to the message, set it to 4; to perform both operations, set it to 5.
-
- The "volatile" parameter tells Pegasus Mail to write the message directly
- to final form when sending using the built-in SMTP transport. You will
- need to set this to "Y" if you are attaching files that will be deleted
- once the template has been processed.
-
- The second form of the "set" command sets the value of any defined
- variable.
-
- Both forms of this command support all command substitutions for the value
- parameter. To copy the value of one variable to another, use an
- expression containing the ~v command substitution, like this:
-
- set variable v1 = "~vv2~"
-
-
- # insert <"string">
-
- Write data into the body of the message being generated. string can
- contain any command substitution: if it does not contain a ~z
- substitution to force a line break, then the next insert command will
- write data onto the same line in the body. A single insert command may
- not insert more than 1024 characters into the message body.
-
-
- # include <filename> [count] [flags]
- or include message [count] [flags]
-
- Include either a text file, or the body from the message to which a reply
- is being generated. The text from the file or message is included as-is
- into the message body - command substitutions are not performed on the
- included data. The filename parameter may contain any valid command
- substitutions. If "count" is present and non-zero, only that many lines of
- the included file or the body of the included message will be read. The
- "flags" item can be any combination of the following values:
-
- quoted "Comment-out" the included text using "> "
- noheaders If the file is a message, omit its RFC822 headers
- keyheaders If the file is a message, include only "significant" headers
- nobody If the file is a message, omit the message body
- message Only valid for files: the file is an RFC822 message
-
-
- # attach <filename> [type] [encoding] ["Desc"]
-
- Attach a file to the generated message. Only "filename" is a mandatory
- parameter - the others can be omitted and are sensibly defaulted. Any
- valid command substitution can be used in the filename. If the filename
- contains spaces, it must be quoted. "type" is any string describing the
- type of the file - for instance, "RTF_FILE". It must not contain spaces
- and is not constrained to the list of possible values inside Pegasus Mail
- itself. "encoding" is an integer value that specifies how the file should
- be encoded for transfer; the following values are defined - 0 (Pegasus
- Mail decides), 1 (No encoding - very dangerous), 2 (ASCII text), 3
- (UUencoding), 4 (BinHex 4.0) and 5 (Basic MIME encoding). Unless you are
- sure of what you are doing, use 0 for this field. "desc" is a textual
- description of the file; it may contain any text, including spaces, and
- is truncated at 63 characters.
-
-
- # picture <flags> <filename>
-
- Add a picture at the top of the variable prompt dialog. The picture
- specified by filename must be a Windows BMP file in 16 or 256 colours:
- owing to quirks in the way Windows handles 256 colour bitmaps, we
- strongly recommend that you use 16-colour bitmaps if your display runs in
- 256 colour mode or lower. For the Win16 version of Pegasus Mail, the
- bitmap must not be larger than 60,000 bytes. You may use any command
- substitution in the filename parameter. The bitmap is centred
- horizontally in the display and the dialog will adjust size to fit the
- vertical dimensions of the image. Exactly one image may be added to the
- dialog.
-
- flags will be used in future to offer extra formatting options. For now,
- it is unused, must be present, and should be set to zero.
-
- Note: if the filename contains spaces or special characters, it must be
- enclosed in quotes.
-
-
- # text <flags> <"string">
-
- Add a line of descriptive text to the dialog presented to prompt for
- script variables. The line of text is added above any variable editing
- fields, and below any picture defined using a picture command. You may
- specify up to 10 lines of descriptive text, and each line may contain any
- valid command substitution. The "flags" parameter will be used in future,
- but should currently be set to zero.
-
- To introduce a blank line between groups of lines, use a text statement
- with an empty quoted string - like this: text "".
-
-
- # extract address <var1> <var2>
- or extract text <var1> <var2>
- or extract user <var1> <var2>
- or extract domain <var1> <var2>
-
- Extract a component from an e-mail address. "var1" refers to the variable
- containing the address to be manipulated. "var2" is the variable where
- the result of the manipulation should be placed - it can be the same as
- "var1".
-
- extract address yields the minimum form of the e-mail address
- extract text yields the personal name field from the address
- extract user yields the simple user name portion of the address
- extract domain yields the domain portion of the address
-
-
- # lookup "string" <var1> <var2> <var3>
-
- Attempt to locate the string "string" in the list variable "var1"; if a
- match is found, note the position in the list where the item was matched,
- then copy the item at the same ordinal position in the list variable
- "var2" into the variable "var3". See above under the description of the
- "set" command for more information on list variables. It is an error for
- either "var1" or "var2" to be anything other than a list variable. If
- "string" cannot be found in "var1", variable "var3" is not changed.
-
- Example: list variable "v1" contains "Monday", "Tuesday" and "Wednesday"
- list variable "v2" contains "Open", "Closed" and "Open".
-
- The command
-
- lookup "Tuesday" v1 v2 v3
-
- will result in variable v3 containing the value "Closed".
-
- A common form of this command will use the current value of "var1" as the
- string parameter, using the command substitution "~vvar1~".
-
-
- # chain "filename"
-
- Execute another template when the current template completes. "filename"
- should be the path to a valid template file, and may contain command
- substitutions. Only one "chain" command may be used per template. If the
- current template is cancelled by the user, the chain command will not be
- executed.
-
-