微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – 如何从脚本中的`mail`中获取最旧的未读消息?

在我试图完成写入的脚本中,我需要从当前用户的邮箱中获取最旧的未读消息(具体来说,我需要该项目的主题行).

提取最旧的消息之后,我还需要将其转发给其他用户以进行存档.

如何在bash或Python提取该信息?

使用主题提取文件中然后转发消息,只需要脚本进行文件处理会更好吗?如果是这样,我怎么能这样做呢?

解决方法:

在传统的mBox系统中,/ var / mail /中的第一条消息 – 按照定义 – 是未读的,也是最早可用的消息.

formail -zxSubject: -1 -s </var/mail/you

要将消息提取文件(以便您可以方便地转发该消息),然后提取Subject:标题,请尝试类似的方法

tmp=$(maketemp -t findoldestunread.XXXXXXXX) || exit 127
trap 'rm -f $tmp' EXIT   # remove temp file when done
trap 'exit 1' 1 2 3 5 15 # remove also in case of error / interruption
formail -1 -s </var/mail/you >"$tmp"
formail -zxSubject: <"$tmp"
sendmail -oi [email protected] <"$tmp"

在Maildir,情况有点复杂.新消息暂时存储在tmp中,然后移动到cur.文件名表示标志; in so many words,查找一个文件名,其中包含逗号附近的逗号,其中S不在逗号后面的字符中.

find path/to/Maildir/cur -maxdepth 1 -type f \
    -regex '.*,[^S,]*$' -printf '%C@ %p\n' |
sort | sed '1s/^[^ ]* //;q' | xargs formail -zxSubject:

printf格式说明符首先打印时间戳以便于排序.我们排序,抓住第一行,修剪时间戳,并将其提供给formail以提取Subject:标题. (如果你有一些带有换行符的时髦文件名,这显然会破坏;有很多方法,但我在这里很懒惰和实用.)

在这种情况下,重构只是打印文件名应该是微不足道的 – 只需将管道移除到xargs并将输出捕获到变量中.

一些Maildir实现还将具有某种索引,这可能使该任务比遍历文件系统中的整个邮箱更容易和更快,但同样,在不了解您正在使用哪种实现的情况下,这只是一个推测性的注释在此刻.

如果您的邮箱不是这两种格式中的任何一种,(您很奇怪),您需要更新您的问题并提供更多详细信息.

您对邮件的引用意味着您可能正在使用传统的Berkeley mBox系统,但有许多版本,其中一些版本有些深奥.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐