我实际上面临着与客户定制应用程序集成的问题。
Sendmail 确实很容易配置和理解,但我所需要的却相当复杂。
该设备将读取收到的电子邮件,对其进行处理,并将一些数据存储在其数据库中。为此,客户问我,sendmail 在收到电子邮件时,是否有可能不将电子邮件放在用户配置文件下的单个文件中,而是将它们存储在指定路径中,并为每封处理的电子邮件创建一个电子邮件文件。
有可能做到这一点吗,或者有没有什么好主意来欺骗它并让它发挥作用?
谢谢
年代。
答案1
听起来电子邮件是以 Mbox 格式存储的,这只是一个文件,每封电子邮件都是一个接一个。这种格式现在很少使用,因为在现代使用中它往往会很快增长并变得繁琐。
最简单的方法是配置 Sendmail 使用 Procmail 进行本地传递,并配置 Procmail 以 Maildir 格式存储消息。
具体过程取决于操作系统,但应该只是安装 Procmail 的情况,然后
1)配置 Sendmail 以使用 Procmail,大多数情况下只需在配置文件中添加以下行.mc
并重建配置。
FEATURE(local_procmail)
MAILER(procmail)
2)创建或更新procmailrc
配置文件以 Maildir 格式存储邮件。(/
存储路径末尾带有 )
DEFAULT=$HOME/mail/
该mail
目录可能需要存在cur
,并且具有new
和tmp
子文件夹。这些应归用户所有,并具有模式 700 权限。
查找有关您的操作系统的 Sendmail/Procmail/Maildir 的信息可能会帮助您找到一些指南或文档。
答案2
答案3
让应用程序从拾取位置读取文件可能不是一个好的设计想法。编写电子邮件消息不是原子操作,您不希望应用程序拾取不完整的消息。
(Maildir 格式通过将传入消息写入未tmp/
向邮件客户端公开的目录来防止这种情况。只有将消息文件成功提交到磁盘后,才会将消息文件重命名/移动到目录new/
,因为这是一个原子操作。)
应用程序接收电子邮件的通用解决方案是@AnFi 已经建议,让应用程序作为邮件客户端运行并让其轮询 IMAP/POP3 邮箱并跳过/删除已成功处理的消息。
类似地,通用的做法是让应用程序从 STDIN 获取电子邮件消息。
- 然后,您仍然可以创建一个轮询邮箱的包装器,这样您就不必在邮件服务器上安装任何东西:)
使用您最喜欢的脚本语言来创建这样的包装器或利用现有工具,例如:fetchmail <other-options> --mda /path/to/application
- 或者,如果您确实想在邮件服务器上安装该应用程序:允许|您将消息直接转发到任何应用程序:包含一行 的
文件~/.forward
"|/path/to/application"
/etc/aliases
带有条目的文件mailboxname: "|/path/to/application"
对于 sendmail,后者通常要求您配置 sendmail 受限 shell(斯莫什)通过将 /path/to/application 复制到 /etc/smrsh