我希望能够使用shell脚本从Postfix MTA读取收到的邮件。 shell脚本应能够检索邮件标题,主题,正文,附件等,然后将邮件标记为已读。 消息以Maildir /格式存储。 在Postfix中读取邮件时,邮件将从Maildir /新文件夹移动到Maildir / cur文件夹,这有助于在需要重新处理邮件时保留作为备份。
我已经广泛search了这个,但没有发现任何有用的东西,大量的如何发送邮件的例子,但没有任何有用的阅读邮件通过脚本。 mail / mailx命令似乎只允许交互式访问,似乎没有一个通过shell脚本使用它的选项。 这只需要为一个用户工作,因为我使用catchallconfiguration将所有传入的邮件捕获到一个单一的邮箱中,以供脚本进行后续处理。
总是有select使用cronjob或incron轮询Maildir / new文件夹的传入消息,但是我会很高兴使用Postfix的邮件pipe理function,而不是手动pipe理msg文件。 我的脚本将在Postfix服务器本地。
任何build议/想法? 谢谢。
编辑:也许我应该提到,我不是在寻找与脚本的帮助。 我正在寻找一些命令行工具,可以访问Postfix Maildir /味精商店和阅读/做东西的信息,并可以调用非互动的方式。 换句话说,邮件工具的基本function,但非互动。
你的Google Fu缺乏。
一个简单的解决scheme是一个sendmail风格的~/.forward文件,其中你pipe道| 该消息甚至在写入到您的邮箱之前直接发送到您的脚本。 然后你的脚本完成它的事情,然后将邮件信息写入磁盘。
同样的,当你将procmailconfiguration为邮件传递代理时,你会得到更多的灵活性,并且设置一个~/.procmailrc来将消息转发给你的脚本。
另一种方法是安装IMAP或POP3守护进程,并使用fetchmail轮询您的邮箱并阅读所有新邮件并将其交给您的脚本。
我发现以下内容:
http://notes-cs.blogspot.in/2013/04/use-command-line-to-read-linux-local.html
这个人确切地描述了我正在寻找的东西。 纯粹的天才! 捕捉本质(下面的所有内容来自上面的链接):
打印所有电子邮件到STDOUT:
$ echo "type *" | mail $ echo "type 1" | mail # print the first email to stdout $ echo "type 3-5" | mail # print the emails from 3 to 5
检查邮箱是否为空(即“找不到用户名”的邮件):
$ echo q | mail 2>&1 | grep "No mail for [username]"
清除邮箱:
$ echo "d *" | mail $ echo "d 3" | mail # Delete the 3rd email
将所有电子邮件保存在文本文件中:
$ echo "s * test.txt" | mail
保存文件中某个范围内的电子邮件:
$ echo "s 3-6 test.txt" | mail # this will save email from #3 to #6 to the file test.txt
从邮箱读取一封电子邮件:
$ echo 1 | mail # Read the first mail from mail box: $ echo 5 | mail # Read the 5th email from mail box: $ echo 6 | mail
如果邮箱里没有第六封邮件 它会提示你下面的错误:
6: Invalid message number
错误消息“无效的消息号码”告诉您邮箱中没有第六封电子邮件。 如果第五封电子邮件成功返回 您可以将错误消息“无效的消息号”视为邮箱的结尾,就像文件的EOF一样。 结合循环,您可以浏览邮箱内的所有电子邮件。