发送邮件。 存储收到的所有电子邮件,创build唯一的单个文件

我实际上面临着与客户的自定义应用程序的整合问题。

Sendmail真的很容易configuration和理解,但是我需要的实现起来相当复杂。

设备将读取收到的电子邮件,处理它们并将一些数据存储在他的数据库中。 要做到这一点,客户问我是否有可能sendmail,当收到一封电子邮件,没有发生在用户configuration文件下的单个文件的电子邮件,但存储在每个处理的电子邮件的电子邮件文件的specidifiedpath。

有可能做到这一点,或有任何亲切的想法来欺骗它,让它工作?

谢谢

S.

听起来像电子邮件存储在Mbox格式,这是一个接一个的每个电子邮件只是一个单一的文件。 这种格式现在很less使用,因为在现代使用中它会变得非常快速,变得麻烦。

最简单的事情是将Sendmailconfiguration为使用Procmail进行本地交付,并将Procmailconfiguration为以Maildir格式存储消息。

确切的过程将取决于操作系统,但它应该只是安装Procmail的情况下,然后

1)将Sendmailconfiguration为使用Procmail,大多数情况下只需.mc添加到.mcconfiguration文件并重新.mcconfiguration。

 FEATURE(local_procmail) MAILER(procmail) 

2)创build或更新procmailrcconfiguration文件以Maildir格式存储消息。 (由存储path末尾的/

 DEFAULT=$HOME/mail/ 

mail目录可能需要存在,并有curnewtmp子文件夹。 这些应该由用户拥有并具有模式700权限。

寻找有关您的操作系统的Sendmail / Procmail / Maildir的信息可能会帮助您find一些指南或文档。

sendmail使用其他程序将消息传递给本地收件人。 在Linux-es上,通常是procmail 。 Procmail可以将邮件传递给maildir或mh文件夹。 两者似乎大致是你想要的。

以root身份使用下面的命令来检查sendmail使用哪个程序作为本地邮件程序:
echo '=M' | sendmail -bt | grep local

要么
说服客户使用IMAP或POP3访问邮箱。 UID(唯一标识符)可以以更便携的方式传递客户想要的东西。

让应用程序从拾取位置读取文件可能是一个糟糕的devise理念。 编写电子邮件不是一个primefaces操作,您不希望应用程序选取不完整的消息。

(Maildir格式通过将传入消息写入tmp/目录来防止这种情况发生,而这个消息并不向邮件客户端公开,只有当消息文件成功提交到磁盘后,消息文件才会被重命名/移动到new/这是一个primefaces操作。)

正如@AnFi所build议的 ,应用程序接收电子邮件的通用解决scheme是让应用程序像邮件客户端一样工作,让它轮询IMAP / POP3邮箱并跳过/删除已成功处理的邮件。

类似的generics是让应用程序从STDIN接收电子邮件消息。

  • 然后,您仍然可以创build一个包装轮询邮箱,这样你就不必在邮件服务器上安装任何东西:)
    使用您最喜欢的脚本语言来创build这样一个包装器,或者利用现有的工具,例如: fetchmail <other-options> --mda /path/to/application
  • 或者,如果您想要在邮件服务器上安装应用程序: | 允许您将消息直接转发到以下任一应用程序:
    包含一行"|/path/to/application" ~/.forward文件
    具有条目mailboxname: "|/path/to/application"/etc/aliases文件mailboxname: "|/path/to/application"

对于sendmail,后者通常需要通过将/ path / to / application复制到/ etc / smrsh来configurationsendmail受限shell( smrsh )