首页 » 信息技术 »

CentOS命令行发邮件的mail程序

2019年8月16日 / 15次阅读
CentOS

Linux命令行发邮件是刚需,Email Log,最近学习过程中发现,Ubuntu Server自带的mail与CentOS的mailx(安装后也是mail)有些不一样。因为这两个mail(符号链接文件)的底层是不同的程序,一个叫s-nail,一个叫mailx

如果同学们只关心在Ubuntu服务器上的mail的使用,看这篇就可以了:用mail程序在Ubuntu命令行发邮件

本文主要聚焦CentOS的mail程序,以及与Ubuntu上的mail不一样的几个细节!

首先,在CentOS上要安装mailx:$ sudo yum install mailx,装完之后,/usr/bin/mail就有了,指向/usr/bin/mailx

我们的目标是使用SMTP服务器发送Email,因此系统中的postfix和sendmail都不需要用到,可以删除。

有两个配置文件,这里只说用户级的,~/.mailrc~/.mime.types

~/.mailrc配置SMTP服务器,配置举例如下:

set from=from@qq.com
set smtp=smtp://smtp.qq.com:587
set smtp-auth-user=from@qq.com
set smtp-auth-password=password
set smtp-auth=login
set smtp-use-starttls=yes
set nss-config-dir=/etc/pki/nssdb
set ssl-verify=ignore

Ubuntu上的mail,也是同样的配置,只是最后两行可以不需要。但在CentOS中,就一定需要!否则邮件发不出去。我们后面举例说明。

~/.mime.types里面存放MIME type与文件扩展名的对应关系,一行一个对应,用途是告诉mail程序,在发送附件的时候,不同的附件文件扩展名,使用不同的MIME类型。可以参考Apache的mime.types文件。不过,我发现CentOS的mail对个文件不怎么感冒,Ubuntu的mail就很较真。

如何发送邮件呢?

$ echo 'test from centos mail' | mail -s 'centos mailx' to_addr@qq.com

echo将一个字符串通过管道发给mail程序,作为邮件的内容;mail程序的-s参数,指定邮件的标题,后面直接跟收件人。

不用echo也可以,输入$ mail -s 'centos mailx' to_addr@qq.com,然后直接在界面上写邮件内容,可以多行,写完后,按Ctrl-d介绍。

或者,$ mail -s 'centos mailx' to_addr@qq.com < email_content.txt,也行的。

邮件发给多个人

$ echo 'test from centos mail' | mail -s 'centos mailx' to_addr@qq.com,to_addr2@163.com,to_addr3@hotmail.com

抄送和密送

-c 参数后面带的地址是抄送,多个地址用逗号分开;

-b 参数后面带的地址是密送,多个地址用逗号分开;

发送附件

-a 参数后面跟的文件,将作为附件发送出去。

不配置 set ssl-verify=ignore 邮件就发不出去

[xinlin@server ~]$ Error in certificate: Peer's certificate issuer is not recognized.
Continue (y/n)? SSL/TLS handshake failed: Peer's certificate issuer is not recognized.
"/home/xinlin/dead.letter" 12/319
. . . message not sent.

Ubuntu的mail,就不需要配置这个。

不配置 set nss-config-dir=/etc/pki/nssdb 邮件也发不出去

Ubuntu的mail,也不需要这个。

而且,CentOS的mail,总是要提示一个错误:Error in certificate: Peer's certificate issuer is not recognized.

原因可能是nss-config-dir这个路径下,找不到SMTP服务器的证书,网上有攻略可以获得SMTP服务器的证书,然后存放在nss-config-dir这个路径下,不过使用的命令我不懂,就先忽略吧。因为有这个错误,邮件也可以发出去!

nss-config-dir
A directory that contains the files certN.db to retrieve certificates, keyN.db to
retrieve private keys, and secmod.db, where N is a digit. These are usually taken from
Mozilla installations, so an appropriate value might be `~/.mozilla/fire‐
fox/default.clm'. Mailx opens these files read-only and does not modify them. How‐
ever, if the files are modified by Mozilla while mailx is running, it will print a `Bad
database' message. It may be necessary to create copies of these files that are exclu‐
sively used by mailx then. Only applicable if S/MIME and SSL/TLS support is built
using Network Security Services (NSS).

我个人觉得这也是CentOS的mail和Ubuntu的mail很不一样的一个地方,Ubuntu的mail更智能,CentOS的mail更严谨!我们用-v参数,把发送邮件过程中的信息全部打印出来看一下。

现看Ubuntu的mail,在没有set nss-config-dir=/etc/pki/nssdb和set ssl-verify=ignore这两行配置的情况下:

$ echo 'hello from hangzhou' | mail -v -s 'from hangzhou' to_addr@qq.com
Resolving host "smtp.qq.com:587" ... done
Connecting to "14.18.245.164:587" ...connected.
Certificate depth 2
subject = /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
notBefore = Nov 10 00:00:00 2006 GMT
notAfter = Nov 10 00:00:00 2031 GMT
issuer = /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
Certificate depth 1
subject = /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=GeoTrust RSA CA 2018
notBefore = Nov 6 12:23:45 2017 GMT
notAfter = Nov 6 12:23:45 2027 GMT
issuer = /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
Certificate depth 0
subject = /C=CN/ST=Guangdong/L=Shenzhen/O=Tencent Technology (Shenzhen) Company Limited/OU=R&D/CN=pop.qq.com
notBefore = Sep 10 00:00:00 2018 GMT
notAfter = Dec 10 12:00:00 2019 GMT
issuer = /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=GeoTrust RSA CA 2018
Comparing subject_alt_name: need<smtp.qq.com> is<pop.qq.com>
Comparing subject_alt_name: need<smtp.qq.com> is<dav.qq.com>
Comparing subject_alt_name: need<smtp.qq.com> is<ex.qq.com>
Comparing subject_alt_name: need<smtp.qq.com> is<smtp.qq.com>

Ubuntu的mail,就像浏览器一样,直接对SMTP服务器的证书做了认证。

现看CentOS的mail,在存在set nss-config-dir=/etc/pki/nssdb和set ssl-verify=ignore这两行配置的情况下:

$ echo 'hello from hangzhou' | mail -v -s 'from hangzhou' to_addr@qq.com
Resolving host smtp.qq.com . . . done.
Connecting to 14.17.57.241:587 . . . connected.
220 smtp.qq.com Esmtp QQ Mail Server
>>> EHLO s148-72-212-244.secureserver.net
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
>>> STARTTLS
220 Ready to start TLS
Error in certificate: Peer's certificate issuer is not recognized.
Comparing DNS name: "pop.qq.com"
Comparing DNS name: "dav.qq.com"
Comparing DNS name: "ex.qq.com"
Comparing DNS name: "smtp.qq.com"
SSL parameters: cipher=AES-128, keysize=128, secretkeysize=128,
issuer=CN=GeoTrust RSA CA 2018,OU=www.digicert.com,O=DigiCert Inc,C=US
subject=CN=pop.qq.com,OU=R&D,O=Tencent Technology (Shenzhen) Company Limited,L=Shenzhen,ST=Guangdong,C=CN
>>> EHLO s148-72-212-244.secureserver.net
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
>>> AUTH LOGIN
334 VXNlcm5hbWU6
>>> MTA5MzAyMzEwMkBxcS5jb20=
334 UGFzc3dvcmQ6
>>> b2ljcTE4NzIzNjU0QCQl
235 Authentication successful
>>> MAIL FROM:<1093023102@qq.com>
250 Ok
>>> RCPT TO:<3003974@qq.com>
250 Ok
>>> DATA
354 End data with <CR><LF>.<CR><LF>
>>> .
250 Ok: queued as
>>> QUIT
221 Bye

虽然有个Error,邮件还是成功发送了。

还有一个不一样的地方,在发送带附件的邮件时。Ubuntu的mail一定需要~/.mime.types文件的支持,读不到这个文件就不发送了。而CentOS的mail似乎不关心这个文件,~/.mime.types中什么内容都没有,它也可以成功发送附件!

不同的系统,不同的mail程序。那天我也造个轮子,因为这两个系统的mail程序,其实都很复杂,狂多的参数,man page老长了。我想做个简单的,就是单纯的通过SMTP发邮件log。

补充一个情况:系统中有一些cron定时任务,可能是由root来执行,这个时候用户级的配置文件可能会失效(一般我们不会直接使用root用户),这个时候,就需要一个system wide的配置文件了。CentOS的mailx的系统级配置文件为/etc/mail.rc和/etc/mime.types。

本文链接:https://www.maixj.net/ict/centos-mail-22567

相关文章

留言区

《CentOS命令行发邮件的mail程序》有1条留言

  • 麦新杰

    本文介绍的方法,发送的邮件是纯文本类型的邮件,MIME类型是 test/plain  []


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top