【问题标题】:Munpack and Procmail - getting subject lineMunpack 和 Procmail - 获取主题行
【发布时间】:2017-08-09 08:07:27
【问题描述】:

我正在使用 munpack 将电子邮件中的附件保存在一个目录中。这可行,但给我的应用程序带来了问题。

电子邮件是从设备生成的,并将其 UID 广告到主题行。我需要以某种方式从电子邮件中获取主题行并将图像另存为,或者将主题行添加到 munpack 在保存文件时创建的 .desc 文件中。

这是我当前的 procmailrc 规则:

ATTACH=`echo /home/foo/attachments/camera`
:0 c
* ^To:.*devicemail@mydomain.com
* ^Subject:[^   ]*\/:
| munpack -s $MATCH -q -C $ATTACH

-s 似乎不再是一个有效的选项了。

不确定该主题位是否真的有效

或者我可以将电子邮件文件发送到 python 脚本以查找主题行吗?

【问题讨论】:

  • 我隐约推测 -s 不喜欢接收单个不带引号的冒号作为其值,这就是您的代码所做的(如果传入的消息实际上在主题标头中包含冒号;如果不,条件显然不匹配)。
  • 我快速搜索到的munpack 手册页确实不支持-s 选项,在这种情况下,您的问题会变得更加复杂。 linux.die.net/man/1/munpack 和你的版本一致吗? (您在哪个操作系统上使用哪个版本?使用不同的实用程序可以接受吗?)

标签: python procmail


【解决方案1】:

您的任务是useless use of backticks。你想要的只是

ATTACH="/home/foo/attachments/camera"

但是如果这是一个静态字符串,把它放在一个变量中并不能真正给你带来任何好处。

要实际提取主题,\/ 之后的内容需要是与您想要的主题部分匹配的正则表达式。

:0
* ^To:.*devicemail@mydomain\.com
* ^Subject:[      ]*\/[^        ].+
| munpack -s "$MATCH" -q -C "$ATTACH"

\/ 标记之前的正则表达式 [ ]* 会跳过任何前导空格(在括号内,您需要一个制表符和一个空格,以匹配任何一个序列)。 [^ ] 匹配字段的第一个非空白字符(不是空格,也不是制表符),然后我们用.+ 捕获该行的其余部分

还要注意变量的正确引用。通常,您应该将变量放在双引号中,除非您特别希望 shell 对值执行 whitespace tokenization and wildcard expansion

我在 :0 之后删除了 c 标志,因为我猜你实际上并不希望 Procmail 也对这条消息做其他事情(但这是推测性的;如果我错了,一定要说出来返回)。

如果确实 munpack 不支持 -s 那么可能是这样的:

:0
* ^To:.*devicemail@mydomain\.com
* ^Subject:[    ]*\/[^  ].+
| extract "$ATTACH/$MATCH"

extract 是一个类似的脚本

#!/bin/sh
dest=$1
mkdir "$dest.tmp"
munpack -q -C "$dest.tmp"
set -- "$dest.tmp"/*
test -e "$1" || { rmdir "$dest.tmp"; echo "$0: $dest: nothing extracted" >&2; exit 2;}
case $# in 1) mv "$1" "$dest"; rmdir "$dest.tmp"; exit 0;; esac
echo "$0: $dest.tmp contains multiple files; halp!"; exit 1

这会提取到一个目录中,然后如果该目录包含一个文件,则将其移动到最终目的地。如果没有提取任何内容,则什么也不做。如果提取的文件不止一个,则报错。

您当然可以将整个消息通过管道传递给 Python,但将功能推送到 Python 中似乎没有必要或有用。 (同样,您可能有额外的上下文以另一种方式提示天平,但我们从您的问题中知道的不够多,无法得出结论就是这种情况。)

【讨论】:

  • ... 不过,您至少要保留 c 标志,直到您的配方正确调试为止。
  • Your other question 看起来天平可能正在倾倒,有利于 Python 解决方案。不幸的是,Procmail 不知道现代 MIME 的主要部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多