通过命令行发送邮件的两种方法
这事本来是基本操作了,我以前一直是用mail
命令的,但是最近因为需要测试SMTP服务器,就不能这么用了,所以研究了一下。
方法一:本地发送
这个就是上面说的用mail
命令。这命令通常包含在sendmail
或mailutils
里,我通常用的是sendmail
版本,因为FreeBSD自带。
echo "hello world!" | mail -s "test mail" "[email protected]"
这个方法有几个问题:
- 发件人默认是"当前登录用户@本机的主机名"
- 本机的主机名在DNS记录中没有SPF记录的话,可能被对方邮件服务器当成垃圾邮件拒收
- 以本机作为SMTP对外发送,如果本机IP是动态IP或未指定反向域名解析,则很可能被对方邮件服务器当成垃圾邮件拒收
- 无法指定其它SMTP发送
最后一个问题就是我碰到的,我需要测试一下SMTP服务器,所以不能用这个方法。
方法二:使用指定SMTP服务器发送
这个就需要使用别的工具了,比如heirloom-mailx
或s-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]