我使用 mutt over ssh 作为我的邮件客户端。这很好用,但查看附件(主要是图像)有点烦人。现在我的想法是解析电子邮件,将附件存储在我的服务器上,并创建一个用于访问附件的 URL,并将此 URL 放入电子邮件中。有人已经这样做了吗?实现这一目标的简单方法是什么?
我已经在使用 procmail 来过滤东西了,我可以用它在我的电子邮件中插入文本吗?
谢谢
你当然可以。但是,没有对 MIME 的直接支持,因此您可能需要或多或少聪明的东西来确保您不会弄乱正在处理的消息的 MIME 结构。
作为一个简单的开始示例,假设您已经提取了一个附件~/public_html/prv/att000.jpg
并将您的网络服务器设置为在 提供此服务http://localhost:8080/~you/prv/att00.jpg
,您可以添加这样的标题;
:0fhw
| formail -I"X-Tracted: http://localhost:8080/~you/prv/att00.jpg"
向消息本身添加内联内容更难,但我绝不是不可能的。
编辑:如果您从配方中提取 Message-Id,您的脚本可以简化为不使用临时文件(并且通过避免Cat 的多次无用用途):
# Whitespace in [square brackets] is tab, space
:0c
* ^Message-Id:[ ]*<\/[^@>]+
| (mkdir -p "webserver path"/"$MATCH"; munpack -C "webserver path"/"$MATCH" )
...但也许您想保留您的脚本(没有无用的猫)并对其进行修改,以便它不仅提取附件,而且还在标准输出上创建一条修改后的消息,其中包含内联附件的链接。
我可以建议三个选项,所有这些选项都略显繁琐。假设您的传入消息是 (multipart/mixed (text/plain (multipart/related text/html image/png image/png))); 你可以
将您的消息包装在 (multipart/related (text/plain: your list of links here) (message/rfc822: original message here: (multipart/mixed (text/plain (multipart/related text/html image/png image/png )))). 这根本不需要您解析原始消息,但在大多数客户端中查看起来很尴尬。
假设总是有一个 text/plain 部分,并将链接列表附加到它的末尾。这需要逻辑来查找和扩展第一个 text/plain 部分,如果第一部分没有 text/plain 部分,则需要某种回退。
假设您的所有消息都是 multipart/* 并且只需在开头附近添加一个 text/plain 部分,作为第一部分,或者紧跟在第一个 text/plain 部分之后。这需要相同的逻辑,并且在某些客户端中可能难以查看,但对传入消息的假设更少,因此可能更安全。
如果您可以编写代码,则在其上调用 Procmail 非常简单;只需省略h
早期配方中的标志(指定仅在标题中过滤)。
:0fw
| replace-entire-message-with-a-different-message
目前我有这个:
在 procmail 我做一个这样的副本:
:0c
| myscript.sh
然后在 myscript.sh
path="webserver path"
tee _temp >& /dev/null # is there a different way of doing this?
# extract message-id
mid=$(cat _tempmail | formail -c -x message-id - | sed 's/ <\(.*\)@.*>/\1/')
mkdir $path/$mid
# extract all attachments into directory depending on the message id
cat _tempmail | munpack -C $path/$mid
所以我唯一要做的就是从邮件中获取 message-id 并创建我的 url。
正如triplee 建议的那样,我可以将此网址添加为标题..
如果消息中有链接会很棒,也许我会在其他时间这样做。目前,我对这个解决方案很好。