1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
---------------------------------------
Maildir Driver for Alpine 2.0
By Eduardo Chappa
<chappa@gmx.com>
---------------------------------------
1. General Information About This Patch
---------------------------------------
This patch adds support for the maildir format to Alpine. We take the
approach that this patch is one more driver among the number of formats
supported by Alpine (more generally c-client). This approach differs from
older versions of similar patches, in that once a maildir patch was
applied, it was assumed that all your folders would be created in the
maildir format.
This patch does not assume that maildir is a preferred format, instead
puts maildir in equal footing with other formats (mbox, mbx, mix, etc),
and so a maildir folder in the mail/ collection is treated in the same way
as any other folder in any other format. In other words, just by reading
the name of a folder, or opening it, or doing any operation with it, you
can not know in which format the folder is.
This implies that if you want to add a folder in the maildir format to the
mail/ collection, then you must add by pressing "A" in the folder list
collection and enter "#driver.md/mail/name_maildir_folder".
If you only want to use maildir, however, you can do so too. In this case,
you must create a maildir collection. In that collection, only maildir
folders will be listed. If there is any folder in any other format, that
folder will be ignored. In another words, any folder listed there is in
maildir format and can be accessed through that collection, conversely,
any folder not listed there is not in maildir format and there is no way
to access it using this collection.
In order to create a maildir collection, you could press M S L, and "A" to
add a collection. Fill in the required fields as follows:
Nickname : Anything
Server :
Path : #md/relative/path/to/maildir/collection/
View :
For example, if "path" is set to "#md/mail/", then Alpine will look for your
maildir folders that are in ~/mail/.
The code in this patch is mostly based in code for the unix driver plus
some combinations of the mh, mbx and nntp drivers for the c-client
library. Those drivers were designed by Mark Crispin, and bugs in this
code are not his bugs, but my own.
I got all the specification for this patch from
http://cr.yp.to/proto/maildir.html. If you know of a place with a better
specification for maildir format please let me know. The method this patch
uses to create a unique filename for a message is one of the "old
fashioned" methods. I realize that this is old fashioned, but it is
portable, and portability is the main reason why I decided to use an old
fashioned method (most methods are not portable. See the word
"Unfortunately" in that document).
--------------
2. Other Goals
--------------
It is intended that this code will work well with any application
written using the c-client library. Of paramount importance is to make the
associated imap server work well when the server accesses a folder in
Maildir format. The program mailutil should also work flawlessly with this
implemetation of the driver.
It is intended that this driver be fast and stable. We intend not to
patch Alpine to make this driver do its work, unless such patching is for
fixing bugs in Alpine or to pass parameters to the driver.
------------------------------------------------------------------------
3. What are the known bugs of this implementation of the Maildir driver?
------------------------------------------------------------------------
I don't know any at this time. There have been bugs before, though, but
I try to fix bugs as soon as they are reported.
----------
4. On UIDs
----------
This patch keeps uids in the name of the file that contains the message,
by adding a ",u=" string to the file name to save the uid of a message. A
file is kept between sessions to save information on the last uid assigned
and its time of validity. Only one session with writing access can write
uids, all others must wait for the other session to assign them. The
session assigning uids creates a ".uidtemp" file which other sessions must
not disturb.
Uid support appeared in Alpine 1.00 (snapshot 925), and is experimental,
please report any problems.
----------------------------------------------
5. Configuring Alpine and Setting up a Maildir
----------------------------------------------
Once this approach was chosen, it implied the following:
* This patch assumes that your INBOX is located at "$HOME/Maildir".
This is a directory which should have three subdirectories "cur",
"tmp" and "new". Mail is delivered to 'new' and read from 'cur'. I
have added a configuration option "maildir-location" which can be
used to tell Alpine where your Maildir inbox is, in case your system
does not use the above directory (e.g. your system may use
"~/.maildir"). In this case define that variable to be the name of
the directory where your e-mail is being delivered (e.g.
".maildir").
* If you want to use the above configuration as your inbox, you must
define your inbox-path as "#md/inbox" (no quotes). You can define
the inbox-path like above even if you have changed the
maildir-location variable. That's the whole point of that variable.
-------------------------------------------
6. What about Courier/Dovecot file systems?
-------------------------------------------
In a courier file system all folders are subfolders of a root folder
called INBOX. Normally INBOX is located at ~/Maildir and subfolders are
"dot" directories in ~/Maildir. For example ~/Maildir/.Trash is a
subfolder of INBOX and is accessed with the nickname "INBOX.Trash".
You can not access folders in this way unless you preceed them with the
string "#mc/". The purpose of the string "#mc/" is to warn Alpine that a
collection in the Courier format is going to be accessed. Therefore, you
can SELECT a folder like "#mc/INBOX.Trash", but not "INBOX.Trash"
You can access a collection through a server, but if you want to access a
collection of folders created using the Courier server, you MUST edit your
".pinerc" file and enter the definition of the collection as follows:
folder-collections="Anything you want" #mc/INBOX.[]
You can replace the string "#mc/INBOX." by something different, for example
"#mc/Courier/." will make Alpine search for your collection in ~/Courier.
You can not add this setting directly into Alpine because Alpine fails to
accept this value from its input, but it takes it correctly when it is
added through the ".pinerc" file.
You can access your inbox as "#mc/INBOX" or "#md/INBOX". Both definitions
point to the same place.
Last Updated May 28, 2011
|