| 1 | .TH mbox 5 |
| 2 | .SH "NAME" |
| 3 | mbox \- file containing mail messages |
| 4 | .SH "INTRODUCTION" |
| 5 | The most common format for storage of mail messages is |
| 6 | .I mbox |
| 7 | format. |
| 8 | An |
| 9 | .I mbox |
| 10 | is a single file containing zero or more mail messages. |
| 11 | .SH "MESSAGE FORMAT" |
| 12 | A message encoded in |
| 13 | .I mbox |
| 14 | format begins with a |
| 15 | .B From_ |
| 16 | line, continues with a series of |
| 17 | .B \fRnon-\fBFrom_ |
| 18 | lines, |
| 19 | and ends with a blank line. |
| 20 | A |
| 21 | .B From_ |
| 22 | line means any line that begins with the characters |
| 23 | F, r, o, m, space: |
| 24 | |
| 25 | .EX |
| 26 | From god@heaven.af.mil Sat Jan 3 01:05:34 1996 |
| 27 | .br |
| 28 | Return-Path: <god@heaven.af.mil> |
| 29 | .br |
| 30 | Delivered-To: djb@silverton.berkeley.edu |
| 31 | .br |
| 32 | Date: 3 Jan 1996 01:05:34 -0000 |
| 33 | .br |
| 34 | From: God <god@heaven.af.mil> |
| 35 | .br |
| 36 | To: djb@silverton.berkeley.edu (D. J. Bernstein) |
| 37 | .br |
| 38 | |
| 39 | .br |
| 40 | How's that mail system project coming along? |
| 41 | .br |
| 42 | |
| 43 | .EE |
| 44 | |
| 45 | The final line is a completely blank line (no spaces or tabs). |
| 46 | Notice that blank lines may also appear elsewhere in the message. |
| 47 | |
| 48 | The |
| 49 | .B From_ |
| 50 | line always looks like |
| 51 | .B From |
| 52 | .I envsender |
| 53 | .I date |
| 54 | .IR moreinfo . |
| 55 | .I envsender |
| 56 | is one word, without spaces or tabs; |
| 57 | it is usually the envelope sender of the message. |
| 58 | .I date |
| 59 | is the delivery date of the message. |
| 60 | It always contains exactly 24 characters in |
| 61 | .B asctime |
| 62 | format. |
| 63 | .I moreinfo |
| 64 | is optional; it may contain arbitrary information. |
| 65 | |
| 66 | Between the |
| 67 | .B From_ |
| 68 | line and the blank line is a message in RFC 822 format, |
| 69 | as described in |
| 70 | .BR qmail-header(5) , |
| 71 | subject to |
| 72 | .B >From quoting |
| 73 | as described below. |
| 74 | .SH "HOW A MESSAGE IS DELIVERED" |
| 75 | Here is how a program appends a message to an |
| 76 | .I mbox |
| 77 | file. |
| 78 | |
| 79 | It first creates a |
| 80 | .B From_ |
| 81 | line given the message's envelope sender and the current date. |
| 82 | If the envelope sender is empty (i.e., if this is a bounce message), |
| 83 | the program uses |
| 84 | .B MAILER-DAEMON |
| 85 | instead. |
| 86 | If the envelope sender contains spaces, tabs, or newlines, |
| 87 | the program replaces them with hyphens. |
| 88 | |
| 89 | The program then copies the message, applying |
| 90 | .B >From quoting |
| 91 | to each line. |
| 92 | .B >From quoting |
| 93 | ensures that the resulting lines are not |
| 94 | .B From_ |
| 95 | lines: |
| 96 | the program prepends a |
| 97 | .B > |
| 98 | to any |
| 99 | .B From_ |
| 100 | line, |
| 101 | .B >From_ |
| 102 | line, |
| 103 | .B >>From_ |
| 104 | line, |
| 105 | .B >>>From_ |
| 106 | line, |
| 107 | etc. |
| 108 | |
| 109 | Finally the program appends a blank line to the message. |
| 110 | If the last line of the message was a partial line, |
| 111 | it writes two newlines; |
| 112 | otherwise it writes one. |
| 113 | .SH "HOW A MESSAGE IS READ" |
| 114 | A reader scans through an |
| 115 | .I mbox |
| 116 | file looking for |
| 117 | .B From_ |
| 118 | lines. |
| 119 | Any |
| 120 | .B From_ |
| 121 | line marks the beginning of a message. |
| 122 | The reader should not attempt to take advantage of the fact that every |
| 123 | .B From_ |
| 124 | line (past the beginning of the file) |
| 125 | is preceded by a blank line. |
| 126 | |
| 127 | Once the reader finds a message, |
| 128 | it extracts a (possibly corrupted) envelope sender |
| 129 | and delivery date out of the |
| 130 | .B From_ |
| 131 | line. |
| 132 | It then reads until the next |
| 133 | .B From_ |
| 134 | line or end of file, whichever comes first. |
| 135 | It strips off the final blank line |
| 136 | and |
| 137 | deletes the |
| 138 | quoting of |
| 139 | .B >From_ |
| 140 | lines and |
| 141 | .B >>From_ |
| 142 | lines and so on. |
| 143 | The result is an RFC 822 message. |
| 144 | .SH "COMMON MBOX VARIANTS" |
| 145 | There are many variants of |
| 146 | .I mbox |
| 147 | format. |
| 148 | The variant described above is |
| 149 | .I mboxrd |
| 150 | format, popularized by Rahul Dhesi in June 1995. |
| 151 | |
| 152 | The original |
| 153 | .I mboxo |
| 154 | format quotes only |
| 155 | .B From_ |
| 156 | lines, not |
| 157 | .B >From_ |
| 158 | lines. |
| 159 | As a result it is impossible to tell whether |
| 160 | |
| 161 | .EX |
| 162 | From: djb@silverton.berkeley.edu (D. J. Bernstein) |
| 163 | .br |
| 164 | To: god@heaven.af.mil |
| 165 | .br |
| 166 | |
| 167 | .br |
| 168 | >From now through August I'll be doing beta testing. |
| 169 | .br |
| 170 | Thanks for your interest. |
| 171 | .EE |
| 172 | |
| 173 | was quoted in the original message. |
| 174 | An |
| 175 | .I mboxrd |
| 176 | reader will always strip off the quoting. |
| 177 | |
| 178 | .I mboxcl |
| 179 | format is like |
| 180 | .I mboxo |
| 181 | format, but includes a Content-Length field with the |
| 182 | number of bytes in the message. |
| 183 | .I mboxcl2 |
| 184 | format is like |
| 185 | .I mboxcl |
| 186 | but has no |
| 187 | .B >From |
| 188 | quoting. |
| 189 | These formats are used by SVR4 mailers. |
| 190 | .I mboxcl2 |
| 191 | cannot be read safely by |
| 192 | .I mboxrd |
| 193 | readers. |
| 194 | .SH "UNSPECIFIED DETAILS" |
| 195 | There are many locking mechanisms for |
| 196 | .I mbox |
| 197 | files. |
| 198 | .B qmail-local |
| 199 | always uses |
| 200 | .B flock |
| 201 | on systems that have it, otherwise |
| 202 | .BR lockf . |
| 203 | |
| 204 | The delivery date in a |
| 205 | .B From_ |
| 206 | line does not specify a time zone. |
| 207 | .B qmail-local |
| 208 | always creates the delivery date in GMT |
| 209 | so that |
| 210 | .I mbox |
| 211 | files can be safely transported from one time zone to another. |
| 212 | |
| 213 | If the mtime on a nonempty |
| 214 | .I mbox |
| 215 | file is greater than the atime, |
| 216 | the file has new mail. |
| 217 | If the mtime is smaller than the atime, |
| 218 | the new mail has been read. |
| 219 | If the atime equals the mtime, |
| 220 | there is no way to tell whether the file has new mail, |
| 221 | since |
| 222 | .B qmail-local |
| 223 | takes much less than a second to run. |
| 224 | One solution is for a mail reader to artificially set the |
| 225 | atime to the mtime plus 1. |
| 226 | Then the file has new mail if and only if the atime is |
| 227 | less than or equal to the mtime. |
| 228 | |
| 229 | Some mail readers place |
| 230 | .B Status |
| 231 | fields in each message to indicate which messages have been read. |
| 232 | .SH "SEE ALSO" |
| 233 | maildir(5), |
| 234 | qmail-header(5), |
| 235 | qmail-local(8) |