【问题标题】:How to preproccess my emails to have links to my attachments如何预处理我的电子邮件以链接到我的附件
【发布时间】:2011-09-12 09:21:21
【问题描述】:

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

我已经在使用 procmail 来过滤东西了,我可以用它在我的电子邮件中插入文本吗?

谢谢

【问题讨论】:

  • 如果您能向我们展示您目前拥有的东西,也许从那里拿走它会更容易。您是否已经有了解析 MIME 结构和提取附件的东西?

标签: email procmail mutt


【解决方案1】:

当然可以。但是,没有对 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,您的脚本可以简化为不使用临时文件(并且通过避免多个 Useless Uses of Cat): p>

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

  1. 将您的消息包装在 (multipart/related (text/plain: 您在此处的链接列表) (message/rfc822: original message here: (multipart/mixed (text/plain (multipart/related text/html image/png image/png))))。这根本不需要您解析原始消息,但在大多数客户端中查看起来很尴尬。

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

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

如果您可以编写代码,则在其上调用 Procmail 非常简单;只需省略前面配方中的h 标志(指定仅在标题中过滤)。

:0fw
| replace-entire-message-with-a-different-message

【讨论】:

  • 感谢您的建议。不过,这样的标题在所有其他标题中都有点隐藏。我将在答案中描述我到目前为止所拥有的内容。
【解决方案2】:

目前我有这个:

在 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 的建议,我可以将此网址添加为标题..

如果消息中有链接会很棒,也许我会在其他时候这样做。目前,我对这个解决方案很好。

【讨论】:

  • 编辑了我的答案以合并您提供的信息。假设你的意思是cat,你有tee,并且临时文件的名称是_tempmail,而不是_ temp
猜你喜欢
  • 2011-09-03
  • 1970-01-01
  • 2012-09-05
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 2011-12-20
  • 1970-01-01
相关资源
最近更新 更多