procmail 坚持写入 macOS Sierra 中的 /var/mail

jvi*_*tti 6 mac-osx procmail

我正在尝试配置fetchmailprocmail使用 Google 帐户。这是我的$HOME/.fetchmailrc

poll imap.gmail.com protocol IMAP 
   user "<email>" is jviotti here
   password '<password>'
   folder 'Inbox'
   keep
   ssl
mda 'procmail'
Run Code Online (Sandbox Code Playgroud)

这是我的$HOME/.procmailrc

MAILDIR=$HOME/Mail
DEFAULT=$MAILDIR/$LOGNAME/
LOGFILE=$MAILDIR/log/procmail
VERBOSE=on
Run Code Online (Sandbox Code Playgroud)

为下载的每条消息procmail运行时fetchmail -a -v,我都会收到以下错误:

fetchmail: IMAP> A0005 FETCH 1 RFC822.HEADER
fetchmail: IMAP< * 1 FETCH (RFC822.HEADER {2865}
reading message <email>@gmail-imap.l.google.com:1 of 22 (2865 header octets) #
fetchmail: IMAP< )
fetchmail: IMAP< A0005 OK Success
fetchmail: IMAP> A0006 FETCH 1 BODY.PEEK[TEXT]
fetchmail: IMAP< * 1 FETCH (BODY[TEXT] {3983}
 (3983 body octets) *******************************.************************.***********.*****
fetchmail: IMAP< )
fetchmail: IMAP< A0006 OK Success
procmail: Couldn't create "/var/mail/jviotti"
 not flushed
fetchmail: IMAP> A0007 STORE 1 +FLAGS (\Seen)
fetchmail: IMAP< A0007 OK Success
Run Code Online (Sandbox Code Playgroud)

注意procmail: Couldn't create "/var/mail/jviotti" not flushed。出于某种原因,即使和也procmail坚持写入。/var/mailMAILDIR=$HOME/MailDEFAULT=$MAILDIR/$LOGNAME/

为什么会这样?

通过查看procmailrc手册页,我发现ORGMAIL默认为/var/mail/$LOGNAMEDEFAULT默认为ORGMAIL

 ORGMAIL               /var/mail/$LOGNAME
                       (Unless -m has been specified, in which case it is unset)

 DEFAULT               $ORGMAIL
Run Code Online (Sandbox Code Playgroud)

但是,即使在 中设置ORGMAIL为其他内容后$HOME/.procmailrc,我也会收到相同的错误/警告。

请注意,即使我收到此错误,我的邮件也已正确下载到$HOME/Mail.

编辑:查看procmail -v. 出于某种原因,它仍然将我的系统邮箱设置为 /var/mail/jviotti。

$ procmail -v
procmail v3.22 2001/09/10
    Copyright (c) 1990-2001, Stephen R. van den Berg    <srb@cuci.nl>
    Copyright (c) 1997-2001, Philip A. Guenther         <guenther@sendmail.com>

Submit questions/answers to the procmail-related mailinglist by sending to:
        <procmail-users@procmail.org>

And of course, subscription and information requests for this list to:
        <procmail-users-request@procmail.org>

Locking strategies:     dotlocking, flock()
Default rcfile:         $HOME/.procmailrc
Your system mailbox:    /var/mail/jviotti
Run Code Online (Sandbox Code Playgroud)

编辑 2:请参阅以下内容man procmail

如果在命令行上没有指定 rcfiles 和 -p,procmail 将在读取 $HOME/.procmailrc 之前解释来自 /etc/procmailrc(如果存在)的命令。创建 /etc/procmailrc 时必须小心,因为如果情况允许,它将以 root 权限执行(当然与 $HOME/.procmailrc 文件相反)。

这是说在读取我的家庭配置之前,它将从 读取/etc/procmailrc,但是该文件在我的系统上不存在,甚至通过显式传递-p(指向我的家庭配置),系统邮箱仍然是/var/mail/jviotti.

手册页还说:

如果没有找到 rcfile,或者 rcfile 的处理结束,procmail 会将邮件存储在默认的系统邮箱中。

“从头到尾”是什么意思?

以下是一封传入消息在 Procmail 日志文件中的输出:

procmail: [49293] Tue Dec 13 14:29:20 2016 
procmail: Assigning "LASTFOLDER=/Users/jviotti/Mail/jviotti/new/1481653760.49293_2.jviotti-rmbp.local" 
procmail: Notified comsat: "jviotti@0:/Users/jviotti/Mail/jviotti/new/1481653760.49293_2.jviotti-rmbp.local" 
From jviotti Tue Dec 13 14:29:20 2016 
 Subject: Re: [resin-io/etcher] chore: add support for snapshot builds (#968) 
  Folder: /Users/jviotti/Mail/jviotti/new/1481653760.49293_2.jviotti-r         8015
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 5

您看到的错误消息基本上是无害的,但它是 Procmail 告诉您它无法使用您当前的权限创建默认收件箱——您需要成为 root 用户才能创建一个空邮箱。

使用正确的权限手动创建它应该可以解决这个问题。

sudo install -o $USER -g mail -m 0600 /dev/null /var/mail/$USER
Run Code Online (Sandbox Code Playgroud)

procmail -v简单地报告编译的默认值是什么;它根本不检查您.procmailrc的(如果检查了,任何重要的配方文件都将包含大量具有不同条件的邮箱,何时写入哪个)。

“结束”意味着如果您有一个.procmailrc不告诉 Procmail 投递到特定邮箱并停止处理(例如您的),最终操作将类似于如果您的最后几行.procmailrc

:0:
$DEFAULT
Run Code Online (Sandbox Code Playgroud)

这也说明了无条件 Procmail 交付配方的样子。

您发布的 Procmail 日志文件片段显示 Procmail 实际上正在执行您的任务.procmailrc。错误消息显然是在它启动时发生的,在它开始执行你的之前.procmailrc(虽然我不能准确地重现这一点,所以这有点推测性)。