我被要求提供一种加载传入电子邮件的方法,处理部分文本,然后将其转发到 Web 服务器供客户端阅读。基本上,拦截邮件,将其放入另一个进程,一旦该进程完成(这很重要),就将其发送到 Web 服务器,就像我的进程拦截之前将要发生的那样。
除了实际的电子邮件文件之外,我还需要从 MySQL 数据库中读取有关该帐户的信息。
邮件服务器是 Postfix/Dovecot,Web 服务器是 Apache - 在 CentOs 上运行。它们可能在同一台服务器上运行,也可能不在同一台服务器上运行。我不想做服务器的工作,也不想扫描病毒或做任何身份验证 - 所有这些都应该已经发生了。
我研究过一些缓存想法,甚至使用 NginX 作为 IMAP 代理,但我认为这就像试图用猎枪打死苍蝇一样。更糟糕的是,我实际上并不是一个网络人员,所以我不了解 Apache 的所有复杂性。
是否有人知道在电子邮件无缝到达浏览器之前什么时候是拦截该电子邮件的正确时间?
任何帮助将非常感激。
非常感谢
答案1
最简单的方法不是直接从 postfix 执行 LDA,而是通过调用包装到某些脚本中的 dovecot_lda。
让我们修改 postfix 配置:
mailbox_command = /some/path/to/the/script.sh "$SENDER" "$RECIPIENT"
让script.sh包含这样的代码:
#!/bin/sh
MSG=$(cat < &0)
ARG1=$1
ARG2=$2
# let's deliver message as usual
echo "$MSG" | /usr/lib/dovecot/dovecot-lda -f $ARG1 -a $ARG2
# from here we can do anything we want
echo "$MSG" > /some/path/to/the/fresh/$$.copy
echo $MSG | while read line
do
if [ $line != '' ]
then
echo $line >> /some/other/file.txt
else
echo '---------------------' >> /some/other/file.txt
break
fi
done
#####
然后,您的生成网页的软件只需要从 /some/path/to/the/fresh/* 读取所有内容并将其包含到 html 中。
答案2
你可能想看看阿马维斯。它主要被宣传为防病毒软件,但您可以禁用它并运行您想要的任何 perl 脚本。您会发现其中包含示例脚本,其中一些包含对数据库的调用。它与 Postfix/Dovecot 集成得很好。