PHP的“邮件”是如何工作的?第一种方法第二种方法
PHP的功能似乎在一个干净的系统上传递邮件,管理员或网站管理员没有进行明显的配置(没有SMTP配置等)。该函数如何将邮件传递到远程服务器?mail
php.ini
mail
PHP的功能似乎在一个干净的系统上传递邮件,管理员或网站管理员没有进行明显的配置(没有SMTP配置等)。该函数如何将邮件传递到远程服务器?mail
php.ini
mail
在 *nix 上,它调用二进制文件,然后使用邮件配置来路由电子邮件。在 Windows 上,它发送到 SMTP 服务器。在这两种情况下,系统管理员都会设置邮件系统。sendmail
您可以按如下方式检测它的工作原理。
$ ltrace php -r "mail('tester@127.0.0.1', 'Test', 'Hello world');" 2>&1 | grep sendmail
memcpy(0x095ea168, "sendmail_from", 14) = 0x095ea168
memcpy(0x095ea1e0, "sendmail_path", 14) = 0x095ea1e0
popen("/usr/sbin/sendmail -t -i ", "w") = 0x0977c7c0
从上述命令的结果可以看出,该函数打开了进程。popen()
/usr/sbin/sendmail -t -i
$ ls -l /usr/sbin/sendmail
... /usr/sbin/sendmail -> exim4
符号链接也是如此,因此调用 .sendmail
exim4
sendmail -t -i
exim4 -t -i
在手册页面中,您可以阅读有关这些选项的信息:exim4
-t -i
$ man exim4 | grep ' -t -i'
-ti This option is exactly equivalent to -t -i. It is provided for compatibility with Sendmail.
安装史努比并运行:
# grep snoopy /var/log/auth.log | tail
... php -r mail('tester@127.0.0.1', 'Test', 'Hello world');
... /usr/sbin/sendmail -t -i
... /usr/sbin/exim4 -Mc 1YxxYn-0006a7-Nw
... /usr/sbin/exim4 -t -oem -oi -f <> -E1YxxYn-0006a7-Nw
... /usr/sbin/exim4 -Mc 1YxxYn-0006aB-Oj
上述命令的结果显示了执行的命令的顺序。