Linux使用mailx通过第三方SMTP发送邮件,带附件操作
https://blog.csdn.net/FJDJFKDJFKDJFKD/article/details/87867969
验证通过
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 解码即可。
查看邮件
常用命令(邮件命令提示符中常用命令)
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。