linux - 在 procmail 进程之后/之前清理文本邮件以便打印该邮件

标签 linux shell procmail

我必须清理一些邮件,以便使用 procmail 只打印它们的正文:

:0: # printing mail with bb in the subject to bbprinter
* ^Subject:.*bb
| lpr -Pbbprinter

我应该怎么做?

欢迎任何想法帮助

最佳答案

您的问题在很多方面都没有明确定义。 “干净”是什么意思? “ body ”是什么意思?

如果你的意思是,我怎样才能将 RFC5322 正文而不是 header 发送到打印机,这很简单:

:0b
* ^Subject:.*bb
| lpr -Pbbprinter

请注意 :0 之后的 b 标志,它将操作的范围限制为仅主体。

但是对于 MIME,您实际上通常不需要 RFC5322 正文(即最后一个标题行之后的所有内容),而只是 MIME 多部分消息中的一部分。您需要对要提取的部分进行一些分析,但如果您有分析,那仍然很容易:

:0
* ^Subject:.*bb
| parse-out-preferred-mime-body-part | lpr -Pbbprinter

(我们在这里不使用 :0b,因为适当的 MIME 解析器也需要访问顶级 RFC5322 header 。)

如果您所说的“干净”是其他意思,或者另外,您将必须澄清您的问题,但总体思路类似于

:0
* ^Subject:.*bb
| cleanupbody | lpr -Pbbprinter

哪里 cleanupbody 可以执行任何你所说的“清理”(抹掉脏话?修复常见的拼写错误?或多或少相同的事情?)

最后,总结一下,您基本上可以通过管道传输到任何复杂的 shell 脚本(尽管当它超过几行时,您可能最好将其全部或部分移动到一个单独的脚本中,也许有自己的测试套件)。

:0
* ^Subject:.*bb
| parse-out-preferred-mime-body-part | \
  sed -e 's/grammer/grammar/g' -e 's/seperate/separate/g' \
      -e 's/definately/definitely/g' | \
  lpr -Pbbprinter

关于linux - 在 procmail 进程之后/之前清理文本邮件以便打印该邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16416863/

相关文章:

javascript - 用于排除一些与起始字符串匹配的子文件夹的正则表达式

linux - 如何使用 linux (debian) 命令行将所有类型文件 file1.ext、.file2ext 和 .anotherext 从文件夹移动到另一个文件夹?

linux - 添加init=/bin/bash后如何更改grub.conf

procmail - 如何设置procmail的日志记录方式

regex - 如何匹配 procmail 邮件正文中的任何空格?

linux - 如何从 bash 中的标准输入获取最长和最短的行

shell - ZSH历史完成菜单

bash - 使用管道命令忽略 Bash 脚本中的 HUP 信号

linux - 当函数返回但函数中的命令在后台运行时会导致什么行为?

email - 使用 procmail 将电子邮件转发到另一个保留副本的帐户