通过命令行发送邮件的两种方法

这事本来是基本操作了,我以前一直是用mail命令的,但是最近因为需要测试SMTP服务器,就不能这么用了,所以研究了一下。

方法一:本地发送

这个就是上面说的用mail命令。这命令通常包含在sendmailmailutils里,我通常用的是sendmail版本,因为FreeBSD自带。

echo "hello world!" | mail -s "test mail" "[email protected]"

这个方法有几个问题:

  • 发件人默认是"当前登录用户@本机的主机名"
  • 本机的主机名在DNS记录中没有SPF记录的话,可能被对方邮件服务器当成垃圾邮件拒收
  • 以本机作为SMTP对外发送,如果本机IP是动态IP或未指定反向域名解析,则很可能被对方邮件服务器当成垃圾邮件拒收
  • 无法指定其它SMTP发送

最后一个问题就是我碰到的,我需要测试一下SMTP服务器,所以不能用这个方法。

方法二:使用指定SMTP服务器发送

这个就需要使用别的工具了,比如heirloom-mailxs-nail。前者的命令是mailx,后者有时也会被软链接为mailx,目前在一些新的发行版里,前者已经没有了,这里只介绍s-nail

默认情况下,s-nail的用法跟mail是一样的,只是多了一个参数选项-S可以指定参数。比如:

echo "hello world!" | s-nail -S mta=smtp://smtp.yourserver.com:25 -s "test mail" "[email protected]"

可用的参数有很多,比如:

  • from: 指定发件人
  • mta: 指定SMTP服务器
  • smtp-use-startls: 指定加密SMTP
  • smtp-auth: 指定SMTP认证方式
  • smtp-auth-user: 指定SMTP认证用户名
  • smtp-auth-password: 指定SMTP认证密码

这些都加到命令行上就有点麻烦了,所以还有一个方法是放到配置文件~/.mailrc里:

set from="username <[email protected]>"
set smtp-use-starttls
set mta=smtp://smtp.yourserver.com:587
set smtp-auth=login
set smtp-auth-user="sender"
set smtp-auth-password="password"

然后就像用mail一样用s-nail即可。

推送到[go4pro.org]