Solaris 8 下自带的 /usr/lib/mail.local 程序,只有两个参数, -d 和 -f 。 mail.local 的作用就是当 sendmail 接收到送往本地的邮件时,直接往 /var/mail/username Append。
然而,这个 Solaris 自带的早期版本的 mail.local 不能用 -b 参数让磁盘限额问题出现时,返回 Permenent 错误而停止发送。
所以,当 sendmail.cf 的 Mlocal 节不使用 -b 参数时 , sendmail 会重复往邮件接收人发邮件,当邮件接收人带有很多 CC 的抄送时,就会有大量的邮件发往“受害者”,原文的解释如下:
http://www.natur.cuni.cz/~mmokrejs/sendmail/#installation
The local mailer is the only commonly used non-SMTP mailer which
could fail for some recipients but succeed for others. By
comparison, an error from a UUCP mailer would normally be for all
recipients of that message with uucp addresses in the same
transaction.
But the local mailer can fail for an individual recipient. The
recipient might have messed up mailbox permissions. Or he/she might
be over disk quota. The interface with non-smtp (non-lmtp) mailers
does not allow individual identification of which recipient address
caused the error. If there is a temporary error for one recipient
(over quota, for example), sendmail treats it as a temporary error
for all local recipients from this transaction, and retries to all
addresses. If there is a permanent error, the error message suggests
that mail to all recipients failed. If the 'm' flag is not used,
there is only one recipient for the transaction and the problem does
not arise. Or, if an LMTP local delivery agent is used, then
individual response codes are given and the problem does not arise.
Sendmail 8.12.7 在 Solaris 8 环境下编译后,不会自动编译生成 /usr/lib/mail.local ,必须重新手工编译:
cd /usr/local/src/senmdail-8.12.7/mail.local
sh ./Build force-install
然后修改 /etc/mail/sendmail.cf 中添加
Mlocal 行中 mail.local -d 为 mail.local -bd 。
这样就解决了有抄送并且收件人之一有 Over Disk Quota 时,接收者收到重复邮件的困扰。