采用Mutt及msmtp配置进行邮件发送

时间:2021-07-27 18:09:19
         最近想分析一些访问日志,并每天定期的发送至一些人的邮箱中。Linux系统下有非常多的开源软件可以采用命令的方式来发送邮件,有些较为复杂。其中一种即采用mutt和msmtp的解决方案,它类似于foxmail及outlook的客户端,可以通过命令行的方式来进行邮件的自动发送。

1、  msmtp的安装与配置

安装过程如下:

$ wget http://downloads.sourceforge.net/msmtp/msmtp-1.4.16.tar.bz2

$ 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<邮件草稿>&nbsp;  将指定的邮件草稿送出

-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文件里的内容作为邮件内容发送。

给多人发送邮件,只要在邮箱地址后加空格接着输入邮箱地址即可,如:

$ mutt -s "subject" -a /home/admin/backup.tar.gz xxx1@163.com xxx2@163.com xxx3@163.com< /tmp/x.txt

详细的mutt的文档请参见: http://book.selboo.com.cn/book/Mutt.html