L05-Linux部署msmtp+mutt发送邮件
一、前言
首先,得明白发送一封邮件的流程,下面一段理论摘抄自廖雪峰的官网网站https://www.liaoxuefeng.com/article/00137387674890099a71c0400504765b89a5fac65728976000
"""
我们通常使用Email都很容易,但是Internet的邮件系统是通过几个复杂的部分连接而成的,对于最终用户而言,我们熟悉的Outlook,Foxmail等都是用来收信和发信的,称之为MUA:Mail User Agent,邮件用户代理。
MUA并非直接将邮件发送至收件人手中,而是通过MTA:Mail Transfer Agent,邮件传输代理代为传递,Sendmail和Postfix就是扮演MTA的角色。
一封邮件从MUA发出后,可能通过一个或多个MTA传递,最终到达MDA:Mail Delivery Agent,邮件投递代理,邮件到达MDA后,就存放在某个文件或特殊的数据库里,我们将这个长期保存邮件的地方称之为邮箱。
一旦邮件到达邮箱,就原地不动了,等用户再通过MUA将其取走,就是用Outlook,Foxmail等软件收信的过程。
所以一封邮件的流程是:
发件人:MUA --发送--> MTA -> 若干个MTA... -> MTA -> MDA <--收取-- MUA:收件人
MUA到MTA,以及MTA到MTA之间使用的协议就是SMTP协议,而收邮件时,MUA到MDA之间使用的协议最常用的是POP3或IMAP。
需要注意的是,专业邮件服务商都有大量的机器来为用户服务,所以通常MTA和MDA并不是同一台服务器,因此,在Outlook等软件里,我们需要分别填写SMTP发送服务器的地址和POP3接收服务器的地址。
"""
同样对发邮件流程介绍的很清楚的还有这篇博文:https://www.cnblogs.com/DLHe/p/8457393.html
由上面可知,通常我们所熟悉的Outlook、Foxmail等是邮件客户端,提供了MUA的功能;而一些Email服务提供商,如网易、QQ等,则提供了MTA的功能。
必须弄清楚的一点是,本次部署的msmtp+mutt其实是类似于Foxmail那样的MUA邮件客户端,只不过它是在linux上运行的。而如果在linux上部署的是sendmail或者postfix,那才是邮件服务器,起到的是MTA的功能。
接下来是实施步骤。
实测成功的部署环境:RHEL6.5和CentOS6.5,当然了,机器得能联网。
二、安装msmtp
msmtp是一个SMTP客户端,可将邮件发送至SMTP服务端,官网地址为http://msmtp.sourceforge.net/index.html 。
1.下载msmtp文件
cd /usr/local/src
wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.32/msmtp-1.4.32.tar.bz2/download
2.解压文件
tar jxvf msmtp-1.4.32.tar.bz2
3.进入到解压的文件内,然后就是典型的源码安装的3个步骤./configure,make和make install
3.1执行./configure,生成 Makefile,为下一步的编译做准备,--prefix=后面接的是想要将msmtp安装到的路径,跟当前mstmp源码所在目录无关
cd msmtp-1.4.32
./configure --prefix=/usr/local/msmtp


3.2 make && make install,编译并安装,这两步也可以分开执行


4. 在安装目录/usr/local/msmtp/下新建etc目录,并在etc目录下创建msmtp文件,该文件用于配置邮件发送的一些基本信息。
mkdir –p /usr/local/msmtp/etc
vim /usr/local/msmtp/etc/msmtprc
#添加如下内容:
account default
host smtp.163.com
port 25
from xxx@163.com //按照实际情况填写真实的163邮箱
auth login
tls off
user xxx //邮箱用户名,是xxx而不是xxx@163.com
password xxx //需要注意的是这里的密码有可能是授权码,比如163邮箱的话这里就必须填授权码,如下图
logfile /var/log/mmlog

注:正如前面所说的,msmtp+mutt的组合跟Foxmail一样,是邮件客户端。我们知道,Windows下利用Foxmail发送邮件的话,当然首先需要用你的某个账号登录上Foxmail了,然后才能在该客户端下新建邮件发送。那么这一步该文件配置的作用,我的理解就是在linux下用你的某个账号登录msmtp客户端。这里我用的是163网易邮箱,若是想用QQ邮箱,则需要另行修改。
测试时的配置如下:

(注:截图当中的目录有点混乱,是实际生产环境中部署的安装目录,不是上面执行./configure命令时--prefix参数指定的/usr/local/msmtp,不过没关系,只要记住,该文件实际是在prefix参数指定的安装目录下的!)
5. 给日志文件赋权限:
chmod 777 /var/log/mmlog
6.给配置文件msmtprc文件赋权限,因为该文件中有邮箱的明文密码,所以要设置成非可读的。
chmod 600 msmtprc
7.此时可以 /usr/bin/目录做一个关于/usr/local/msmtp/bin/msmtp的软连接,这样在服务器上任意位置都可以直接敲msmtp命令来执行msmtp
ln -s /usr/local/msmtp/bin/msmtp /usr/bin/msmtp
8.测试msmtp(同样的,邮箱地址视实际情况而定,不过必须得跟上面的/usr/local/msmtp/etc/msmtprc配置文件中的邮箱相同)
(1)若没做第7步的软连接,则是:
/usr/local/msmtp/bin/msmtp xxx@163.com hello,test ctrl d
(2)若做了软连接,那么测试的命令可以为:
msmtp xxx@163.com hello,test ctrl d
# 查看日志有无成功 cat /usr/local/msmtp/msmtp.log
# 查看163邮箱,看看信收到没有。
如下图,这时候能收到邮件,但是邮件是没有内容的,这是没有问题的。
至此,msmtp安装已经完成了。

三、安装Mutt
Mutt是一个Email客户端,它不能直接发送邮件,更多的是承担对email的管理功能,与msmtp可搭配使用。官网地址为http://www.mutt.org/
若想了解更多Mutt与msmtp的搭配使用,可查看如下地址:http://msmtp.sourceforge.net/doc/msmtp.html#Using-msmtp-with-Mutt
1.Mutt安装方法一:yum方式安装配置mutt(实测成功)
1.1yum install -y mutt
1.2编辑/etc/Muttrc文件 (注,/etc目录下应该已经存在Muttrc文件,只是在文件末尾追加下面内容)
vim /etc/Muttrc
#输入如下内容:
set sendmail='/usr/bin/msmtp' #注:之所以能这么写是因为在配置msmtp时做了软连接 #ln -s /usr/local/msmtp/bin/msmtp /usr/bin/msmtp
set use_from=yes
set realname='YOURNAME' #realname可以任意设置,这样当你发邮件给别人的时候,收件人看到发件人的title就是你这里设置的,具体可以看下面的设置和最后图片展示的结果
set from=user@163.comset
envelope_from=yes
auto_view text/html
set charset='utf-8'
set send_charset='utf-8'
set locale ='zh_CN.UTF-8'
set content_type = 'text/html\;charset=utf-8'
set rfc2047_parameters=yes
实测时的配置如下:

但是做发送邮件测试时粗错了,确实能发邮件,但是执行完发送命令之后报错:source: errors in /etc/Muttrc,因此改成下面
set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="Zabbix Server"
set editor="vim"
set from=182xxxx7782@163.com

1.3 配置完毕,测试:
(1)简单测试(发给自己):echo "TEST测试test"|mutt -s "DT_ZABBIX_SERVER_TEST" 182xxxx7782@163.com

(2)添加附件测试(发给自己):echo "内容:TEST测试test"|mutt -s "主题:DT_ZABBIX_SERVER_TEST" -a /data/suxy_remark.txt 182xxxx7782@163.com
发送错误,报错:Can't stat 182xxxx7782@163.com: No such file or directory
如下图所示,这是因为182xxxx7782@163.com在-a命令后面,所以mutt把182xxxx7782@163.com也当成附件了,因此将-a命令调换个位置,放到末尾(事实上该命令的用法也确实要求-a参数放到命令的最末尾):
echo "内容:TEST测试test"|mutt -s "主题:DT_ZABBIX_SERVER_TEST" 182xxxx7782@163.com -a /data/suxy_remark.txt
发送成功!
事实上还可以使用如下命令,即mutt后面先写邮箱,将-s、-a等参数都放到后面去
echo "内容:TEST测试test"|mutt 182xxxx7782@163.com -s "主题:DT_ZABBIX_SERVER_TEST" -a /data/readme.txt

(3)当然也可以发送邮件给其他的类型的邮箱,比如qq邮箱,公司邮箱等:
echo "内容:TEST测试test"|mutt -s "主题:DT_ZABBIX_SERVER_TEST" 98xxxx3649@qq.com -a /usr/local/suxy_remark.txt

2.Mutt安装方法二:源码方式安装Mutt(测试时没有成功,不过应该是测试做法不对。。)
cd /usr/local/src
wget ftp://ftp.mutt.org/pub/mutt/mutt-1.5.24.tar.gz
tar xvf mutt-1.5.24.tar.gz
cd mutt-1.5.24
./configure --prefix=/usr/local/mutt


make && makeinstall

配置Mutt
vim /usr/local/mutt/etc/Muttrc
#在最后添加如下几行:
set sendmail="/usr/local/msmtp/bin/msmtp"
set use_from=yes
set realname="xxx"
set from=xxx@163.com
set envelope_from=yes
测试Mutt
echo "hello,world"|/usr/local/mutt/bin/mutt –s "test mail" xxx@163.com#上述语句将发送一封标题为"test mail",内容为"hello,world",收件人为xxx@163.com的邮件,可检查该邮箱能否收到邮件
实际测试时使用的命令:
echo "Test from Zabbix Server"|/usr/local/mutt/bin/mutt –s "zabbixTest" 182xxxx7782@163.com
但是若是使用上面的命令发送的话则会给-s@zabbix.localhost和zabbixtest@zabbix.localhost和182xxxx7782@163.com都各发一封邮件,改为如下的命令则会只给182发送,但是没有主题
echo "Test from Zabbix Server"|/usr/local/mutt/bin/mutt 182xxxx7782@163.com
L05-Linux部署msmtp+mutt发送邮件的更多相关文章
- 烂泥:ubuntu下配置msmtp+mutt发送邮件
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 本文主要介绍如何在Linux下使用msmtp+mutt发送邮件,当然Linux下发送邮 ...
- msmtp+mutt发送邮件报警
1).yum 安装 msmtp+mutt yum install -y msmtp mutt 2).配置Muttrc信息 vim /etc/Muttrc set sendmail="/usr ...
- CentOS7 msmtp+mutt发送邮件
一.安装软件 # msmtp软件各版本下载地址:https://marlam.de/msmtp/download/ [root@--- ~]# wget https://marlam.de/msmtp ...
- 【linux】 mail/mutt 发送邮件
mail: 比较常用,缺点是发送附件要同时安装其他软件: mutt:功能强大,注意发送html需要升级到1.5+版本: 用mail发送邮件: echo "邮件正文" | mai ...
- Zabbix利用msmtp+mutt发送邮件报警
操作系统:CentOS 7 Web环境:Nginx+MySQL+PHP zabbix版本:zabbix-2.4.8.tar.gz 邮件服务:msmtp-1.4.32.tar.bz2 #http ...
- Zabbix利用msmtp+mutt发送邮件报警(公告:这文章有问题,还没有修改,2016-08-25)
[root@86 ~]# wget http://jaist.dl.sourceforge.net/project/msmtp/msmtp/1.4.32/msmtp-1.4.32.tar.bz2 百度 ...
- Linux使用Mutt发送邮件/附件
使用Mutt发邮件极其方便,只需要一条命令即可发送或者批量发送邮件 功能说明:E-mail管理程序. 语 法:mutt [-hnpRvxz][-a<文件>][-b<地址>][- ...
- ubuntu下msmtp+mutt的安装和配置
1.mutt+msmtp的安装 默认情况下smokeping发送邮件使用sendmail,但是sendmail配置起来真心不是一般的麻烦,而且也没有必要,完全大材小用了,所以我就想用mutt+msmt ...
- 通达OA2008从windows环境移植到linux部署手册
通达OA2008从windows环境移植到linux中(centos5.5及以上版本) OA系统拓扑图: 环境搭建(安装lamp环境) 1.安装xampp集成lamp包xampp-linux-1.6. ...
随机推荐
- 用Hash Table(哈希散列表)实现统计文本每个单词重复次数(频率)
哈希表在查找方面有非常大应用价值,本文记录一下利用哈希散列表来统计文本文件中每个单词出现的重复次数,这个需求当然用NLP技术也很容易实现. 一.基本介绍 1.Hash Key值:将每个单词按照字母组成 ...
- 【git使用】Failed to connect to 127.0.0.1 port 1080: Connection refused
查询是否使用代理:git config --global http.proxy 取消代理:git config --global --unset http.proxy
- 健康类App原型制作分享-Mindmate
Mindmate是一款健康类App,主要是帮助人们快速入眠,放松情绪,它拥有小清新的界面,配图全是由插画组成,生动有趣.在这款原型中,为了保持App的原有特色,将插画通过图片组件导入进来:音乐播放界面 ...
- [原创]使用OPENCC库进行简繁转换(C++代码)
最近公司有一款游戏产品,字库存在问题,希望全自动进行简繁同屏自动转换的行为,减少工作量. 所以自己使用了WINDOWS自带的一些转换函数,但发现大量字出现异常,无法转换(测试iconv也发现无法转换) ...
- CentOS 7 装好系统一些优化
1.禁用SELINUX vi /etc/sysconfig/selinux 设置为disabled 2.同步时间*/20 * * * * /usr/sbin/ntpdate pool.ntp.org ...
- R语言中的四类统计分布函数
R语言中提供了四类有关统计分布的函数(密度函数,累计分布函数,分位函数,随机数函数).分别在代表该分布的R函数前加上相应前缀获得(d,p,q,r).如: 1)正态分布的函数是norm,命令dnorm( ...
- git 回退到某个特定提交
1.先用git log commit aba290c570d3894f4f39a1fdf52aa512c0231525 Author: huzhengbo <@qq.com> Date: ...
- CSS定位DIV(一)一列样式
前记:CSS样式核心就是DIV布局,一些基础知识省略不记,接下来的日志只关注最核心的布局问题. 一.一列布局 1.固定宽高 直接声明宽高,或用百分比表示. width:400px; 或 width:7 ...
- java中null转换成其它类型
对null进行强转会不会抛错.测试结果是,如果把null强转给对象,是不会抛异常的,因为本身对象是可以为null的.但是如果是基本类型,比如 int i = (Integer)obj的强转,其实内部会 ...
- 全面了解SQL
很多程序员认为SQL是一头难以驯服的野兽.它是为数不多的声明性语言之一,也因为这样,其展示了完全不同于其他的表现形式.命令式语言. 面向对象语言甚至函数式编程语言(虽然有些人觉得SQL 还是有些类似功 ...