最近想分析一些访问日志,并每天定期的发送至一些人的邮箱中。Linux系统下有非常多的开源软件可以采用命令的方式来发送邮件,有些较为复杂。其中一种即采用mutt和msmtp的解决方案,它类似于foxmail及outlook的客户端,可以通过命令行的方式来进行邮件的自动发送。
1、 msmtp的安装与配置
安装过程如下:
$ wget
$ tar xvf msmtp-1.4.6.tar.bz2
$./configure –prefix=/usr/local/msmtp
$make
$make install
在安装完成后,在/usr/local/msmtp目录下对应两个目录(bin和share),在其下新建etc目录,并在其中新增msmtprc文件,该文件用于配置邮件发送的一些基本信息,配置示例如下:
$ vim msmtprc
defaults //对应后面的default帐号,如果有default必须加这个配置项
#163 configure
logfile /opt/msmtp/log/msmtp.log //发送邮件对应的日志文件
#配置test帐号信息。与后面的test01相对应
account test01
# SMTP邮件服务器地址
host smtp.163.com
#发送邮件的email地址
from test@163.com
# 采用login的方式进行认证
auth login
# 对应你的邮箱帐号,@之前的用户名
user test
# 对应该邮箱帐号的密码
password ******
#设置默认的帐号,当然如果有多个请使用:拼接
account default:test01
由于password是明码,所以需要修改此文件的权限 chmod 600 msmtprc
在上述信息配置完成后,可以通过msmtp命令来发送邮件了,具体的发送过程如下:
$ msmtp ***@163.com
输入一些邮件正文,并按ctrl +D发送并退出。检查邮件是否能够正常收到。
对于上述的配置也可以来验证是否支持认证的TLS加密,可采用如下命令来验证SMTP服务器是否支持认证的TLS加密。可以看出其支持plain及login的认证方式,我们在上述就使用了login的方式。
#./msmtp --host=smtp.163.com --serverinfo
SMTP server at smtp.163.com (mproxyhzb3.163.com [123.58.178.203]), port 25:
hz-b-163smtp1.163.com SMTP Server for Netease [466] 2d40a62e-4009-43b7-8c84-70986235ddb5
Capabilities:
PIPELINING:
Support for command grouping for faster transmission
STARTTLS:
Support for TLS encryption via the STARTTLS command
AUTH:
Supported authentication methods:
PLAIN LOGIN
This server might advertise more or other capabilities when TLS is active.
2、 mutt的安装与配置
mutt一般情况下是默认已经安装在linux系统中,可以通过which mutt来查看对应的安装路径。只需要做一些配置即可,具体的配置可以有两种方式。可以修改/etc/Muttrc或新增.muttrc,在其中新增相应的配置文件。具体的配置文件如下:
set sendmail="/usr/local/msmtp/bin/msmtp -C /home/admin/.msmtprc"
set use_from=yes
set realname="test"
set from=test@163.com
set editor="vi"
在配置完mutt后,可以采用如下的命令进行邮件发送功能的验证,具体如下:
$ echo “helloworld” | mutt –s “test subject” ***@163.com
正常情情况下,邮件能够成功发送。
若出现了异常,可以采用如下的方式进行问题排查:
$ echo “helloworld” | mutt –s “test subject”***@163.com
Error sending message, child exited 78 ().
Segmentation fault
当遇到如上的问题时,一般情况是由于某些配置文件错误导致的,但通过上述简短的信息无法排查出到底是哪里出现了问题。可以采用如下的方式进行检验:
$ mutt –s “test subject” ***@163.com
上述命令会要求你输入正文,然后再输入邮件正文,此时会出现较为详细的错误,如下所示:
msmtp: account default not found: noconfiguration file available
此时可以确定是由于msmtp出现了问题,而且是由于无法加载默认的default用户而导致的。解决方案即是在配置sendmail时将其配置文件加上。如下所示:
set sendmail=”/usr/local/msmtp/bin/msmtp –C.msmtprc”
3、mutt的常用命令
mutt [-hnpRvxz][-a<文件>][-b<地址>][-c<地址>][-f<邮件文件>][-F<配置文件>][-H<邮件草稿>][-i<文件>][-m<类型>][-s<主题>][邮件地址]
Linux命令参数:
-a<文件> 在邮件中加上附加文件。
-b<地址> 指定密件副本的收信人地址。
-c<地址> 指定副本的收信人地址。
-f<邮件文件> 指定要载入的邮件文件。
-F<配置文件> 指定mutt程序的设置文件,而不读取预设的.muttrc文件。
-h 显示帮助。
-H<邮件草稿> 将指定的邮件草稿送出
-i<文件> 将指定文件插入邮件内文中
-m<类型> 指定预设的邮件信箱类型。
-n 不要去读取程序培植文件(/etc/Muttrc)
-p 在mutt中编辑完邮件后,而不想将邮件立即送出,可将该邮件暂缓寄出。
-R 以只读的方式开启邮件文件
-s<主题> 指定邮件的主题。
-v 显示mutt的版本信息以及当初编译此文件时所给予的参数。
-x 模拟mailx的编辑方式。
-z 与-f参数一并使用时,若邮件文件中没有邮件即不启动mutt。
带附件的邮件发送命令:
$ mutt -s "subject" -a /home/admin/backup.tar.gz xxx@163.com < /tmp/x.txt
-s: 邮件标题,用""括上
-a: 邮件附件。如上命令就是将/backup目录下 backup.tar.gz文件作为附件发送。
< /tmp/x.txt:/tmp目录下x.txt文件里的内容作为邮件内容发送。
给多人发送邮件,只要在邮箱地址后加空格接着输入邮箱地址即可,如: