AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 817928
Accepted
aranel
aranel
Asked: 2016-12-01 07:55:18 +0800 CST2016-12-01 07:55:18 +0800 CST 2016-12-01 07:55:18 +0800 CST

procmailrc - 更改电子邮件主题

  • 772

我想通过添加 [BULK] 来更改所有订阅列表电子邮件的主题。看起来全局 /etc/procmailrc 文件是最好的地方。但是这个过滤器也会删除一些电子邮件的所有标题(我的更改用破折号分隔):

LOGFILE=/var/log/procmail.log
TRAP=/etc/webmin/virtual-server/procmail-logger.pl
:0wi
VIRTUALMIN=|/etc/webmin/virtual-server/lookup-domain.pl --exitcode 73 $LOGNAME
EXITCODE=$?
:0
* ?/bin/test "$EXITCODE" = "73"
/dev/null
EXITCODE=0
:0
* ?/bin/test "$VIRTUALMIN" != ""
{
INCLUDERC=/etc/webmin/virtual-server/procmail/$VIRTUALMIN
}
-----
:0
* ^List-Unsubscribe:.*
{
   :0 hw
   SUBJECT=| formail -xSubject:

   :0 hfw
   * ^List-Unsubscribe:.*
   | /usr/bin/formail -i "Subject: [BULKMAIL] $SUBJECT"
}
-----
DEFAULT=$HOME/Maildir/
ORGMAIL=$HOME/Maildir/
DROPPRIVS=yes

使用此代码的用户主目录规则中的单个 .procmailrc 效果很好,但很难管理。

procmail
  • 1 1 个回答
  • 3030 Views

1 个回答

  • Voted
  1. Best Answer
    tripleee
    2016-12-01T23:13:33+08:002016-12-01T23:13:33+08:00

    我无法重现您的问题,并且您没有发布任何诊断信息,但我可以建议一个不同的配方,这可能会避免一些可能的错误情况。

    没有理由重复List-Unsubscribe:大括号内的条件——如果你在大括号内,你就知道它匹配。

    硬编码路径的约定formail似乎很笨拙(并且您在调用它的地方之一没有这样做)但是如果 Procmail 被调用时非常不稳定PATH,这可能是您在不这样做时看到失败的原因完全指定路径/usr/bin/formail。

    无论如何,您要尽可能避免外部流程。Procmail 可以提取 Subject: 标头MATCH,然后您只需要一次formail调用即可使整个配方成功。

    :0 hfw
    * ^List-Unsubscribe:
    * ^Subject:\/.+
    | /usr/bin/formail -i "Subject: [BULKMAIL]$MATCH"
    

    特殊运算符\/使 Procmail 将匹配的字符串收集到变量MATCH中,然后我们使用它而不是formail -xSubject:您正在运行的外部。这几乎不是一个关键的变化,但应该更有效,并且更容易阅读和调试。

    (尾随通配符.*在第一个正则表达式中是多余的;如果在一行中的任何位置找到匹配项,则满足 Procmail 的要求。)

    您可以从命令行进行测试(但这当然要求您的配方文件不覆盖DEFAULT):

    root@vbvntv-docker:/# procmail DEFAULT=/dev/null VERBOSE=yes </tmp/nst.eml
    procmail: [937] Thu Dec  1 06:57:20 2016
    procmail: Rcfile: "/etc/procmailrc"
    procmail: Assigning "PATH=/usr/local/bin:/usr/bin:/bin"
    procmail: Match on "^List-Unsubscribe:"
    procmail: Assigning "MATCH="
    procmail: Matched " testing"
    procmail: Match on "^Subject:\/.+"
    procmail: Executing " /usr/bin/formail -i "Subject: [BULKMAIL]$MATCH""
    procmail: Assigning "PATH=/root/bin:/usr/local/bin:/usr/bin:/bin"
    procmail: Assigning "LASTFOLDER=/dev/null"
    procmail: Opening "/dev/null"
    procmail: Notified comsat: "root@0:/dev/null"
    From foo@bar  Thu Dec  1 06:57:20 2016
     Subject: [BULKMAIL] testing
      Folder: /dev/null                             133
    

    如果您仍然无法使其正常工作,使用类似的成绩单更新您的问题可能会很有帮助。可以在http://www.iki.fi/era/mail/procmail-debug.html找到更多故障排除技巧

    一旦您对您的代码工作感到满意,也许您会更喜欢哪个formail -I在标题formail -i中留下现在相当无用的内容。Old-Subject:

    (您的散文描述说BULK,但代码说BULKMAIL。如果您的代码错误,显然很容易更改。)

    Webmin 的东西真的很糟糕,但显然它不是你自己的代码。有人应该向 Webmin 人员提供 Procmail 包含正则表达式引擎的提示,因此调用/bin/test来比较两个字符串确实非常非常低效,而且通常很可怕。

    • 4

相关问题

  • 使用 spamassassin 作为网络论坛的外部过滤器

  • 使用 sendmail 的服务器上的垃圾邮件每日报告

  • 请给我一个反垃圾邮件措施配方

  • 有没有办法过滤远程 IMAP 帐户中的邮件?

  • 什么是允许POP邮箱用户打开和关闭Vaction AutoReply的快速且易于理解的PROCMAIL方式

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve