如何预处理我的电子邮件以获得指向我的附件的链接

时间:2011-09-12 09:21:22

标签: email procmail mutt

我使用mutt over ssh作为我的邮件客户端。这很好用,但是查看附件(主要是图像)有点烦人。现在我的想法是解析电子邮件,将附件存储在我的服务器上并创建用于访问附件的URL并将此URL放在电子邮件中。有没有人这样做过?实现这一目标的简单方法是什么?

我已经使用procmail过滤内容,我可以用它在我的电子邮件中插入文字吗?

由于

2 个答案:

答案 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)));你可以

  1. 将您的消息包裹在(多部分/相关(文本/明文:此处的链接列表)中(消息/ rfc822:此处的原始消息:( multipart / mixed(text / plain(multipart / related text / html) image / png image / png))))。这根本不需要您解析原始消息,但在大多数客户端中查看都很尴尬。

  2. 假设始终存在text / plain部分,并将链接列表附加到其末尾。这需要逻辑来查找和扩展第一个text / plain部分,如果没有text / plain部分作为第一部分,则需要某种后备。

  3. 假设您的所有消息都是多部分/ *并且只是在开头附近添加文本/普通部分,作为第一部分,或紧接在第一个文本/普通部分之后。这需要相同的逻辑,并且在某些客户端中可能难以查看,但对传入消息的假设较少,因此可能更安全。

  4. 如果您可以编写代码,在其上调用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的建议,我可以将此网址添加为标题..

如果邮件中有链接会很好,也许我会在其他时间再这样做。目前,我对这个解决方案很满意。