我sendmail
在 Fedora 23 上安装了该软件包。所以现在我已经可以/usr/sbin/sendmail
正常工作了。但现在我在 bash shell 中没有收到邮件通知。为什么不?
编辑:我认为 bash 通知已损坏(并与 esmtp 一起使用,如下所述)。然而,登录时的通知更容易测试,所以我担心我混淆了这个问题。
登录时的通知不起作用,但我认为这实际上是 pam_mail 的责任,而不是 bash 的责任。我认为登录时的通知确实适用于 esmtp,但我注意到grep -r pam_mail /etc/pam.d
没有显示任何结果。不幸的是,按照文档启用 pam_mail 似乎不起作用任何事物,即使它应该总是打印,例如“无邮件”。它还有一个debug
选项,但没有向用户或系统日志(又称日志)显示任何内容。
mail alan; sleep 60
做生成通知。
但是,如果我mail alan; logout
再次登录时不会收到任何通知。即使sleep 60
。显然这是不可取的。
看起来 bash 假设pam_mail
正在工作。因此,如果登录时邮件可用,那么 bash 会确保不是对同一封邮件进行第二次通知。
所以真正的问题是 pam_mail 不起作用。
这种认识需要进行详尽的测试,因为我很笨。
详尽的测试
如果我mail alan
,然后打开第二个登录并运行sleep 60
,我会在一次登录中收到通知(仅)。这显然不是注销脚本的问题,因为mail alan; sleep 60
即使我打开第二个登录并立即注销它也可以工作。
从第二个用户发送邮件进行的测试表明,如果您在发送邮件时未登录,则通知不起作用。
一旦 bash 显示了通知,它就不会再显示它,例如在一秒钟之后sleep 60
。
我认为它可能会将文件的访问时间与修改时间进行比较,但情况似乎并非如此。
$ stat $MAIL 文件:'/var/spool/mail/alan' 大小:859 块:16 IO 块:4096 常规文件设备:fd00h/64768d Inode:655929 链接:1 访问:(0660/-rw-rw-- --) Uid: ( 1000/ alan) Gid: ( 12/ mail) 上下文: unconfined_u:object_r:mail_spool_t:s0 访问: 2016-05-12 22:17:28.907175410 +0100 修改: 2016-05-12 22:18 :03.177899774 +0100 更改: 2016-05-12 22:18:03.177899774 +0100 出生: -
环境变量
下面的例子。这是我给自己发送了一封测试邮件之后的结果。因此,当我登录时,我希望收到通知。如果我继续运行mail
,它会按预期显示测试邮件。
[alan@localhost ~]$ ssh alan-nuc
Last login: Thu May 12 20:50:54 2016 from 172.16.9.242
[alan@alan-nuc ~]$ echo $MAIL
/var/spool/mail/alan
[alan@alan-nuc ~]$ ls -l $MAIL
-rw-rw----. 1 alan mail 850 May 12 20:56 /var/spool/mail/alan
[alan@alan-nuc ~]$ echo $MAILCHECK
60
[alan@alan-nuc ~]$ echo $MAILPATH
[alan@alan-nuc ~]$
安装发送邮件
Fedora Workstation 附带一个非工作/bin/sendmail
(esmtp 包)。
可以通过 install maildrop 和 setting 来设置mda="maildrop -d %T" in /etc/esmtprc
。这允许用户向自己发送邮件,也可以从 root 向任何人发送邮件。 使用 esmtp 和 maildrop,bash 按预期显示邮件通知。
但是 esmtp 不适用于来自cron
守护进程的邮件。尝试读取要传递的消息时,esmtp 会记录“权限被拒绝”。 https://bugzilla.redhat.com/show_bug.cgi?id=1303305 具体来说,当尝试重新打开 时/dev/stdin
,通常预计会成功(相当于dup()
)。所以它可能是 SELinux,但没有记录 SELinux (AVC) 拒绝,它可能是dontaudit
.
安装旧的 sendmail 软件包将替换 esmtp 提供的 sendmail 命令。我认为这将是绕过新错误的简单方法,但现在我又遇到了另一个错误:(。
答案1
登录时报告邮件状态的配置由 处理pam_mail
。检查相应的文件(例如/etc/pam.d/ssh
)并确保有一行看起来像这样:
session optional pam_mail.so standard noenv
根据您的发行版的不同,可能会有所不同。检查您的发行版文档以了解应如何设置。