Linux【12】-其他2-发邮件(mail)

每个Linux主机上的用户都有一个mailbox,可以用来发邮件,一般mailbox都放在/var/spool/mail/

一、安装与配置

1.1 安装mailx

检查是否安装

[root@www ]# rpm -qa |grep mail

安装

[root@www ]# yum install -y mailx   //没有的话进行yum安装

1.2 配置

申请证书

mkdir -p /home/sam/.certs/
echo -n | openssl s_client -connect smtp.sina.cn:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /home/sam/.certs/sina_cn.crt

显示的信息

depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = GeoTrust RSA CA 2018
verify return:1
depth=0 C = CN, L = \E5\8C\97\E4\BA\AC, O = \E6\96\B0\E6\B5\AA\E7\BD\91\E6\8A\80\E6\9C\AF\EF\BC\88\E4\B8\AD\E5\9B\BD\EF\BC\89\E6\9C\89\E9\99\90\E5\85\AC\E5\8F\B8, OU = "Sina.com Technology(China)Co.,ltd", CN = *.sina.cn
verify return:1
DONE

添加信任证书

certutil -A -n "DigiCert Global Root CA" -t "C,," -d ~/.certs -i /home/sam/.certs/sina_cn.crt                ####添加一个证书到证书数据库中
certutil -A -n "GeoTrust RSA CA 2018" -t "C,," -d ~/.certs -i /home/sam/.certs/sina_cn.crt              ####添加一个证书到证书数据库中

certutil -L  -d /home/sam/.certs/

####列出目录下证书

    Certificate Nickname                                         Trust Attributes
                                                                 SSL,S/MIME,JAR/XPI

    DigiCert Global Root CA                                      C,,  

报错:

certutil: function failed: SEC_ERROR_LEGACY_DATABASE: The certificate/key database is in an old, unsupported format

报错的原因是 命令有误,如下:

certutil -L  -d /root/

编辑mail的配置(非默认25端口):

[root@www ]# vim /etc/mail.rc

set from=xiaoming@163.com   # 邮箱地址

# set smtp=smtp.163.com   #默认25的端口

set smtp=smtps://smtp.163.com:465

set smtp-auth-user=xiaoming    #登录邮箱帐号,不用加@qq.com或者

set smtp-auth-password=w123456    #邮箱密码,由于163邮箱需要设置授权,此处需要填写授权密码

set smtp-auth=login

set ssl-verify=ignore
set nss-config-dir=/home/sam/.certs   #ssl的加密证书

1.3 测试

echo "hehe" | mail -v -s "test" tiehan@sina.cn

报错:

Error initializing NSS: Unknown error -8015.

报错原因:

这个问题是因为没办法读取证书文件导致的,因为复制文件的时候需要访问/etc/ssl/certs,需要root权限,所以复制过来的文件的拥有者也是root,而且这几个证书db文件的权限是-rw——-,复制过来拥有者变成root,普通用户连读的权限都没有,所以解决办法有几个

我将ssl证书放在root下面,却在sam用户下发送邮件,现已更正过来

1.4 注意

  1. 记得要进邮箱打开SMTP
  2. 阿里云ECS基于安全考虑,目前已禁用25端口。可以用465端口来代替。

二、发送邮件

2.1 邮件主题:

mail -s “test” ***@***.cn

这条命令的结果是发一封标题为test的空信给后面的邮箱,如果你有mta并且后面的邮箱不会挡这种可能莫名奇妙的信的时候,就能收到这封信了。

2.2 带内容

方法一:

echo “mail content”|mail -s test ***@****.cn
或者是 
cat id.txt |mail -s test ***@****.cn

方法二:

文本编辑好内容再发送,用<后面接文件名

mail -s "fjal" qqin@genowise.com <id_rsa.pub

方法三:

例如:

mailtest@hotmail.com
Subject : mail test
:
键入信文内容
: :
按下Ctrl+D 键或. 键结束正文。
连按两次Ctrl+C键则中断工作,不送此信件。
Cc( Carbon copy) : 复制一份正文,给其他的收信人。

2.3 带附件

(没用过,但方法可参见下面的) 如果你的系统里没有uuencode命令的话,请先安装sharutils(yum install sharutils) uuencode 需要两个参数,第一个是你要发送的文件(们),当然这个也可以用管道来做,第二个是显示的文件名

uuencode /home/yfang/a.gif a.gif|mail -s pictest yangfang@fudan.edu.cn
tar czf - /home/yfang/ | uuencode home.tgz |mail -s pictest yangfang@fudan.edu.cn

2.4 检查所传送的电子邮件是否送出,或滞留在邮件服务器中

/usr/lib/sendmail -bp

若屏幕显示为“Mail queue is empty” 的信息,表示mail 已送出。 若为其他错误信息,表示电子邮件因故尚未送出。

2.5 mail查看邮件

个人感觉没有网页好看,有点鸡肋,具体参见《鸟哥私房菜》。 基本用法:

终端输入mail
h 列出信件表头
输入数字 就能看到对应的邮件
d d+数字,删掉

参考资料

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学