解决home目录下出现的dead.letter

一个萌新通过ssh连接到远程服务器,列出home目录时,惊异地发现竟然多出一个文件,名叫dead.letter。萌新害怕地以为是个hacker掏出了一本death.note,写上了这个服务器的名字。【一个真实的故事】

dead.letter

dead.letter是通过邮件程序无法发送的邮件最终的去向。通常的来源是corn服务,在corn中注册的计划任务如果没有重定向stdout与stderr,将会将两者通过sendmail发送给unix用户。例如服务器域为domain,用户名为user,则最终会将stdout与stderr发给user@domain。对付此类原因产生的dead.letter,一方面可以通过重定向流,使其不发送邮件;当然另一方面可以通过正确配置邮件服务,让它正确的发送出去。

对于有专职运维的服务器来说,发送到本地邮箱就可以了。运维只需要用mail命令查收邮件即可。然而对于个人服务器,并不会天天用ssh连到服务器,只为查收邮件,因为更优雅的方案是使用SMTP向个人的邮箱(e.g Gmail etc.)发送。当然为避免某些邮箱提供商温馨地提示异地登陆,可以考虑新注册一个邮箱。当然考虑到最近个人邮箱注册收紧,建议还是搞个免费版的企业邮箱。

安装 ssmtp

ssmtp是一个简单的smtp的程序(角色为mail user agent),可通过包管理器直接安装。若已安装其他smtp程序,也可通过变更默认mail程序(ubuntu下使用update-alternatives命令),选择使用ssmtp。

配置ssmtp

ssmtp的配置文件通常在/etc/ssmtp目录下,目录下有两个文件:ssmtp.conf与revaliases。这里以使用第三方邮件服务器的SMTP进行邮件发送为例,具体来说采取与Wiki中不同的另一种配置方式:

/etc/ssmtp/ssmtp.conf
 # 能收到所有邮件的邮箱
 root=ROOT@DOMAIN
 # 第三方邮件服务商的smtp服务器(含端口号)
 mailhub=smtp.xxx:port
 # 主机的Full Qualified主机名
 hostname=DOMAIN
 # 这里与wiki不同,不允许用户自定义From
 FromLineOverride=NO
 # 用于登陆第三方邮件服务商的用户名及密码
 AuthUser=username@server
 AuthPass=password
 UseTLS=YES
 UseSTARTTLS=YES
/etc/ssmtp/revaliases
 user:username@server

与wiki中的配置不同的是,不允许用户自定义From为的是:如果只注册了一个第三方邮件服务的邮箱,那么对于这个邮箱,发信只能用这个邮箱作为From,否则会被拒绝发送,因而本例尤其适用于个人服务器。

测试ssmtp

使用sendmail的verbose模式可以检查发信过程中本机与服务器的交流,可以用来观察ssmtp是否正确配置。例如给自己发一份测试邮件:

echo test | mail -v -s "Test mail" me@mydomain

留下评论