Linux下使用mail命令发送邮件

Linux服务器有在运维时有时候会有需要进行外部邮件的发送,当然一般情况下会结合计划任务一起向管理员发送系统数据和动态,在不使用其它邮件系统的客户端程序(MUA)的情况下向外部发送邮件也非常简单,这时会用到mail命令。
  使用mail命令发送邮件分两种情况,一是服务器是个运作正常的邮件服务器(关于如何搭建邮件服务器请查阅相关文章),这个时候使用mail命令有三种格式,可以根据自己的喜好选择一种。

1. 使用文件进行邮件发送

mail -s “Hello world” test@iewb.net < mail.txt
其中mail.txt为事先编辑好的文件,也就是邮件正文。

2.直接使用shell当编辑器

mail -s “Hello world” test@iewb.net
hello,this is a test mail.
  第一行是输入的命令,-s表示邮件的主题,后面的test@iewb.net则是邮件的接收人,输入完这行命令后回车,会进入邮件正文的编写,我们可以输入任何文字,比如上面的”hello,this is a test mail.”。当邮件正文输入完成后,需要按CTRL+D结束输入,此时会提示你输入Cc地址,即邮件抄送地址,没有直接回车就完成了邮件的发送。

3.使用管道进行邮件发送

echo “hello,this is a test mail.” | mail -s “Hello world” test@iewb.net
  使用管道直接敲入这行命令即可完成邮件的发送,其中echo后的是邮件正文。

Linux服务器发送邮件还有一种情况就是linux不是一台正常的邮件服务器,就是没有绑定一个可以发送邮件的域名,这个时候就需要通过外部SMTP发邮件 (直接抛弃sendmail和postfix)。修改/etc/mail.rc,如果没有安装可以执行yum install mailx安装,增加一下类似N行,指定外部的smtp服务器地址、帐号密码等。

set from=123456@qq.com
set smtp=smtp.qq.com #如果使用ssl方式,可写成:smtp=smtps://smtp.163.com:465                      
set smtp-auth-user=123456 
set smtp-auth-password=654321#大多非邮箱登陆密码,为smtp授权密码
set smtp-auth=login
set ssl-verify=ignore #如果不使用ssl,则不需要配置此行
set nss-config-dir=/root/.certs  #证书配置路径,普通用户需要有访问权限才能发送邮件,如果不使用ssl,则不需要配置此行

配置ssl证书(如果不启用ssl登录,可以不设置以下配置):

mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/163.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs/./ -i ~/.certs/163.crt
certutil -L -d /root/.certs

配置ssl证书配置是我直接从网上看的教程,出处也不知道是哪了,是之前copy到我的Google Docs中的。
  编辑完mail.rc后就可以使用mail命令发送邮件了,格式与上面相同,比如

echo “hello,this is a test mail.” | mail -s ” Hello world” test@iewb.net


推广推荐

Proudly powered by WordPress | IEWB.NET 2009-2021 版权所有