验证通过

Ubuntu 18.04 上已经移除了 heirloom-mailx 这个安装包,有新需求的可参看这篇文章 Ubuntu 18.04 中使用 Postfix 发送邮件。

mail 默认是调用本机 MTA 发送邮件的,这意味着需要在本机上安装 sendmail 或 postfix 等 MTA,配置比较麻烦,而且会带来不必要的资源占用。通过修改配置文件,可以达到不使用 sendmail 而用外部 smtp 服务器发送邮件的目的。

安装mailx

$ sudo apt-get install heirloom-mailx

配置mailx

如果你不确定你的系统中的 mail/mailx 的配置文件的文件名,可以在终端执行下面的命令来查看:

strings `which mail` | grep '\.rc'
  • 1

我的系统版本是Ubuntu 16.04
/etc/s-nail.rc中加入配置文本

set from=User@163.com
set smtp=smtp.163.com
set smtp-auth-user=User
set smtp-auth-password=password
set smtp-auth=login

---说明
from:对方收到邮件时显示的发件人
smtp:指定第三方发邮件的smtp服务器地址
set smtp-auth-user:第三方发邮件的用户名
set smtp-auth-password:用户名对应的密码,有些邮箱填的是授权码
smtp-auth:SMTP的认证方式,默认是login,也可以改成CRAM-MD5或PLAIN方式
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

测试

关闭系统的 sendmail 服务,如果开启了的话。
mail [option] [-a file] [-s subject] [-c c_adress] [-b b_adress] to-address ...

常用命令:
n:不读入设置文件(本系统中是/etc/s-nail.rc)(这个文件允许用户使用外部邮件传输代理而不是使用系统自带的sendmail发送邮件)。
s:设置邮件的主题信息。
c:使用一个抄送列表。
b:使用一个密送列表。
  • 1
  • 2
  • 3
  • 4
  • 5
无邮件正文

mail -s "主题" 收件地址
可以把当前shell当成编辑器来用,编辑完内容后按Ctrl-D结束。

有邮件正文

文件内容发送
mail -s "主题" 收件地址 < 文件路径文件名

  • mail -s "test" xxx@xxx.com < ./xxx/xxx.txt
  • cat 邮件正文.txt | mail -s 邮件主题 xxx@xxx.com

单内容发送

  • echo "邮件正文内容" | mail -s "邮件主题" xxx@xxx.com
带附件

注意-a的位置放置有讲究。
mail -a 附件 -s "主题" 收件地址 < 文件(邮件正文.txt)

  • mail -a /data/xxx.tar.gz -s "Linux mail test" xxx@xxx.com < ./xxx/xxx.txt

对于担心邮件内容被非8-bit clean的机器污染,可以使用uuencode进行binary-to-text的转换进行发送。
首先安装$ sudo apt-get install sharutils

参数第一个 attachment 是需要编码的文件名,第二个 attachment 是解码时得到的文件名。
uuencode attachment attachment > attachment_uu 
mail -a attachment_uu -s "Linux mail attachment" xxx@xxx.com < ./xxx/xxx.txt
  • 1
  • 2
  • 3

接收方接收后使用
uudecode attachment_uu即可解压得到文件名为 attachment 的文件 (编码时的第二个参数)。

uuencode 可以使用 -m 选项选择base64的编码方式,对具体原理感兴趣的请自行查阅。

在 Winows 中,用 Outlook、Foxmail 等客户端能自动识别经过 uuencode 编码的附件。如果附件被收取到 Linux/Unix 等系统下,如果 Linux 下的 MUA 或者客户端不识别,可以手工处理邮件提取相应的部分,用 uudecode 解码即可。

查看邮件

mail

常用命令(邮件命令提示符中常用命令)
h: 查看邮件标题。
d: 使用该命令加序号可以删除指定的邮件。
f: 查看当前光标指向的邮件。
n: 跳转到指定序号的邮件。
w: 保存邮件信息到文件,保存附件到单独的文件。
q: 退出并将已阅读的邮件存入文件~/mbox中。
x: 退出不保持之前的操作,如删除邮件等。
!: 允许使用shell命令。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

sendmail

mailq或者sendmail -bp
可以查看当前仍在队列里待发送的邮件,如何删除该队列呢?
删除下面文件夹下的文件即可
/var/spool/postfix/deferred/
再次运行检查队列得到: Mail queue is empty
/var/log/syslog文件中也会保存发送失败的信息
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
sendmail安装
$ sudo apt-get install sendmail 
$ sudo apt-get install sendmail-cf 

其他附件:
spamassassin, 提供邮件过滤
  • 1
  • 2
  • 3
  • 4
  • 5
sendmail配置
根据.mc文件生成配置.cf文件
m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
  • 1
  • 2

输入ps aux | grep sendmail查看是否安装成功,看到信息sendmail: MTA: accepting connections

关闭并重启sendmail服务

/etc/init.d/sendmail stop
ps -ef | grep sendmail | awk '{print $2}' | xargs kill -5 
/etc/init.d/sendmail start
  • 1
  • 2
  • 3
  • 4
  • 5

邮件内容、附件处理

sudo apt-get install mpack 用于解析 MIME 类型的信息,使用 munpack 即可用于消息里的附件和内容分离。
sudo apt-get install procmail 用于 MDA,过滤消息等。
sudo apt-get install getmail4,并配置好 getmail,抓取 mail。