我正在尝试以 CentOS 上的非 root 用户身份从命令行发送邮件。我正在使用以下命令,但出现错误:
$ echo test | mail -s "test" to@example.com -c cc@example.com
WARNING: RunAsUser for MSP ignored, check group ids (egid=102, want=51)
can not write to queue directory /var/spool/clientmqueue/ (RunAsGid=102, required=51): Permission denied
Run Code Online (Sandbox Code Playgroud)
我已将用户添加到组 51 (smmtp),并且我可以以用户身份同时 cd 和写入该目录。
为什么我收到错误?
一些相关权限:
# ls -la /var/spool/clientmqueue/
total 8
drwxrwx--- 2 smmsp smmsp 4096 Mar 8 14:25 .
drwxr-xr-x. 13 root root 4096 Oct 21 15:09 ..
# ls -la /usr/sbin/sendmail
lrwxrwxrwx 1 root root 21 Oct 21 15:09 /usr/sbin/sendmail -> /etc/alternatives/mta
# ls -la /etc/alternatives/mta
lrwxrwxrwx 1 root root 27 Oct 21 15:09 /etc/alternatives/mta -> /usr/sbin/sendmail.sendmail
# ls -la /usr/sbin/sendmail.sendmail
-rwxr-sr-x 1 root smmsp 833512 Nov 11 2010 /usr/sbin/sendmail.sendmail
Run Code Online (Sandbox Code Playgroud)
Sendmail期望电子邮件地址是命令行中的最后一个内容。如果电子邮件地址后面有任何参数,它会将它们解析为电子邮件地址。在上面的示例中,它尝试将“-c”解析为电子邮件地址并给出不相关的错误。
# BAD
$ echo test | mail to@example.com -s "test"
# BAD
$ echo test | mail to@example.com -c cc@example.com
# GOOD
$ echo test | mail -s "test" -c cc@example.com to@example.com
Run Code Online (Sandbox Code Playgroud)
收件人电子邮件地址必须遵循抄送电子邮件地址、电子邮件主题以及需要传递给 sendmail 的任何其他参数。