Linux下配置邮箱客户端MUTT,整合msmtp + procmail + fetchmail
一、背景
在向 Linux kernel 社区提交patch补丁步骤总结(已验证成功)_kernel补丁-CSDN博客文章中提到如何向kernel社区以及其他类似如qemu、libvirt社区提交patch的详细步骤,但还有一点不足的是通过git send-email这种方法基本是只能发送patch内容到社区maintainer,如果patch有问题需要后期继续和maintainer沟通,则会有很多不便,所以急切需要能在linux下也像windows端一样通过邮件客户端来收发邮件,这个linux下的邮箱软件就是mutt。
关于mutt其实看过很多文章,但总感觉配置步骤描述的不太清晰,也总不成功,后来工作中也是在同事的帮助下最终得以配成。本文由于本身就是邮箱配置说明,为确保大家不疑惑所以很多地方我直接使用的邮箱明文,还请大家看之忘之,只为学习配置mutt即可。
mutt可以看成是一个集成软件,具体介绍可查看参考链接,总之mutt可以通过整合其他软件来实现邮箱客户端功能,如发送邮件的msmtp,接收邮件的fetchmail以及过滤邮件的procmail。
首先,请在windows下查阅自己邮箱的相关配置,一般图形化的软件都可以在设置中查看,比如我的如下图,可以看到关于收发使用的协议、服务器、以及端口号等。
同时要保证,自己的邮箱设置中要开启IMAP和POP转发:
二、配置步骤
1.首先,需要安装一系列rpm包,最好通过上述文章给出的几个rpm网站查找相应rpm包安装,实在找不到就只能自己源码安装,安装的rpm主要为mutt + msmtp + procmail + fetchmail,在安装这些包时会依赖于gnutls,openssl, libsasl等几个包,具体看机器。
2.安装mutt + msmtp + procmail + fetchmail后 一般只会在/etc/xxx下创建默认的配置文件,但我们不同用户在使用是~家目录下的配置文件,这些并不是自动创建的,所以需要我们手动创建配置文件。此处一次性给出四个软件的rc配置文件,具体功能后续再讲。
其中mutt配置文件(#cd ~, #vim .muttrc 手动创建,其余同样):
[root@localhost ~]# cat .muttrc
# General
set use_from=yes
set envelope_from=yes
set move=yes
set charset="utf-8"
set send_charset="utf-8"
auto_view text/html
#useful
set include=yes # 回信时包含原文
set indent_str="> " # 回信的引文之前插入符号 >
set check_new=yes # 查是否有新邮件
set mail_check=60 # 每 60 分钟查一次
set timeout=15
set sort=reverse-date-received # 邮件按日期由近及远排列
set pager_index_lines=10 # 看信时,在 index 留出多少行显示邮件列表
# Account
set realname="JianChunfu" #你的名字
set from="XXXXX@shingroup.cn" #你的邮箱
# Mail
set mbox_type = Maildir #Mail box type
set folder = "$HOME/Mail"
set spoolfile = "$HOME/Mail/inbox" #INBOX
set mbox="$HOME/Mail/seen" #Seen box
set record="$HOME/Mail/sent" #Sent box
set postponed="$HOME/Mail/draft" #Draft box
# Programs
set editor="vim"
set sendmail="/usr/bin/msmtp" #借助msmtp实现发送,所以这个需要和msmtp的位置保持一致
[root@localhost ~]#
配置发送邮件的.msmtprc
[root@localhost ~]# cat .msmtprc
defaults
logfile /var/log/msmtp.log
account jcf #添加一个自己的账户,以下配置均属于该账户
auth login
host smtp.exmail.qq.com #发件服务器
port 465
#protocol smtp
from xxxx@shingroup.cn #邮箱账户
#user JianChunfu /*此处按理说可以随意配置姓名,但实测时只有配置成邮箱用户名才发送成功*/
user xxxx@shingroup.cn #邮箱用户名
password XXXXXXXXXX #邮箱密码
tls on
tls_starttls off
tls_certcheck off
tls_force_sslv3 off
account default: jcf #将jcf账户设置成默认发件用户
配置收件的.fetchmailrc和.procmailrc
[root@localhost ~]# cat .fetchmailrc
#set daemon 60
#defaults
poll imap.exmail.qq.com #收件服务器
#protocol IMAP
protocol POP3 #实测发现只有POP协议可以发送
#port 993
user "XXXXXXX@shingroup.cn" #发件邮箱
password "XXXXXXX" #发件密码
mimedecode
mda "/usr/bin/procmail -d %T" #使用procmail
[root@localhost ~]#
[root@localhost ~]# cat .procmailrc
MAILDIR=$HOME/Mail #邮件存放总目录
DEFAULT=$MAILDIR/inbox
VERBOSE=off
LOGFILE=/tmp/procmaillog
:0:
inbox/
[root@localhost ~]#
3.配置字段的具体含义,最主要的均已注释,若想每个字段的含义可见参考链接(比如解决中文乱码),由于配置字段非常繁多,所以要想理解每一个字段的含义只能去看手册。
另外,配置中用到的目录如~/Mail/xxx以及存放log的/var/log/msmtp.log等文件均需手动创建,是的,就是这么的不智能。反正我的机器上安装rpm后都没自动配置。
三、测试及问题解决
其实按标准步骤来,应该是先安装msmtp和mutt,之后先测试发送,发送没问题了再安装fetchmail和procmail并配置好,最终测试接收。
1.测试msmtp发送
命令行如下,二者任选(第一个是发送给163邮箱测试,第二个是自己发自己测试):
echo “TEST测试test” | mutt -s “DT_ZABBIX_SERVER_TEST” xxxx@163.com
echo -e "Subject: Test Mail\r\n\r\nThis is a test mail" | msmtp --debug --from=xxx@shingroup.cn -t xxx@shingroup.cn
其实在这一步我一直报错授权失败,怎么也找不到原因,最后参考别人的文章试着将.msmtprc配置文件中的user 从随意指定的名字 改成 邮箱名,最后发成功了。
在windows查看自己的163邮箱,发现收到了邮件。
2. 测试收件
一开始可以先用mutt查看下自己的linux下的邮箱客户端,直接输入mutt命令即可:
一开始应该是完全空白的。在mutt界面其实也有很多指令。如可以按?来得到命令提示,按m开始撰写并发送,G是手动收信,按r是回信,g是reply all等。
然后直接在windows下使用163邮箱发送一封邮件给linux下配置的邮箱xxxx@shingroup.cn,此时回到linux下的mutt界面,直接按G来手动接收信件。(由于我还没有配置mutt自动收件,所以此时会报错POP host is not defined.,后期补充)
此时我们在linux下先借助fetchmail来收取信件,同样地直接在命令行输入fecthmail即可。
此时查看家目录的Mail目录,发现会多很多文件,那就是一封封邮件了。具体一次性收取多少都可以自行配置。
此时在重新进入mutt界面就发现终于有邮件了,而且可以找到我们在163邮箱发的那一封。
此时就可以通过mutt针对每一封邮件进行回复等操作了,mutt操作邮件的命令可以通过?查看,进入到邮件本身的文本界面后就是vim那一套指令操作。
四、参考链接
Mutt 使用指南
The Mutt E-Mail Client
Linux部署msmtp+mutt发送邮件功能-腾讯云开发者社区-腾讯云
傻瓜式配置mutt-腾讯云开发者社区-腾讯云
配置mutt_51CTO博客_mutt