是否有可能让fetchmail在找到未读电子邮件时触发脚本

时间:2014-10-04 06:00:26

标签: linux shell cron

我有一个GMail帐户,该帐户只能接收包含特定主题的电子邮件。 当找到此电子邮件的未读版本时,我需要一些linux命令来触发。 这些命令只是应用程序调用,因此我可以在运行时记录我的桌面。

xrandr --size 1360x768
timeout 2h recordmydesktop
xrandr --size 1366x768

我已经在gmail上为电子邮件本身创建了一个过滤器,但现在我不知道接下来要做什么。有人告诉我设置fetchmail,它会在我设置的文件夹中获取未读的电子邮件。(并将新获取的电子邮件标记为在gmail上读取,这样就不会一遍又一遍地读取同一邮件)。这是我得到的脚本,但我不确定脚本是否能满足我的需要。

poll imap.gmail.com protocol IMAP 
   user "l**********@gmail.com"
   password '*****'
   folder 'Pic*******'
   fetchmail -c
   keep
   ssl

接下来是我被告知设置一个procmail脚本来触发我的linux命令,只要fetchmail说它发现了一个未读的电子邮件版本。但我不确定该怎么做。我还需要设置cronjob以便每隔几分钟触发一次该脚本。

2 个答案:

答案 0 :(得分:0)

fetchmail擅长下载邮件。 procmail善于过滤消息并根据收到的邮件执行任意linux命令。

要将fetchmail设置为每10分钟作为一个cronjob运行,并将收到的邮件传递给procmail,请运行crontab -e并添加以下行:

*/10 * * * *  /usr/bin/fetchmail -N -d0 -f $HOME/.fetchmailrc -m "/usr/bin/procmail $HOME/.procmailrc"

您需要创建一个~/.procmailrc文件来进行过滤和执行。

您还没有说出要运行的命令。例如,仅为了向您提供提示,~/.procmailrc文件中的以下节选择来自somebody@example.com的主题标题为New File的邮件。然后消息的主体被uudecoded,然后uudecoder的输出被解压缩:

:0 w
* ^From:.*somebody@example.com
* ^Subject: New File
| uudecode -o /dev/stdout | tar -xzC /var/tmp/

答案 1 :(得分:0)

运行X命令的要求在某种程度上使问题复杂化。 Cron并不适合 - 即使您的计算机仅在您登录时打开,通用X体系结构基于权限分离 - 在当前X会话中运行的命令可以访问GUI,而其他命令则不能。 / p>

从你的X会话中运行Fetchmail和Procmail也有点尴尬,但如果你有一个专门的电子邮件帐户来完成这项任务,我不认为你不小心偶尔会丢失一封电子邮件。

因此,我建议使用.xsession或类似的简单后台脚本而不是Cron作业。

#!/bin/sh
while true; do
    fetchmail -N -d0 -f $HOME/.fetchmailrc -m "/usr/bin/procmail $HOME/.procmailrc"
    sleep 600
done

Procmail配方看起来像

:0
* ^Subject: whatever
| xrandr --size 1360x768 ;\
  timeout 2h recordmydesktop; \
  xrandr --size 1366x768