首页 > 解决方案 > procmail - 使用 {} 不会传送到 mbox

问题描述

我正在尝试使用 procmail 将一些旧电子邮件整理到我的雷鸟 mbox 文件中,但是在使用大括号时我似乎无法将其归档到 mbox 文件中。使用和不使用大括号进行下面的简单测试会提供不同的结果 - 我错过了什么,请:

SHELL=/bin/sh
# --- OPTIONAL, USED FOR DEBUGGING (comment out)
VERBOSE=yes
LOGABSTRACT=all
LOGFILE="procmail.log"
MAILDIR=/home/jake/windows/Thunderbird/Mail/Local\ Folders
DEFAULT=/home/jake/done/

# goes into MAILDIR/processed
:0
processed

# goes into DEFAULT/msg.gAmAAAAA4F/etc.
:0
{
processed
}

标签: procmail

解决方案


您的第二个配方基本上是一个语法错误,尽管 Procmal 解析器实际上将它解析为一个表达式,但它的含义与您的预期完全不同。这是你实际写的,完整的。

:0
{
  processed=''
}

因此,Procmail 进入大括号,执行分配,退出大括号,并传递到$DEFAULT当它落到配方文件的末尾时。

要实际交付到文件中,您需要一个完整的配方,例如

:0
{
    :0
    processed
}

...但显然带有大括号的外部配方在这里完全是多余的。

一个符号本身被解析为一个空变量赋值,它清除了由该符号命名的变量这一事实不明显并且不仅对初学者来说非常混乱,所以不要因为你无法弄清楚这一点而感到特别糟糕。

实际上,VERBOSE=yes您应该会发现日志文件准确地向您显示了这一系列事件。你的日志文件最终会出现在你的MAILDIR所以也许你没有找到它......?


推荐阅读