使用 dovecot 根据文件夹结构提供电子邮件

使用 dovecot 根据文件夹结构提供电子邮件

我有很多 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

到目前为止一切顺利,如果有其他情况我会更新。

相关内容