我有很多 eml 文件,这些文件来自一个帐户,并存储在一堆文件夹中,每个月一个。这不是标准的 maildir 结构,文件没有特殊名称,它们就像:
2015-01/
foo.eml
bar.eml
...
2015-02/
baz.eml
qux.eml
...
etc
我希望通过 IMAP 使它们可访问且为只读,最好使用 dovecot,如果可能的话,不改变结构/命名。如果所有电子邮件都可以一起显示在收件箱中,那就太好了,但按月分开文件夹(因为它们在磁盘上是结构化的)也可以。
答案1
为了实现这一点,你至少需要将这些消息移动到邮件目录类似结构。我的 Dovecot maildir 看起来像这样[电子邮件保护]
./iswhale.com/ahoy/.Drafts/tmp
./iswhale.com/ahoy/.Drafts/new
./iswhale.com/ahoy/.Drafts/cur
./iswhale.com/ahoy/cur
./iswhale.com/ahoy/new
./iswhale.com/ahoy/tmp
如果您创建一个新的子文件夹,例如“存档”,它将看起来像这样:
./ahoy/.Archive/tmp
./ahoy/.Archive/new
./ahoy/.Archive/cur
tmp、new 和 cur 是您在客户端(例如 Roundcube)中创建新文件夹时 Dovecot 创建的目录。当创建 Archive 的新子文件夹时,目录结构变为:
./ahoy/.Archive.Sub-Folder/tmp
./ahoy/.Archive.Sub-Folder/new
./ahoy/.Archive.Sub-Folder/cur
因此,您需要调整目录路径,使“2015-01”变成类似这样的路径:
./user/.Archive.2015-01/tmp
./user/.Archive.2015-01/new
./user/.Archive.2015-01/cur
然后,一旦创建了这些目录,您就可以将“.eml”文件(我希望这些文件只是 Dovecot 期望的纯文本电子邮件类型)复制到目标“新”目录中。连接到您首选的 IMAP 客户端,一切就都好了。
答案2
我认为我找到了一种设置 maildir 结构的方法,而无需对我拥有的文件夹和文件进行任何更改。我在另一个地方创建了一个单独的 maildir 文件夹,并使用符号链接指向包含邮件的文件夹,如下所示:
maildir
├─ .2015-01
│ └─ cur -> path/to/2015-01
└─ .2015-02
└─ cur -> path/to/2015-02
我授予了 dovecot 对 maildir 及其子目录的写权限,以便它可以写入其索引文件、新文件夹和临时文件夹等等,但它对实际的邮件存档文件夹没有写权限。
对于 dovecot 配置(我仅在该服务器上提供这些文件,没有其他任何东西)我设置mail_location = maildir:/path/to/my/maildir
并使用了静态 passdb 和 userdb。
这个设置有效,但我也遇到了一些问题:
- 所有电子邮件均显示为未读
解决方案:运行doveadm flags add '\Seen' mailbox 201x-xx
- 邮件客户端可以更改标志,例如已读和已删除
解决方案:添加一个全局 ACL 文件,其中包含:* owner lr
到目前为止一切顺利,如果有其他情况我会更新。