wangbin
  • wangbin
  • 2017-05-28
  • IT

centos7发送邮件(2):msmtp和mutt发送邮件

一. 简介

前面我们介绍了用mailx发送邮件,smtps和starttls的配置支持真心烦琐,哥们搜索了好久才发送成功,不容易。

简单点,发邮件的方式简单点?好,用msmtp和mutt吧。使用简单,配置也简单,让你分分钟上手。

二. msmtp

msmtp是一款专门负责邮件发送的SMTP客户端软件,基于GPL发布。支持TLS/SSL、DNS模式、IPv6、服务器端认证、多用户等特性。

msmtp是专门处理smtp发送的,有了它我们不必再为了发送smtps而思考。

安装

wget https://jaist.dl.sourceforge.net/project/msmtp/msmtp/1.6.6/msmtp-1.6.6.tar.xz
tar xvf msmtp-1.6.6.tar.xz 
cd msmtp-1.6.6
./configure --prefix=/usr/local/msmtp --with-tls=openssl
make
make install

配置

#log
mkdir -p /var/log/msmtp/
touch /var/log/msmtp/msmtp.log

#msmtprc
mkdir -p /usr/local/msmtp/etc
cd /usr/local/msmtp/etc 
touch msmtprc

163邮箱的smtps配置msmtprc文件如下

#################################
# Set default values for all following accounts.
defaults
logfile /var/log/msmtp/msmtp.log
# The SMTP server of the provider.
account mysmtp
# tls加密开启
tls on
tls_starttls off 
tls_certcheck off
# SMTP邮件服务器地址
host smtp.163.com
# 端口
port 465 
# 发送的邮件Email
from xxx@163.com
auth login
# 邮件服务器登录账号
user xxx@163.com
# 邮件服务器登陆密码
password xxx
# Set a default account
account default : mysmtp
#################

很简单,请自行将xxx换成自己的账号和密码。

执行下面命令,测试是否成功

echo "testmail" | /usr/local/msmtp/bin/msmtp xxx@163.com

二. mutt

安装

yum -y install mutt

配置

配置文件/etc/Muttrc虽然看着有点大,但里面全是注释,其实我们只需要将下面5个配置的注释去掉,并修改,就可以了

set sendmail="/usr/local/msmtp/bin/msmtp"
set use_from=yes
set use_envelope_from=yes
set from="xxx@163.com"
set realname="xxx"

执行下面命令,测试是否成功

echo "testmail" |mutt -s "my_first_test" xxx@qq.com

二. 扩展知识

虽然完成了上面的配置,也把邮件发送了出去,但是我crond定时任务中的MAILTO=“xxx@qq.com”还是不起作用,这是为什么呢?

这就要来说说MUA、MTA、MDA了。

发送邮件一般过程是发送方MUA(Client)-> MTA(Server)-> MTA(Server)-> MDA(Server)

  1. MUA(Mail User Agent),即邮件用户代理,是Client端软件,它通过SMTP协议将电子邮件发送给MTA。常见的MUA有outlook、foxmail和mutt。
  2. MTA(Mail transfer Agent),即邮件传输代理,是主要的服务端软件,它使用SMTP协议将电子邮件从一台主机发送到另一台主机,如果目标就是自己的则收下。常见的MTA有sendmail、postfix。
  3. MDA(Mail Deliver Agent),即邮件投递代理,把收下的邮件发入正确的本地邮箱,一般和MTA的实现放到一起了,如postfix就有MDA功能。

接收邮件的过程是接收方MUA(Client)->MDA(Server)

用户用MUA通过IMAP/POP3协议与IMAP/POP3服务器(例如:Dovecot)进行收信操作,把MDA的本地邮箱中的信收下来。

根据上面的介绍,我们前面装的一堆程序都是属于MUA的。而crond中的mailto是直接将邮件发送给centos默认MTA的,所以接收不到邮件就理所当然了。

五. 总结

介绍下我平时用的两个命令

1. 发送邮件
    echo "test" |mutt -s "my_first_a_test" 353443696@qq.com
2. 发送附件test.txt 
    echo "test" |mutt -s "my_first_a_test" 353443696@qq.com -a ~/test.txt

赶紧使用msmtp和mutt发送邮件吧,很简单。

参考:

  1. http://irow10.blog.51cto.com/2425361/1812638/

  2. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/tools/NSS_Tools_certutil