home *** CD-ROM | disk | FTP | other *** search
/ Using the Internet / 21003.iso / email / PEGASUS / WINPM222.ZIP / WINPMAIL.ZIP / UDG / UDG.TXT < prev   
Text File  |  1995-04-27  |  20KB  |  435 lines

  1. ┌────────────────────────────────────────────────────────────┐
  2. │                                                            │
  3. │    Pegasus Mail v3.0 user-defined gateway reference.       │
  4. │    This document is part of the Pegasus Mail manual set    │
  5. │    and is provided as a courtesy to users of Pegasus       │
  6. │    Mail.                                                   │
  7. │                                                            │
  8. │    Copyright 1992-93, David Harris, All Rights Reserved.   │
  9. │                                                            │
  10. └────────────────────────────────────────────────────────────┘
  11.  
  12.  
  13. User-defined gateways
  14. ---------------------
  15.  
  16. Pegasus Mail version 2.25 and later incorporate a feature which allows
  17. you to implement your own mail transport and have Pegasus Mail use it.
  18. The intention is that you will provide the mechanism for moving the
  19. messages and  attachments from place to place, while Pegasus Mail does
  20. the preparation, formatting and filing for you.
  21.  
  22. Here are some possible gateways you could develop:
  23.  
  24. *   An implementation of uucp for dial-in Internet mail
  25.  
  26. *   A standalone gateway which communicates with a machine attached 
  27. to your LAN, allowing you access to all your LAN mail features 
  28. from a remote machine (such a gateway is currently under development 
  29. as part of the Pegasus Mail system).
  30.  
  31. *   A custom system which takes LAN mail and transfers it via some 
  32. file transfer protocol to a mainframe.
  33.  
  34. *   A gateway to a facsimile server.
  35.  
  36. The possibilities are limited only by your imagination.
  37.  
  38.  
  39. The gateway process.
  40. -------------------
  41.  
  42. While Pegasus Mail offers considerable flexibility in the way it can
  43. interact with your gateway, be aware that creating a gateway will almost
  44. certainly involve a small amount of programming - typically, you will
  45. need to write the program which Pegasus Mail runs to deliver and receive
  46. mail. You can do this programming in any language which produces a
  47. program which could be run from DOS: Pegasus Mail is written in C, but
  48. you could easily write your gateway process in Pascal, Modula-II or even
  49. in Basic (God forbid!). Pegasus Mail invokes your gateway process when
  50. sending mail, or to check for new mail. In most cases, your gateway
  51. process must not write to the screen.
  52.  
  53. Note: you can use MS-DOS batch files as gateway processes.
  54.  
  55. What the gateway process does, and how you should do it is not covered in
  56. this manual - this is your part of the project, and you'll have to design
  57. it to your own specification. As a help, however, the last section of
  58. this document describes how we interfaced Pegasus Mail with Waffle, a
  59. popular BBS and UUCP program.
  60.  
  61.  
  62. How Pegasus Mail uses a UDG
  63. --------------------
  64.  
  65. You have to provide Pegasus Mail with a set of instructions which it uses
  66. to interface to your gateway. You do this using Pegasus Mail's PCONFIG
  67. program, choosing "create a User-defined gateway". The gateway definition
  68. screen is essentially a form - you merely have to fill in the appropriate
  69. details for your gateway.
  70.  
  71.  
  72. Command substitution
  73. --------------------
  74.  
  75. Most of the entries in this screen which accept strings allow you to use
  76. special command substitution characters in the strings: these are like
  77. "escape sequences" which will cause Pegasus Mail to perform some
  78. substitution at run-time. Command substitutions always begin with a tilde
  79. (~) character, and are always two characters long. The following command
  80. substitutions are recognised:
  81.  
  82.    This sequence...   Is replaced with this value
  83.  
  84.    ~c       The full path to the file containing the message
  85.    ~t       The address to which to send this message
  86.             (note: this is not necessarily the To: field)
  87.    ~s       The message's subject field
  88.    ~f       The full form of the message's "from" field
  89.    ~n       The sender's user name in its simplest form
  90.    ~b       The sender's bindery id, as a long hex integer
  91.    ~8       The first 8 chars in the sender's username
  92.    ~y       The time and date in RFC-822 format
  93.    ~d       A random integer, expressed as 4 hex digits
  94.    ~q       Y if this message is a BCC, N otherwise
  95.    ~%name%  The value of the environment variable %name%.
  96.    ~p       The user's personal name preference
  97.    ~x       The name.ext ONLY of the container file (no path)
  98.    ~a       The directory from which Pegasus Mail was run
  99.    ~h       The current user's home mailbox location
  100.    ~w       The current user's new mail location
  101.    ~r       Sender's reply address (reply-to or from, in that order)
  102.    ~~       A single tilde character.
  103.  
  104. Example: Assume that you have defined the gateway output command
  105.  
  106.    mygate ~c ~8 sys:mail/~b
  107.  
  108. And a user called DAVID, whose bindery ID is 4000001 sends a message
  109. which Pegasus Mail stores in c:\temp\119944.tmp. When Pegasus Mail
  110. invokes your gateway, the command line will be as follows:
  111.  
  112.       mygate c:\temp\119944.tmp DAVID sys:mail/4000001
  113.  
  114. In the following description of the Gateway Definition screen, fields
  115. marked with an * will support command substitution. Command substitution
  116. is also possible in the "Home mailbox" and "New mailbox" fields of
  117. Pegasus Mail's standalone configuration screen.
  118.  
  119.  
  120. Gateway definition fields
  121. -------------------------
  122.  
  123. Gateway name:  This is the name by which users will know this gateway. It
  124. should follow legal NetWare naming rules, and cannot contain spaces.
  125.  
  126. Users will access the gateway using NetWare usercode syntax so, say you
  127. call your gateway HONG_KONG, and a user wants to mail to someone called
  128. J_JONES at the gateway, they would enter the address as
  129. HONG_KONG/J_JONES.
  130.  
  131. *New mail path:  This is either a full path to a location where Pegasus
  132. Mail is to find new mail, or else the name of a program to run when
  133. checking for new mail. You can use command substitution in this string to
  134. construct complex paths.  note that Pegasus Mail will assume that ALL
  135. mail matching the search mask is for the current user - it will not parse
  136. messages to determine the recipient. If your transport places new mail in
  137. the mail directory each user has in SYS:MAIL, using a .CNM file
  138. extension, then you do not need to enter anything in this field. Note
  139. that if you have a gateway which writes messages into the user's NetWare
  140. directory in SYS:MAIL using an extension other than .CNM, you can enter a
  141. search path here using this command substitution: SYS:MAIL/~b (See the
  142. section on command substitutions for more on this).
  143.  
  144. Is ^ a program to run?  Enter 'Y' if "New mail path" is a program name
  145. rather than a directory name. Gateways which require a program  to be run
  146. to retrieve new mail will not be polled periodically - rather, the "check
  147. for New mail" option will remain permanently on the main menu, and the
  148. program can only be run when that option is selected.
  149.  
  150. *New mail search mask:  This is a DOS filename pattern which Pegasus Mail
  151. is to use when searching the New mail path for new mail. New mail
  152. messages will be rewritten in the user's home mailbox using the normal
  153. Pegasus Mail naming convention prior to reading, but they need not be in
  154. this format as written by the gateway.
  155.  
  156. *Outgoing mail path:  The name of the directory in which Pegasus Mail
  157. should create outgoing mail messages. Again, command substitution
  158. (described above) can be used in this string for specialised processing.
  159.  
  160. *Run for outgoing mail:  If you enter a program name in this field, 
  161. Pegasus Mail will run it every time it sends new mail to the gateway. The
  162. program must leave  the screen in the condition it found it (ie, if it
  163. writes to the screen, it must do so using non-destructive windows). This
  164. field is the one which will normally benefit the most from the use of
  165. command substitution (see above). By embedding escape keys in this
  166. string, you can construct extremely complex command lines. Usually, this
  167. field will refer to a "glue" program you have written to interface with
  168. the gateway: the actual invocation of the gateway is intended to be
  169. user-activated via choices in the SENDER.PM file.
  170.  
  171. *Filename format:  This field allows you some control over the filenames
  172. Pegasus Mail will use when creating outgoing messages. The ~d command
  173. substitution (random integer value) is often very useful in this field.
  174.  
  175. Run to validate address:  You can provide a program which Pegasus Mail
  176. will call to validate that an address is correct. If you do so, enter it
  177. in this field. Unlike other command strings, command substitution is not
  178. possible with this field - the only parameter passed on the  command line
  179. is the address to validate. Your program must not disturb the screen, and
  180. must return 0 if the address is invalid, or non-zero if the address is OK.
  181. If nothing is entered in this field, no attempt will be made to validate
  182. addresses.
  183. ** NOTE - Address validation routines will not work correctly when used
  184. with Pegasus Mail for MS-Windows.
  185.  
  186. *Reply address format:  This field allows you control how Pegasus Mail
  187. will construct the "From" address in outgoing messages. You can use
  188. command substitution in this field.
  189.  
  190.    Example: entering ~8@home.otago.ac.nz (~p)
  191.    will cause the from field of messages from user willy to read 
  192.    willy@home.otago.ac.nz (Willy Murgatroyd).
  193.  
  194. Accepts SMTP addresses:  If your gateway accepts messages using standard
  195. Internet address formats, set this flag to 'Y'. If Charon is not installed
  196. on your system and a user enters a standard internet address, Pegasus Mail
  197. will examine all available gateways, and will pass the message to the
  198. first with this flag set. This allows users to send internet mail using
  199. normal addressing, rather than having to send it specifically via a
  200. gateway using the SERVER/ADDRESS format.
  201.  
  202. Simple message headers:  Pegasus Mail can write messages with extra
  203. preparsed address information at the beginning of the message in either
  204. of two formats:
  205.  
  206. 1: Simple message headers is the original form provided by Pegasus
  207.    Mail. It is not particularly effective and is only provided for
  208.    backwards compatibility.
  209.  
  210.    The simple header information is line-based, using line number
  211.    as a key. Gateways which read simple message headers must read
  212.    until a totally blank line is encountered, then send the remainder
  213.    of the message, which will be normally formatted. At present, two
  214.    lines are defined in the simple headers, although others may
  215.    be added in future:
  216.  
  217.     * Line 1: The recipient of this message (not the same as
  218.       the To: field)
  219.     * Line 2: Contains 'Y' if this message has attachments.
  220.  
  221.    Lines without values will contain a single space. Addresses are 
  222.    already parsed. Since the format is intended to be extensible, 
  223.    gateways which understand simple headers must ignore lines they 
  224.    are not written to use, and must read until the blank line.
  225.  
  226. 2: 'Glue' headers are an extension of simple headers; they are
  227.    essentially a variant of the format Pegasus Mail uses for Charon
  228.    and Mercury with a little more information. The first line of
  229.    the message is the signature "$$ " followed by the "from" address
  230.    of the sender. Each subsequent line lists all the addressees
  231.    to which this message should be sent, with a single character
  232.    code at the start of the line indicating whether the address
  233.    is for someone in the "to" field (T), the CC field (C) or the
  234.    BCC field (B). The code is followed by exactly one space then
  235.    the address. The glue headers end with a blank line and are
  236.    followed by the message in canonical RFC822 format. Gateways
  237.    designed to work with glue headers MUST IGNORE a line which
  238.    starts with an unrecognized code character: this allows the
  239.    format to grow. The PMPOP POP3 gateway for Pegasus Mail v3.0
  240.    expects to see messages in glue header format.
  241.  
  242. UUencode attachments:  If 'Y', then Pegasus Mail will generate a separate
  243. message for each attachment, and will uuencode the attachment into the
  244. message. If 'N', a file with the same name as the message but the
  245. extension '.ATT' will be written into the outgoing mail directory, along
  246. with the attachments. The .ATT file will contain the names of the
  247. attachments to the message, one per line.
  248.  
  249.    (Pegasus Mail currently ONLY supports uuencoded attachments).
  250.  
  251. Burst messages?  If 'Y', then Pegasus Mail will create one message for
  252. every address sent to: it is up to your gateway process to use the ~t
  253. command substitution to ensure that delivery is correct, since you
  254. generally will not be able to tell from the message's headers who a
  255. particular copy should be sent to. If 'N', Pegasus Mail assumes that your
  256. gateway can parse the message for address data, and will write all the
  257. addresses into one message, using standard RFC-822 folding and header
  258. rules. The exception to this is messages with a BCC header: this will
  259. generate two envelopes, one with the BCC field, the other without. Your
  260. process can determine which is the BCC delivery using the ~q command
  261. substitution.
  262.  
  263. Gateway processes BCC?  If 'Y', then Pegasus Mail will generate only a 
  264. single file for any message it sends, even if that message contains BCC 
  265. addressees. In this case, it is up to the gateway to ensure that the BCC 
  266. field is properly handled. If 'N', then Pegasus Mail will generate two 
  267. files when a message contains BCC addressees - the first with no BCC line 
  268. and addressed to everyone except the BCC addressees, the second with a BCC 
  269. line and addressed only to the BCC addressees.
  270.  
  271. Strip gateway name?  If 'Y', then Pegasus Mail will remove the gateway 
  272. name and trailing '/' character from addresses passed to the gateway.
  273.  
  274. Force all mail through:  If you set this field to 'Y', then Pegasus Mail
  275. will pass all mail irrespective of addressing to the gateway for
  276. processing. This effectively disables Pegasus Mail's support for all
  277. other transports in the system.
  278.  
  279.  
  280. Gateways and BCC:
  281. ----------------
  282.  
  283. Messages with BCC (Blind Carbon Copy) recipients present special problems
  284. to gateways, since the same message ends up being processed twice - once
  285. with no BCC header, then again as a separate job containing the BCC
  286. header. Pegasus Mail can indicate to the gateway process that a message
  287. needs BCC processing (using the ~q command substitution), but it is up to
  288. the gateway process to ensure that the BCC field is properly handled, and
  289. that the message is correctly forwarded.
  290.  
  291. If your gateway can process BCC headers on its own and you only want a
  292. single message generated containing all the fields, make sure the
  293. "Gateway processes BCC?" field in your gateway definition is set to 'Y'.
  294.  
  295.  
  296. Altering the Main menu - Pegasus Mail 3.0 and later
  297. --------------------------------------------
  298.  
  299. Under Pegasus Mail 3.0 and later, options are added to the "Send Message"
  300. and "Check New mail" menu items via a resource file called
  301. PM-MENU.RSC. A heavily-commented sample for this file is provided
  302. with the Pegasus Mail 3.0 distribution - please examine it for further
  303. details.
  304.  
  305.  
  306. Altering the Main menu - Pegasus Mail 2.35 and earlier
  307. -----------------------------------------------
  308.  
  309. Pegasus Mail v2.35 and earlier allow you to add sub-choices to 
  310. two of the options on the main menu- "Check for New mail" and 
  311. "Send a mail message". The addition is done via a text file called 
  312. SENDER.PM, which must be stored in the same directory as PMAIL.EXE. 
  313. This file contains sets of 5 lines, each set defining one sub-choice. 
  314. Blank lines and lines beginning with a semi-colon (';') are treated 
  315. as comments and are ignored. The lines within each set have the 
  316. following meanings:
  317.  
  318. *   Line 1: Either N if this entry is to be added to the New Mail 
  319. submenu, or S if it is for the Send message submenu.
  320.  
  321. *   Line 2: The text to show in the submenu
  322.  
  323. *   Line 3: Pegasus Mail will create a temporary filename which 
  324. can be passed to the command you specify on the command line. 
  325. If this field is Y, then Pegasus Mail will look for the file when the 
  326. command returns: if the file exists and is longer than 0 bytes, 
  327. Pegasus Mail will parse it as a message and mail it normally. This allows 
  328. you to create alternative message entry screens. Note that if 
  329. you use this option, the file must contain a properly-formatted 
  330. RFC-822 message on return. Attachments cannot currently be specified 
  331. in this file.
  332.  
  333. *   Line 4: Enter Y on this line if Pegasus Mail should save its screen 
  334. before invoking the command, and restore it when the command 
  335. returns. If N, then Pegasus Mail assumes that the command either does 
  336. no screen output, or that it does it non-destructively.
  337.  
  338. *   Line 5: Enter the command Pegasus Mail should invoke on this line. 
  339. All command substitutions (see above) are possible here. The 
  340. maximum length of an entry on this line is 80 characters, although 
  341. the command line may be up to 128 characters in length after 
  342. command substitution. To invoke the usual built-in function (ie, 
  343. either Check for New Mail or Send a Message), enter a single 
  344. colon (':') on this line. The command you enter here may be an 
  345. MS-DOS batch file or an executable image.
  346.  
  347.  
  348. A Sample Implementation - Pegasus Mail and Waffle.
  349. -------------------------------------------
  350.  
  351. Waffle is a particularly good Bulletin-Board System which is 
  352. widely distributed as Shareware on the Internet and on numerous 
  353. public services. Among its features is a solid implementation 
  354. of uucico, the UNIX copy-in - copy-out routine used to make uucp 
  355. transfers. Remember that Waffle is a Shareware program: we urge 
  356. you to send in the shareware license for Waffle if you use any 
  357. part of it - the program is well worth it, and the author deserves 
  358. support.
  359.  
  360. Pegasus Mail can be quite easily interfaced with Waffle, providing a 
  361. quite functional standalone mail facility via uucp. One small 
  362. "glue" program is required - the source for this is included 
  363. on the Pegasus Mail distribution diskette as an example of how gateways 
  364. can be implemented. The glue program was written by Brendan Murray, 
  365. Systems Manager at the University of Otago. Brendan has kindly 
  366. made the source freely available and modifiable without charge 
  367. or restriction. Both the glue code and this example assume that 
  368. you have a properly-configured copy of Waffle on your system.
  369.  
  370. Essentially, Pegasus Mail creates a temporary file, then passes it to 
  371. the glue program, using a number of command substitutions to 
  372. minimise the parsing the program has to do. The glue code then 
  373. parses Waffle's static configuration file and creates appropriate 
  374. mail files in the right place for uucico and uuxqt. Two options 
  375. are added to the main menu to allow the user to choose when to 
  376. invoke uucico to process outgoing mail, and receive incoming 
  377. mail.
  378.  
  379. A sample user-defined gateway definition for Waffle is as follows:
  380.  
  381. Gateway name:              WAFFLE
  382. New mail path:             c:\mailbox\~8
  383. Is ^ a program to run?:    N
  384. New mail search mask:      ~8.*
  385. Outgoing mail path:        c:\scratch\tmp
  386. Run for outgoing mail:     c:\bin\filter ~n ~c ~t ~y
  387. Filename format:           ~d~d.WOM
  388. Run to validate address:    
  389. Reply address format:      ~8@myhost.domain
  390. Accepts SMTP addresses?:   Y
  391. Simple message headers?:   N
  392. UUencode attachments?:     Y
  393. Burst messages?:           Y
  394. Strip GW name?:            Y
  395. Check new mail every x seconds.
  396.  
  397.  
  398. Brendan's filter program locates Waffle's configuration file 
  399. using the WAFFLE environment variable; it expects parameters 
  400. on the command-line in the following order:
  401.  
  402.    1:   The name of the user sending the message
  403.    2:   The name of the message container file
  404.    3:   The To: field of the message
  405.    4:   The time and date as an RFC-822 string
  406.  
  407.  
  408.  
  409. The SENDER.PM file for Pegasus Mail using Waffle is as follows:
  410.  
  411. S
  412. Regular mail message
  413. N
  414. N
  415. :
  416.  
  417. S
  418. Send all outgoing mail
  419. N
  420. Y
  421. uucico
  422.  
  423. N
  424. Read new mail messages
  425. N
  426. N
  427. :
  428.  
  429. N
  430. Check host for new mail
  431. N
  432. Y
  433. uucico
  434.  
  435.