我使用mutt over ssh作为我的邮件客户端。这很好用,但是查看附件(主要是图像)有点烦人。现在我的想法是解析电子邮件,将附件存储在我的服务器上并创建用于访问附件的URL并将此URL放在电子邮件中。有没有人这样做过?实现这一目标的简单方法是什么?
我已经使用procmail过滤内容,我可以用它在我的电子邮件中插入文字吗?
由于
答案 0 :(得分:2)
当然可以。但是,没有对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,您的脚本可以简化为不使用临时文件(并通过by,避免多个Useless Uses of Cat):
# Whitespace in [square brackets] is tab, space
:0c
* ^Message-Id:[ ]*<\/[^@>]+
| (mkdir -p "webserver path"/"$MATCH"; munpack -C "webserver path"/"$MATCH" )
...但也许您想要保留您的脚本(没有Useless Cats)并对其进行修改,以便它不仅可以提取附件,还可以在标准输出上创建修改后的消息,其中包含指向附件的链接
我可以提出三种选择,所有选项都略显麻烦。假设您的传入消息是(multipart / mixed(text / plain(multipart / related text / html image / png image / png)));你可以
将您的消息包裹在(多部分/相关(文本/明文:此处的链接列表)中(消息/ rfc822:此处的原始消息:( multipart / mixed(text / plain(multipart / related text / html) image / png image / png))))。这根本不需要您解析原始消息,但在大多数客户端中查看都很尴尬。
假设始终存在text / plain部分,并将链接列表附加到其末尾。这需要逻辑来查找和扩展第一个text / plain部分,如果没有text / plain部分作为第一部分,则需要某种后备。
假设您的所有消息都是多部分/ *并且只是在开头附近添加文本/普通部分,作为第一部分,或紧接在第一个文本/普通部分之后。这需要相同的逻辑,并且在某些客户端中可能难以查看,但对传入消息的假设较少,因此可能更安全。
如果您可以编写代码,在其上调用Procmail非常简单;只需省略早期配方中的h
标志(指定仅在标题中过滤)。
:0fw
| replace-entire-message-with-a-different-message
答案 1 :(得分:0)
目前我有这个:
在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。
根据tripleee的建议,我可以将此网址添加为标题..
如果邮件中有链接会很好,也许我会在其他时间再这样做。目前,我对这个解决方案很满意。