我使用的是 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
)...它将停留在其中,被遗忘,直到如果邮件传输软件的其余部分尚未激活,则时间结束,因为应该定期检查邮件队列的进程将不会运行。