|
|
1.1 ! root 1: .bp ! 2: .sh 1 "More about sending mail" ! 3: .sh 2 "Tilde escapes" ! 4: .pp ! 5: While typing in a message to be sent to others, it is often ! 6: useful to be able to invoke the text editor on the partial message, ! 7: print the message, execute a shell command, or do some other ! 8: auxiliary function. ! 9: .i Mail ! 10: provides these capabilities through ! 11: .i "tilde escapes" , ! 12: which consist of a tilde (~) at the beginning of a line, followed by ! 13: a single character which indicates the function to be performed. For ! 14: example, to print the text of the message so far, use: ! 15: .(l ! 16: ~p ! 17: .)l ! 18: which will print a line of dashes, the recipients of your message, and ! 19: the text of the message so far. ! 20: Since ! 21: .i Mail ! 22: requires two consecutive \s-2RUBOUT\s0's to abort a letter, you ! 23: can use a single \s-2RUBOUT\s0 to abort the output of ~p or any other ! 24: ~ escape without killing your letter. ! 25: .pp ! 26: If you are dissatisfied with the message as ! 27: it stands, you can invoke the text editor on it using the escape ! 28: .(l ! 29: ~e ! 30: .)l ! 31: which causes the message to be copied into a temporary file and an ! 32: instance of the editor to be spawned. After modifying the message to ! 33: your satisfaction, write it out and quit the editor. ! 34: .i Mail ! 35: will respond ! 36: by typing ! 37: .(l ! 38: (continue) ! 39: .)l ! 40: after which you may continue typing text which will be appended to your ! 41: message, or type <control-d> to end the message. ! 42: A standard text editor is provided by ! 43: .i Mail . ! 44: You can override this default by setting the valued option ! 45: .q EDITOR ! 46: to something else. For example, you might prefer: ! 47: .(l ! 48: set EDITOR=/usr/ucb/ex ! 49: .)l ! 50: .pp ! 51: Many systems offer a screen editor as an alternative to the standard ! 52: text editor, such as the ! 53: .i vi ! 54: editor from UC Berkeley. ! 55: To use the screen, or ! 56: .i visual ! 57: editor, on your current message, you can use the escape, ! 58: .(l ! 59: ~v ! 60: .)l ! 61: ~v works like ~e, except that the screen editor is invoked instead. ! 62: A default screen editor is defined by ! 63: .i Mail . ! 64: If it does not suit you, you can set the valued option ! 65: .q VISUAL ! 66: to the path name of a different editor. ! 67: .pp ! 68: It is often useful to be able to include the contents of some ! 69: file in your message; the escape ! 70: .(l ! 71: ~r filename ! 72: .)l ! 73: is provided for this purpose, and causes the named file to be appended ! 74: to your current message. ! 75: .i Mail ! 76: complains if the file doesn't exist ! 77: or can't be read. If the read is successful, the number of lines and ! 78: characters appended to your message is printed, after which you may continue ! 79: appending text. The filename may contain shell metacharacters like * and ? ! 80: which are expanded according to the conventions of your shell. ! 81: .pp ! 82: As a special case of ~r, the escape ! 83: .(l ! 84: ~d ! 85: .)l ! 86: reads in the file ! 87: .q dead.letter ! 88: in your home directory. This is often useful since ! 89: .i Mail ! 90: copies the text ! 91: of your message there when you abort a message with \s-2RUBOUT\s0. ! 92: .pp ! 93: To save the current text of your message on a file you may use the ! 94: .(l ! 95: ~w filename ! 96: .)l ! 97: escape. ! 98: .i Mail ! 99: will print out the number of lines and characters written ! 100: to the file, after which you may continue appending text to your message. ! 101: Shell metacharacters may be used in the filename, as in ~r and are expanded ! 102: with the conventions of your shell. ! 103: .pp ! 104: If you are sending mail from within ! 105: .i Mail's ! 106: command mode ! 107: you can read a message sent to you into the message ! 108: you are constructing with the escape: ! 109: .(l ! 110: ~m 4 ! 111: .)l ! 112: which will read message 4 into the current message, shifted right by ! 113: one tab stop. You can name any non-deleted message, or list of messages. ! 114: Messages can also be forwarded without shifting by a tab stop with ~f. ! 115: This is the usual way to forward a message. ! 116: .pp ! 117: If, in the process of composing a message, you decide to add additional ! 118: people to the list of message recipients, you can do so with the escape ! 119: .(l ! 120: ~t name1 name2 ... ! 121: .)l ! 122: You may name as few or many additional recipients as you wish. Note ! 123: that the users originally on the recipient list will still receive ! 124: the message; you cannot remove someone from the recipient ! 125: list with ~t. ! 126: .pp ! 127: If you wish, you can associate a subject with your message by using the ! 128: escape ! 129: .(l ! 130: ~s Arbitrary string of text ! 131: .)l ! 132: which replaces any previous subject with ! 133: .q "Arbitrary string of text." ! 134: The subject, if given, is sent near the ! 135: top of the message prefixed with ! 136: .q "Subject:" ! 137: You can see what the message will look like by using ~p. ! 138: .pp ! 139: For political reasons, one occasionally prefers to list certain ! 140: people as recipients of carbon copies of a message rather than ! 141: direct recipients. The escape ! 142: .(l ! 143: ~c name1 name2 ... ! 144: .)l ! 145: adds the named people to the ! 146: .q "Cc:" ! 147: list, similar to ~t. ! 148: Again, you can execute ~p to see what the message will look like. ! 149: .pp ! 150: The recipients of the message together constitute the ! 151: .q "To:" ! 152: field, the subject the ! 153: .q "Subject:" ! 154: field, and the carbon copies the ! 155: .q "Cc:" ! 156: field. If you wish to edit these in ways impossible with the ~t, ~s, ! 157: and ~c escapes, you can use the escape ! 158: .(l ! 159: ~h ! 160: .)l ! 161: which prints ! 162: .q "To:" ! 163: followed by the current list of recipients and leaves the cursor ! 164: (or printhead) at the end of the line. If you type in ordinary ! 165: characters, they are appended to the end of the current list of ! 166: recipients. You can also use your erase character to erase back into ! 167: the list of recipients, or your kill character to erase them altogether. ! 168: Thus, for example, if your erase and kill characters are the standard ! 169: # and @ symbols, ! 170: .(l ! 171: ~h ! 172: To: root kurt####bill ! 173: .)l ! 174: would change the initial recipients ! 175: .q "root kurt" ! 176: to ! 177: .q "root bill." ! 178: When you type a newline, ! 179: .i Mail ! 180: advances to the ! 181: .q "Subject:" ! 182: field, where the same rules apply. Another newline brings you to ! 183: the ! 184: .q "Cc:" ! 185: field, which may be edited in the same fashion. Another newline ! 186: leaves you appending text to the end of your message. You can use ! 187: ~p to print the current text of the header fields and the body ! 188: of the message. ! 189: .pp ! 190: To effect a temporary escape to the shell, the escape ! 191: .(l ! 192: ~!command ! 193: .)l ! 194: is used, which executes ! 195: .i command ! 196: and returns you to mailing mode without altering the text of ! 197: your message. If you wish, instead, to filter the body of your ! 198: message through a shell command, then you can use ! 199: .(l ! 200: ~|command ! 201: .)l ! 202: which pipes your message through the command and uses the output ! 203: as the new text of your message. If the command produces no output, ! 204: .i Mail ! 205: assumes that something is amiss and retains the old version ! 206: of your message. A frequently-used filter is the command ! 207: .i fmt , ! 208: designed to format outgoing mail. ! 209: .pp ! 210: To effect a temporary escape to ! 211: .i Mail ! 212: command mode instead, you can use the ! 213: .(l ! 214: ~:\fIMail command\fP ! 215: .)l ! 216: escape. This is especially useful for retyping the message you are ! 217: replying to, using, for example: ! 218: .(l ! 219: ~:t ! 220: .)l ! 221: It is also useful for setting options and modifying aliases. ! 222: .pp ! 223: If you wish (for some reason) to send a message that contains ! 224: a line beginning with a tilde, you must double it. Thus, for example, ! 225: .(l ! 226: ~~This line begins with a tilde. ! 227: .)l ! 228: sends the line ! 229: .(l ! 230: ~This line begins with a tilde. ! 231: .)l ! 232: .pp ! 233: Finally, the escape ! 234: .(l ! 235: ~? ! 236: .)l ! 237: prints out a brief summary of the available tilde escapes. ! 238: .pp ! 239: On some terminals (particularly ones with no lower case) ! 240: tilde's are difficult to type. ! 241: .i Mail ! 242: allows you to change the escape character with the ! 243: .q escape ! 244: option. For example, I set ! 245: .(l ! 246: set escape=] ! 247: .)l ! 248: and use a right bracket instead of a tilde. If I ever need to ! 249: send a line beginning with right bracket, I double it, just as for ~. ! 250: Changing the escape character removes the special meaning of ~. ! 251: .sh 2 "Network access" ! 252: .pp ! 253: This section describes how to send mail to people on other machines. ! 254: Recall that sending to a plain login name sends mail to that person ! 255: on your machine. If your machine is directly (or sometimes, even, ! 256: indirectly) connected to the Arpanet, you can send messages to people ! 257: on the Arpanet using a name of the form ! 258: .(l ! 259: name@host ! 260: .)l ! 261: where ! 262: .i name ! 263: is the login name of the person you're trying to reach and ! 264: .i host ! 265: is the name of the machine where he logs in on the Arpanet. ! 266: .pp ! 267: If your recipient logs in on a machine connected to yours by ! 268: UUCP (the Bell Laboratories supplied network that communicates ! 269: over telephone lines), sending mail to him is a bit more complicated. ! 270: You must know the list of machines through which your message must ! 271: travel to arrive at his site. So, if his machine is directly connected ! 272: to yours, you can send mail to him using the syntax: ! 273: .(l ! 274: host!name ! 275: .)l ! 276: where, again, ! 277: .i host ! 278: is the name of his machine and ! 279: .i name ! 280: is his login name. ! 281: If your message must go through an intermediate machine first, you ! 282: must use the syntax: ! 283: .(l ! 284: intermediate!host!name ! 285: .)l ! 286: and so on. It is actually a feature of UUCP that the map of all ! 287: the systems in the network is not known anywhere (except where people ! 288: decide to write it down for convenience). Talk to your system administrator ! 289: about the machines connected to your site. ! 290: .pp ! 291: If you want to send a message to a recipient on the Berkeley network ! 292: (Berknet), you use the syntax: ! 293: .(l ! 294: host:name ! 295: .)l ! 296: where ! 297: .i host ! 298: is his machine name and ! 299: .i name ! 300: is his login name. Unlike UUCP, you need not know the names of the ! 301: intermediate machines. ! 302: .pp ! 303: When you use the ! 304: .b reply ! 305: command to respond to a letter, there is a problem of figuring out the ! 306: names of the users in the ! 307: .q "To:" ! 308: and ! 309: .q "Cc:" ! 310: lists ! 311: .i "relative to the current machine" . ! 312: If the original letter was sent to you by someone on the local machine, ! 313: then this problem does not exist, but if the message came from a remote ! 314: machine, the problem must be dealt with. ! 315: .i Mail ! 316: uses a heuristic to build the correct name for each user relative ! 317: to the local machine. So, when you ! 318: .b reply ! 319: to remote mail, the names in the ! 320: .q "To:" ! 321: and ! 322: .q "Cc:" ! 323: lists may change somewhat. ! 324: .sh 2 "Special recipients" ! 325: .pp ! 326: As described previously, you can send mail to either user names or ! 327: .b alias ! 328: names. It is also possible to send messages directly to files or to ! 329: programs, using special conventions. If a recipient name has a ! 330: `/' in it or begins with a `+', it is assumed to be the ! 331: path name of a file into which ! 332: to send the message. If the file already exists, the message is ! 333: appended to the end of the file. If you want to name a file in ! 334: your current directory (ie, one for which a `/' would not usually ! 335: be needed) you can precede the name with `./' ! 336: So, to send mail to the file ! 337: .q memo ! 338: in the current directory, you can give the command: ! 339: .(l ! 340: % Mail ./memo ! 341: .)l ! 342: If the name begins with a `+,' it is expanded into the full path name ! 343: of the folder name in your folder directory. ! 344: This ability to send mail to files can be used for a variety of ! 345: purposes, such as maintaining a journal and keeping a record of ! 346: mail sent to a certain group of users. The second example can be ! 347: done automatically by including the full pathname of the record ! 348: file in the ! 349: .b alias ! 350: command for the group. Using our previous ! 351: .b alias ! 352: example, you might give the command: ! 353: .(l ! 354: alias project sam sally steve susan /usr/project/mail_record ! 355: .)l ! 356: Then, all mail sent to "project" would be saved on the file ! 357: .q /usr/project/mail_record ! 358: as well as being sent to the members of the project. This file ! 359: can be examined using ! 360: .i "Mail \-f" . ! 361: .pp ! 362: It is sometimes useful to send mail directly to a program, for ! 363: example one might write a project billboard program and want to access ! 364: it using ! 365: .i Mail . ! 366: To send messages to the billboard program, one can send mail ! 367: to the special name `|billboard' for example. ! 368: .i Mail ! 369: treats recipient names that begin with a `|' as a program to send ! 370: the mail to. An ! 371: .b alias ! 372: can be set up to reference a `|' prefaced name if desired. ! 373: .i Caveats : ! 374: the shell treats `|' specially, so it must be quoted on the command ! 375: line. Also, the `| program' must be presented as a single argument to ! 376: mail. The safest course is to surround the entire name with double ! 377: quotes. This also applies to usage in the ! 378: .b alias ! 379: command. For example, if we wanted to alias `rmsgs' to `rmsgs \-s' ! 380: we would need to say: ! 381: .(l ! 382: alias rmsgs "| rmsgs -s" ! 383: .)l
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.