如何通过命令行管道发送邮件

Web*_*net 9 linux sendmail

我有一个运行文件的 cron 命令,我正在尝试设置输出,以便它通过电子邮件发送给我。我将它与不想修改直接文件的 3rd 方脚本一起使用,因此我需要通过管道传输输出而不是修改 PHP。

我正在从mail使用sendmail. 我正在努力找出如何通过命令行正确地将主题发送到 sendmail。

/usr/local/bin/php -f /path/to/file.php 2>&1 | /usr/sbin/sendmail -s "My Test Email Subject" test@email.com
Run Code Online (Sandbox Code Playgroud)

tim*_*day 14

在我的 Debian 系统上(它有 Exim 而不是“真正的”sendmail,但为了兼容性仍然有一个 sendmail 二进制文件),当我想从脚本发送邮件时,我会做一些等效于:

cat <<EOF | sendmail -t
To: recipient@example.com
Subject: Testing
From: sender@example.com

This is a test message
EOF
Run Code Online (Sandbox Code Playgroud)

请注意,空行很重要。

  • 这是在 UNIX 下安全编程邮件发送的规范方法。 (2认同)

abl*_*hat 4

/usr/sbin/sendmail

那是错误的。

你应该mail在某个地方有一个命令。可以这样称呼mailx。应该在/bin/目录里。作为标准做法,php 脚本永远不应该调用/sbin或中的任何内容/usr/sbin。sbin 程序通常适用于 root 用户。

另外,php有一个内置的邮件功能

  • sendmail 是更好的方法(它是 Posix 标准)...但最好使用 sendmail -t (从输入流中获取标头)。通过允许发送邮件的程序仅与 sendmail 实用程序交互而根本不调用任何 shell,从而避免了许多可能的 shell 变量插值漏洞。有关更多详细信息,请参阅“timday”的答案。 (2认同)