首页 » 信息技术 »

用mail程序在Ubuntu命令行发邮件

2019年8月14日 / 21次阅读
Shell

命令行发邮件的主要用途,恐怕还是在服务器的维护方面,比如定时备份的脚本,将重要的及时文件发给相关同事。邮件是一种log,能够让维护认为及时发现一些他们关心的服务器问题。我发现其实Linux下有好几个不同的mail程序,不过配置和使用方式基本都一样,这也是为了兼容。

Ubuntu Server下默认有mail,不过这是个符号链接,指向的是一个叫s-nail的程序,貌似这个程序比较古老了。CentOS下默认没有,要安装,sudo yum install mailx,mail实际指向mailx。Ubuntu Desktop下默认也没有,要安装,sudo apt install mailutils,mail也是符号链接文件。

既然有些不一样,但是都叫mail,因此也可以理解,他们在使用方式上基本是一样的,很多脚本也是可以兼容的。本文下面的介绍,基于Ubuntu Server的mail,就是那个指向s-nail的mail程序。对于使用CentOS系统的同学,请看这篇文章:CentOS下mail程序的使用

用命令行的mail(MUA)通过STMP服务器发送邮件,是不需要sendmail或者postfix这样的MTA服务的。貌似我们也都不太习惯用命令行来查收阅读邮件,因此这两个服务,我认为是可以直接从系统中删除的。

先说配置,系统级的配置在/etc下,用户级的配置在~/下。本文的介绍,采取用户级的配置。

先配置smtp服务器的信息,在~/.mailrc文件中填写如下信息:

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

以上配置的是QQ信箱,使用TLS加密方式,建议采用加密,明文传输有泄漏这个账户密码的风险。

QQ信箱还可以使用SSL加密,如果采用SSL,有一行要写成这样:

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

我也不明白为什么是smtps,也许标准就是这样规定的,反正我自己的测试能够成功。

有了以上的配置,就可以开始使用mail程序发邮件了。下面我们发送一个邮件:

$ echo 'email content here...' | mail -s 'subject' to@qq.com

mail程序的-s参数,表示的是邮件主题。邮件的内容,通过命令行管道传给mail程序。也可以将一个文件的内容作为邮件内容来发送:

$ mail -s 'subject' to@qq.com < email_content.txt

还是用到了管道重定向。

设置多个邮件接收者

$ mail -s 'subject' to@qq.com,to2@139.com,to3@gmail.com < email_content.txt

直接用逗号,将多个接收者隔开。

使用-c参数,指定cc address list,就是抄送名单;使用-b参数,指定bcc address list,就是密送名单。

发送附件

发送附件是刚需!

$ mail -s 'subject' -a attachment to@qq.com < email_content.txt

使用-a参数,后面带文件名。

文件名如果没有扩展名(extension),发送可以直接成功,如果有后缀,你需要注意是否有~/.mime.types文件。如果没有,要自己创建,并在此文件中列出一些你要使用的MIME类型与文件扩展名的对应关系。这其实就是告诉mail程序,什么样的文件扩展名,使用什么样的MIME类型。MIME类型要放入发送的Email格式结构中。

为什么mail程序不能自动识别文件扩展名,然后自动添加MIME类型呢?......

貌似很多开源程序都是这样,Apache的安装路径中,也有一个mime.types文件(/usr/local/apache/conf/mime.types),我们可以参考这个文件的写法(这个文件太长了,有近2000行)。不过诡异的是,Apache的mime.types文件,居然没有gz扩展。

发送多个附件

$ mail -s 'subject' -a attachment1 -a file2 to@qq.com < email_content.txt

使用多个-a参数,每个-a参数指定一个附件文件。你还可以使用tar和gzip,将多个文件打个包压缩后再发送。

以上对mail程序的介绍,基本可以满足各位大部分在Linux命令中发邮件的的需求。

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

本文链接:https://www.maixj.net/ict/linux-mail-22487

相关文章

留言区

《用mail程序在Ubuntu命令行发邮件》有1条留言

  • 麦新杰

    附件如果没有扩展名,mail命令应该是默认使用application/octet-stream这个通用类型。 []


前一篇:
后一篇:

栏目精选

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

Ctrl+D 收藏本页

栏目


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

网站二维码
go to top