当员工离开公司时,我想将他们的整个 Maildir 移至“旧员工”帐户中的文件夹中。
鉴于 Maildir 专门使用文件系统,我认为应该可以做到mv ~fred/Maildir ~oldemployees/Maildir/fred
或类似。
如果我这样做,如何触发邮件客户端来注意到有新目录?
答案1
在我们带有 Dovecot 的 IMAP 服务器上,我这样做,将整个 Maildir 层次结构复制到另一个用户邮箱的子文件夹中:
定义变量,以便其余变量可以复制/粘贴
olduser=martina
olddir=/home/$olduser/Maildir
newuser=jasmin
newgroup=users
newdir=/home/$newuser/Maildir
newfolder="Martina"
newdest="$newdir/.$newfolder"
将所有文件夹和子文件夹移动到另一个用户的子文件夹中
mkdir -v "$newdest"
for d in cur new tmp; do mv -vi "$olddir/$d" "$newdest/"; done
# Move only folders which contain mails,
# and exclude some special folders like Trash, etc.
cd $olddir
for d in .??*; do
if [[ "$d" =~ ^.(Junk|Trash)$ ]] || [ -z "$(find "$d"/{cur,new,tmp} -type f)" ]; then
echo ignore "$d"; continue;
fi;
mv -vi "$d" "$newdest/$d";
done
# subscribe new user to new folders
find "$newdir" -maxdepth 1 -type d -name ".$newfolder*" -printf "%f\n"
| while read d; do echo ${d/#./}; done
| cat - "$newdir/subscriptions"
| sort -u > "$newdir/subscriptions.new"
mv "$newdir/subscriptions.new" "$newdir/subscriptions"
# fix ownership/permissions
chmod -R u=rwX,go= "$newdir"
chown -R $newuser:$newgroup "$newdir"
# Check ownership/permissions
find "$newdir" -not -perm 700 -type d -ls
find "$newdir" -not -perm 600 -type f -ls
find "$newdir" -not -user $newuser -ls
find "$newdir" -not -group $newgroup -ls
答案2
鉴于 Maildir 专门使用文件系统,我认为应该可以只使用 mv ~fred/Maildir ~oldemployees/Maildir/fred 或类似命令
这取决于 dovecot 配置
默认情况下dovecot 使用 Maildir++存储电子邮件的布局。
~/Maildir/new
和目录包含要发送到 INBOX 的消息。tmp 目录在投递过程中使用,新消息到达 new 中~/Maildir/cur
,~/Maildir/tmp
已读消息应由客户端移动到 cur 中。~/Maildir/.folder/
是邮箱文件夹~/Maildir/.folder.subfolder/
是文件夹的子文件夹(即“文件夹/子文件夹”)
因此,在这种情况下,您可以使用命令
mv ~fred/Maildir ~oldemployees/Maildir/.fred
:LAYOUT=fs
您还可以通过附加到来选择使用“fs”布局mail_location
。这使得文件夹结构如下所示:
~/Maildir/new
,~/Maildir/cur
并且~/Maildir/tmp
目录包含收件箱的消息,就像 Maildir++ 一样。~/Maildir/folder/
是邮箱文件夹~/Maildir/folder/subfolder/
是文件夹的子文件夹
如果我这样做,如何触发邮件客户端来注意到有新目录?
这也取决于邮件客户端。
我的 Squirrelmail 总是自动订阅新文件夹。Thunderbird 要求您单击[文件] - [订阅...]并激活新文件夹以使其出现在屏幕上。