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.logaccount 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 offaccount default: jcf #将jcf账户设置成默认发件用户
配置收件的.fetchmailrc和.procmailrc
[root@localhost ~]# cat .fetchmailrc
#set daemon 60
#defaults
poll imap.exmail.qq.com #收件服务器#protocol IMAPprotocol POP3 #实测发现只有POP协议可以发送#port 993user "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
相关文章:

Linux下配置邮箱客户端MUTT,整合msmtp + procmail + fetchmail
一、背景 在向 Linux kernel 社区提交patch补丁步骤总结(已验证成功)_kernel补丁-CSDN博客文章中提到如何向kernel社区以及其他类似如qemu、libvirt社区提交patch的详细步骤,但还有一点不足的是通过git send-email这种方法基本是只能发送patc…...

[每周一更]-(第75期):Go相关粗浅的防破解方案
Go作为编译语言,天然存在跨平台的属性,我们在编译完成后,可以再不暴露源代码的情况下,运行在对应的平台中,但是 还是架不住有逆向工程师的反编译、反汇编的情形;(当然我们写的都不希望被别人偷了…...

停留时间是您需要跟踪的 SEO 指标
介绍 停留时间是指用户在点击搜索引擎结果后但在返回搜索引擎结果页面之前在网站上花费的时间。它是搜索引擎优化 (SEO) 的一个重要指标,因为它衡量用户参与度并指示网站是否向访问者提供有价值且相关的内容。搜索引擎,如谷歌&am…...
ES常用操作语句
ES常用操作语句 注:本文中的操作语句基于ES5.5和7.7的版本,版本不同操作语句上可能有细微差别,如5.5版本有索引类型,7.7版本已废弃,查询不应该带索引类型 新增 # 添加字段,并设置字段类型 PUT /索引/_map…...

MicroPython STM32F4 RTC功能使用介绍
MicroPython STM32F4 RTC功能使用介绍 🔖STM32和ESP32 RTC功能差不多,相关篇《MicroPython ESP32 RTC功能使用介绍》📌固件刷可参考前面一篇《STM32刷Micropython固件参考指南》🌿 相关篇《Micropython STM32F4入门点灯》…...

【鸿蒙应用ArkTS开发系列】- 选择图片、文件和拍照功能实现
文章目录 前言创建多媒体Demo工程创建MediaBean 实体类创建MediaHelper工具类API标记弃用问题动态申请多媒体访问权限实现选择图片显示功能打包测试 前言 在使用App的时候,我们经常会在一些社交软件中聊天时发一些图片或者文件之类的多媒体文件,那在鸿蒙…...

公有云迁移研究——AWS Route53
大纲 1 什么是Route 532 Route 53能做些什么# 3 通过DNS托管来实现分流3.1 创建DNS托管3.2 对托管创建记录对流量进行分配 4 通过流量策略来对流量进行分流4.1 创建流量策略 5 对比两者的区别6 推荐 在给客户从本地机房往AWS迁移的过程中,我们接到如下需求ÿ…...

浪潮信息KeyarchOS——保卫数字未来的安全防御利器
浪潮信息KeyarchOS——保卫数字未来的安全防御利器 前言 众所周知,目前流行的操作系统有10余种,每一款操作系统都有自己的特点。作为使用者,我们该如何选择操作系统。如果你偏重操作系统的安全可信和稳定高效,我推荐你使用浪潮信…...

python-单词本|通讯录
编写程序,生词本。 def sayHello():print("" * 20 \n 欢迎使用生词本\n 1.查看生词本\n 2.背单词\n 3.添加新单词\n 4.删除单词\n 5.清空生词本\n 6.退出生词本\n * 20 \n)def addW(data):word input("请输入新单词:")trans i…...

oracle impdp 导入元数据表空间异常增大的解决办法
expdp导出的时候指定了contentsmetadata_only只导出元数据,但是在impdp导入到新库的时候,发现新库的表空间增长非常大,其实这个直接就可以想到,应该是大表的initial segment过大导致的 正常impdp,在执行创建表和索引的…...

网站高可用架构设计基础
一、网站高可用概述 不要尝试着去避免故障,而是要把处理故障的代码当成正常的功能做在架构里写在代码里。 高可用是一种面向风险设计,使系统具备控制风险,提供更高的可用性的能力。网站页面能完整呈现在最终用户面前,需要经历很多…...

基础堆溢出原理与DWORD SHOOT实现
堆介绍 堆的数据结构与管理策略 程序员在使用堆时只需要做三件事情:申请一定大小的内存,使用内存,释放内存。 对于堆管理系统来说,响应程序的内存使用申请就意味着要在"杂乱"的堆区中"辨别"出哪些内存是正在…...
ts的一些
以js为基础构建的语言 一个js的超集 引入了类型(type)的概念给变量赋予类型:让从动态类型语言(js)变成静态类型语言(ts) 让变量的类型明确 扩展了js 可以在任何支持js的平台中执行 比js复杂 可维护性更高 ts不能被js解析器执行 不能再浏览器中直接执行 ts会被编译为…...

LORA概述: 大语言模型的低阶适应
LORA概述: 大语言模型的低阶适应 LORA: 大语言模型的低阶适应前言摘要论文十问实验RoBERTaDeBERTaGPT-2GPT-3 结论代码调用 LORA: 大语言模型的低阶适应 前言 LoRA的核心思想在于优化预训练语言模型的微调过程,通过有效地处理权重矩阵的变化(即梯度更新…...
关于在PyTorch中使用cudnn.benchmark= True
关于在PyTorch中使用cudnn.benchmark True 在PyTorch中,cudnn.benchmark True是一个参数,用于启用或禁用cuDNN的基准测试模式。cuDNN是一个由NVIDIA开发的深度神经网络库,它为GPU提供了一个优化的计算接口。 基准测试模式是cuDNN的一个特性…...

re:Invent大会,亚马逊云科技为用户提供端到端的AI服务
11月末,若是你降落在拉斯维加斯麦卡伦国际机场,或许会在大厅里看到一排排AI企业和云厂商相关的夸张标语。走向出口的路上,你的身边会不断穿梭过穿着印有“AI21Lab”“Anthropic”等字样的AI企业员工。或许,你还会被机场工作人员主…...

23、什么是卷积的 Feature Map?
这一节介绍一个概念,什么是卷积的 Feature Map? Feature Map, 中文称为特征图,卷积的 Feature Map 指的是在卷积神经网络(CNN)中,通过卷积这一操作从输入图像中提取的特征图。 上一节用示意动图介绍了卷积算…...

安装获取mongodb
目录 本地安装 获取云上资源 获取Atlas免费数据库 本地连接数据库 在Atlas中连接数据库 本文适合初学者或mongodb感兴趣的同学来准备学习测试环境,或本地临时开发环境。mongodb是一个对用户非常友好的数据库。这种友好,不仅仅体现在灵活的数据结构和…...

【模电】基本共射放大电路的工作原理及波形分析
基本共射放大电路的工作原理及波形分析 在上图所示的基本放大电路中,静态时的 I B Q I\tiny BQ IBQ、 I C Q I\tiny CQ ICQ、 U C E Q U\tiny CEQ UCEQ如下图( b )、( c )中虚线所标注。 ( a ) u i 的波形( b ) i B …...

Oracle:左连接、右连接、全外连接、(+)号详解
目录 Oracle 左连接、右连接、全外连接、()号详解 1、左外连接(LEFT OUTER JOIN/ LEFT JOIN) 2、右外连接(RIGHT OUTER JOIN/RIGHT JOIN) 3、全外连接(FULL OUTER JOIN/FULL JOIN࿰…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...

SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...