无需运行 Postfix 服务即可传输电子邮件

无需运行 Postfix 服务即可传输电子邮件

我使用的是 Mac 操作系统 (10.13.4)。我以某种方式运行了一个邮件服务器,并且能够[email protected]使用以下命令发送电子邮件

echo "mbody" | mail -s "msub" "[email protected]"

尽管由于未注册 DNS,电子邮件仍被放入垃圾邮件文件夹中。

postfix没有在我的系统中运行:

katie@nyxae $ sudo postfix status
postfix: Postfix is running with backwards-compatible default settings
postfix: See http://www.postfix.org/COMPATIBILITY_README.html for details
postfix: To disable backwards compatibility use "postconf compatibility_level=2" and "postfix reload"
/usr/sbin/postconf: warning: /etc/postfix/main.cf: unused parameter: use_sacl_cache=yes
/usr/sbin/postconf: warning: /etc/postfix/main.cf: unused parameter: imap_submit_cred_file=
/usr/sbin/postconf: warning: /etc/postfix/main.cf: unused parameter: mydomain_fallback=localhost
postfix/postfix-script: the Postfix mail system is not running

我跑去lsof -i 4 -a查看是否有任何已知的电子邮件服务正在端口 25 上运行。但没有发现相关服务。

所以我的问题是什么服务可以实现这一点?这怎么可能呢?

答案1

从历史上看,Unixmail命令根本不使用网络服务。它只是/usr/sbin/sendmail使用必要的选项运行,并将传出电子邮件传送给它。从字面上看,这就是sendmail它的名字的由来。对于传入的邮件,它只会读取位于 的用户本地系统收件箱/var/mail/<username>

由于这种约定,即使您的类 Unix 操作系统正在使用其他一些邮件传输软件(例如 macOS 中的 Postfix),该软件也需要提供/usr/sbin/sendmail能够理解一组众所周知的选项的二进制文件,以便实现此目的旧的简单界面。

因此,这种调用方法会启动 Postfix 的正确部分来进行一次性邮件传输,即使 Postfix 软件未配置并且处于出厂默认设置:如果收件人是本地用户,或者收件人服务器可以是如果从 DNS MX 和/或 A 记录确定并且可访问,则邮件将继续发送,并且进程/usr/sbin/sendmail将以结果代码 0 退出,向mail命令表明操作成功。

但是,如果无法立即到达收件人服务器,那么所有的赌注都会被取消:在这种情况下,组件/usr/sbin/sendmail会将消息存储在本地系统的外发邮件队列中(历史上/var/spool/mqueue,使用 Postfix 可能是这样/var/spool/postfix/deferred)...它将停留在其中,被遗忘,直到如果邮件传输软件的其余部分尚未激活,则时间结束,因为应该定期检查邮件队列的进程将不会运行。

相关内容