# 共享邮箱（将 IMAP 目录共享给其他用户）

!!! note

    * 自 iRedMail-`0.9.0`版起，共享邮箱功能默认开启，用户不需要任何额外的配置。
    * 自 iRedMail-`0.7.0` 版起，Dovecot 已包含共享邮箱的相关设置，但没有启用。
      只需要按照以下文档中启用 `acl` 插件的步骤即可启用该功能。

    * 请勿混淆`共享邮箱`和`公共邮箱`。用户在共享邮箱时必须选择要共享的目录并
      指定共享给谁。

## 共享邮箱

要开启邮箱共享功能，请确保 `acl` 插件已在Dovecot 的配置文件
`/etc/dovecot/dovecot.conf` 里启用。以下是配置示例：

* Dovecot-1.2 版：

```
# Part of file: /etc/dovecot/dovecot.conf

protocol lda {
    mail_plugins = ... acl
}

protocol imap {
    mail_plugins = ... acl imap_acl
}
```

* Dovecot-2.x 版：

```
# Part of file: /etc/dovecot/dovecot.conf

mail_plugins = ... acl

protocol imap {
    mail_plugins = ... imap_acl
}
```

修改后需重启 Dovecot 服务，以使配置生效。

## 测试共享目录

示例：将用户 `from@domain.ltd` 的 `Sent` 目录共享给用户 `testing@domain.ltd` 。

> 注意：不要遗漏 IMAP 命令前面的点 `.` 号。

```
# telnet localhost 143                # <- 输入此命令
* OK [...] Dovecot ready.

. login from@domain.ltd passwd        # <- 输入此命令
                                      # 使用完整邮件地址和密码登陆
. OK [... ACL ..] Logged in

. SETACL Sent testing@domain.ltd rli  # <- 输入此命令
                                      # 将 Sent 目录共享给 testing@domain.ltd，
                                      # 具体权限为：读(r, read)，查询(l, lookup)，插入新邮件(i, insert)。
. OK Setacl complete.

^]                                    # <- 按 `Ctrl + ]` 组合键退出 telnet 程序。
telnet> quit
```

以用户 `testing@domain.ltd` 身份登录 Roundcube 或 SOGo webmail，即可看到共享的目录。

额外信息：

* 使用 `SETACL` 命令共享目录后， Dovecot 会在 MySQL 数据库中插入一条记录。

    * 对于采用 OpenLDAP 后端的用户，此记录保存在 SQL 表 `iredadmin.share_folder` 中。
    * 对于采用 MySQL/MariaDB/PostgreSQL 后端的用户，此记录保存在 `vmail.share_folder` 中。

```
# mysql -uroot -p
mysql> USE vmail;
mysql> SELECT * FROM share_folder;
+-----------------+--------------------+-------+
| from_user       | to_user            | dummy |
+-----------------+--------------------+-------+
| from@domain.ltd | testing@domain.ltd | 1     |
+-----------------+--------------------+-------+
```

## 参考资料

* Dovecot wiki：

    * [共享邮箱 (v2.0+)](http://wiki2.dovecot.org/SharedMailboxes/Shared)
    * [共享邮箱 (v1.2+)](http://wiki.dovecot.org/SharedMailboxes/Shared)

* Roundcubemail 有官方插件 `acl` 用来管理邮箱共享。
* SOGo 邮箱组件默认支持邮箱共享：右击 IMAP 文件夹，选择 `Sharing` 。
* Thunderbird 客户端可以使用 [Imap-ACL-Extension 插件](https://addons.mozilla.org/en-US/thunderbird/addon/imap-acl-extension/)管理共享邮箱
