北肙

当你不能够再拥有,唯一可以做的,就是令自己不要忘记。

Debian Linux 7.0 Sendmail/Dovecot邮件目录Maildir设置

偶然中重启了dovecot的服务,然后列表中以往收到的邮件就全没了。然后就是没完没了的搜索,最后定位到邮件存放目录设置上。关于邮件的存储格式,流行的两种分别是mbox和maildir,有关其区别网上文章比比皆是,但对于笔者来说,最重要的一点是,mbox将所有邮件存放在一个文件中,而maildir则是每封邮件都单独存放。由此一来,对于误删文件造成邮件丢失,mbox概率将大大高于maildir。再者,单个文件达到一定大小的时候,读写开销也是应该要考虑的。以下是将dovecot和sendmail由mbox格式改为maildir格式存放的步骤。假设用户为user,存放邮件目录为user家目录下mail文件夹。 1、新建相关文件夹 Bash # su - user $ mkdir -p ~/mail/new $ mkdir ~/mail/cur $ mkdir ~/mail/tmp 2、修改配置文件 >/etc/dovecot/conf.d/10-mail.conf 添加以下行,或者修改已有mail_location行 mail_location = maildir:~/mail 注释掉mail_location = mbox这一行 >/etc/mail/sendmail 添加以下三行 Existing settings: dnl # FEATURE(local_procmail, `', `procmail -t -Y -a $h -d$u')dnl Modified Settings: FEATURE(local_procmail)dnl MAILER(procmail)dnl 如果重启sendmail服务报错“*** ERROR: FEATURE() should be before MAILER()”,则参考“sendmail错误日志收集”,将以下三行放至文件末。 MAILER_DEFINITIONS MAILER(`local')dnl MAILER(`smtp')dnl >/etc/procmailrc(如果没有该文件则新建之) PATH=/usr/local/bin:/usr/bin:/bin MAILDIR=$HOME/mail DEFAULT=$MAILDIR/new LOGFILE=$MAILDIR/log 3、重启服务并发邮件测试 # /etc/init.d/sendmail restart && /etc/init.d/dovecot restart 笔者在做完以上几步后,经过测试,sendmail和dovecot须使用相同的maildir目录才能正常收发(且要么同时mbox,要么同时maildir),在客户端配置好邮箱,发件和收件都没有问题,唯独系统提示找不到Sent文件夹。而/home/user/mail目录下,没有作何Inbox,Sent等的痕迹,后经过mb2md工具将原格式邮件导入,才解决问题。笔者认为,在/home/user/mail下新建“.Inbox”、“.Sent”,亦可解决此问题。 4、原mbox格式邮件导入 安装工具 Bash […]

偶然中重启了dovecot的服务,然后列表中以往收到的邮件就全没了。然后就是没完没了的搜索,最后定位到邮件存放目录设置上。关于邮件的存储格式,流行的两种分别是mbox和maildir,有关其区别网上文章比比皆是,但对于笔者来说,最重要的一点是,mbox将所有邮件存放在一个文件中,而maildir则是每封邮件都单独存放。由此一来,对于误删文件造成邮件丢失,mbox概率将大大高于maildir。再者,单个文件达到一定大小的时候,读写开销也是应该要考虑的。以下是将dovecot和sendmail由mbox格式改为maildir格式存放的步骤。假设用户为user,存放邮件目录为user家目录下mail文件夹。
1、新建相关文件夹

Bash
# su - user
$ mkdir -p ~/mail/new
$ mkdir ~/mail/cur
$ mkdir ~/mail/tmp

2、修改配置文件
>/etc/dovecot/conf.d/10-mail.conf
添加以下行,或者修改已有mail_location行

mail_location = maildir:~/mail

注释掉mail_location = mbox这一行
>/etc/mail/sendmail
添加以下三行

Existing settings: dnl # FEATURE(local_procmail, `', `procmail -t -Y -a $h -d$u')dnl
Modified Settings: FEATURE(local_procmail)dnl
MAILER(procmail)dnl

如果重启sendmail服务报错“*** ERROR: FEATURE() should be before MAILER()”,则参考“sendmail错误日志收集”,将以下三行放至文件末。

MAILER_DEFINITIONS
MAILER(`local')dnl
MAILER(`smtp')dnl

>/etc/procmailrc(如果没有该文件则新建之)

PATH=/usr/local/bin:/usr/bin:/bin
MAILDIR=$HOME/mail
DEFAULT=$MAILDIR/new
LOGFILE=$MAILDIR/log

3、重启服务并发邮件测试
# /etc/init.d/sendmail restart && /etc/init.d/dovecot restart
笔者在做完以上几步后,经过测试,sendmail和dovecot须使用相同的maildir目录才能正常收发(且要么同时mbox,要么同时maildir),在客户端配置好邮箱,发件和收件都没有问题,唯独系统提示找不到Sent文件夹。而/home/user/mail目录下,没有作何Inbox,Sent等的痕迹,后经过mb2md工具将原格式邮件导入,才解决问题。笔者认为,在/home/user/mail下新建“.Inbox”、“.Sent”,亦可解决此问题。
4、原mbox格式邮件导入
安装工具

Bash
# apt-get update && apt-get install mb2md
Bash
# su - user
$ echo $MAIL

如果MAIL变量值为原dovecot收件箱mbox的值,则直接运行下面命令,否则运行命令“$ export MAIL="/var/mail/user”指定MAIL变量的值(注意变量值自行修改),再运行以下命令。

Bash
$ mb2md -m

或者在工具参数中指定原目录、目的目录,并加“-R”参数自动建立相关目录(如“.Sent”、“.Inbox”等)

Bash
$ mb2md -s 原目录 -d 目的目录(这里是/home/user/mail) -R

重启dovecot、sendmail服务,查看邮件客户端中有以往的邮件,表示导入成功。
注:做完上述步骤后,在“Maildir”下,发件箱等名称为“.Send”,若要改为“Sent”,则需要在文件“/etc/dovecot/conf.d/10-mail.conf”“mail_location = maildir:~/mail”句后添加“:LAYOUT=fs”,详情参见“http://wiki2.dovecot.org/MailLocation/Maildir

Leave a Reply

Your email address will not be published. Required fields are marked *