LWN:aerc 邮件客户端概览!

关注了就能看到更多这么棒的文章哦~

A look at the aerc mail client

By Joe Brockmeier
October 17, 2024
Gemini-1.5-flash translation
https://lwn.net/Articles/993498/

电子邮件作为开源项目协作工具已不再流行,但仍有一些项目(如 PostgreSQL 和 Linux 内核)要求贡献者通过电子邮件发送和审查补丁。aerc 邮件客户端旨在为寻求基于文本、高效且可扩展的客户端的开发者提供服务,这些客户端旨在用于与 Git 和电子邮件一起使用。它默认使用 Vim 风格的键绑定,并且拥有受 tmux 启发的界面,允许用户同时管理多个帐户、邮件和嵌入式终端。

为什么叫这个名字?

从基于终端的电子邮件客户端标准来看,aerc 相对较新。流行的基于文本的电子邮件客户端 Mutt 于 1995 年首次发布,其分支 NeoMutt 于 2016 年首次发布。久负盛名的 Pine 邮件客户端于 1992 年首次发布,其重写版本 Alpine 出现在 2007 年。aerc 只有六年的历史,是一个新兴的工具。Drew DeVault 于 2018 年 1 月对 aerc 项目进行了 首次提交,并于 2019 年 6 月 宣布了 0.1.0 预发布。该项目是用 Go 编写的,并在 MIT 许可下提供。

这个名字曾经是一个谜,所以我给 DeVault 发邮件询问它的由来。他回复说,它最初代表“异步电子邮件阅读客户端”,表示用户界面和与 IMAP 服务器等通信的网络代码是分离的,以改善用户体验。他说,那个名字意义不大,很快就“被历史的尘埃所掩盖”。

DeVault 于 2022 年 1 月 发布通知到他的 aerc 代码库,宣布开发已转移到 Robin Jarry 维护的分支。从那时起,该分支一直处于积极的开发中。Aerc 0.18.0 于 7 月宣布,是最近的主要版本。这代表了大约五个月的工作,有 25 人为该版本做出了贡献。其中包含许多小的修复和改进,例如一个用于重新发送邮件的新 :bounce 命令,一个用于将邮件定位到邮件列表顶端、底部或中心的 :align 命令等等。最近的小版本(0.18.2) 于 7 月 29 日发布,包含少量修复。

Aerc 为大多数(如果不是全部)主要 Linux 发行版提供打包,并且也作为 FreeBSD 和 OpenBSD 的 Ports 系统以及 NetBSD 的软件包集合的一部分提供。我最初使用 Fedora 40 中的软件包,但几周后切换到从源代码编译以获取最新的更新。到目前为止,主分支一直非常稳定。

检索和发送邮件

Aerc 目前支持使用 IMAP、JMAP、notmuch、Maildir 和 Maildir++ 作为后端来读取电子邮件。它使用 SMTP 和 Sendmail 发送邮件。Aerc 提供了一个 new-account 命令,它将引导用户完成一个基于文本的配置向导,以设置 aerc 来发送和接收电子邮件。

new-account 工具只配置检索和发送电子邮件的最低限度内容。用户可能需要编辑帐户配置以添加签名、修改检查邮件的间隔、使用 GnuPG 进行签名 等等。帐户设置存储在一个纯文本文件中,该文件位于 $HOME/.config/aerc/accounts.conf. 有关更多信息,请参阅 accounts.conf 手册页。默认情况下,所有 aerc 的配置文件都存储在 .config/aerc 下。

一个基本的配置看起来像这样:

[Account Name]
source = maildir://~/mymail
outgoing = smtps://user:<password>@smtp.myhost.com
default = INBOX
from = Aerc User
copy-to = Sent
signature-file = ~/.signature

请注意,aerc 会在设置过程中将 IMAP、JMAP 和 SMTP 密码以纯文本形式存储在它的配置文件中,从安全角度来看,这不是理想的。用户可能需要在 accounts.conf 中使用 source-cred-cmd 指令来运行一个外部命令,例如 pass,从一个加密的源中检索密码。

Aerc 界面

在终端中运行 aerc 可以启动 Aerc。与大多数基于文本的邮件客户端不同,aerc 有一个选项卡界面,允许用户同时拥有多个帐户和电子邮件打开。它在屏幕的左侧显示帐户的文件夹,在右侧显示电子邮件。如果用户配置了多个帐户,每个帐户都会在它自己的选项卡中显示。导航使用 Vim 风格的键绑定: k 和 j 在邮件列表中向上和向下移动(分别), K 和 J 在文件夹列表中向上和向下移动, Enter 打开邮件或文件夹。 Control-n 和 Control-p 在选项卡之间循环。

与 Vim 一样,运行命令的前缀是冒号键 (:)。新用户可能希望尝试运行 :help tutorial 的 教程,该教程会显示教程手册页,其中包含一些关于移动键、邮件查看器、撰写邮件和内置终端的基本说明。

ad6e1ca8b2ca76af9c19a33064709f9c.png

输入 : 并按下 Tab 键会显示一个弹出窗口,其中包含可用的命令,用户可以通过再次按下 Tab 键来选择,直到突出显示所需的命令,或者输入前几个字母并按下 Tab 键完成命令。例如, :compose 将打开邮件撰写器, :reply -a -q 将使用默认编辑器中的原始邮件引用启动回复, :terminal 将在 aerc 中打开一个新的终端。

就像 Vim 有 模式(例如,用于运行命令的普通模式、用于编辑文本的插入模式等等)一样,aerc 也有上下文。aerc 的可用上下文包括消息(查看帐户中的邮件列表)、查看(实际查看单个邮件)、撰写和终端。用户可以使用 ? 来显示一个在他们所处的任何上下文中可用的键绑定的列表。

定制 Aerc

正如人们所料,aerc 的键绑定是可定制的,用户可以创建键绑定来运行他们自己的命令序列。它的键绑定配置位于 $HOME/.config/aerc/binds.conf. 绑定按上下文组织,并且可以根据 aerc 所处的上下文使用绑定来执行不同的操作。绑定的格式很简单,即要使用的键序列和要运行的命令。例如,这将设置一个快捷方式,将用户工作帐户中的邮件移动到垃圾邮件文件夹:

[messages:account=Work]
S = :read<Enter>:move Spam<Enter>

所有 aerc 的默认键绑定也在此文件中定义——因此用户可以根据自己的需要重新配置它们。例如,可以设置 aerc 使用 Mutt 快捷方式,甚至使用 Emacs 风格的键绑定。(尽管 Emacs 用户可能不愿意退出 Emacs 来使用外部邮件客户端。)

用户可以通过在 accounts.conf 文件中添加 folders 和 folders-sort 指令来隐藏邮箱文件夹和/或更改它们显示的顺序,这些指令位于相应的帐户下。用户还可以重新映射文件夹名称,使其更有用。例如,当使用 aerc 与 Gmail 帐户一起使用时,用户可能希望将默认的 IMAP 名称(如 “[GMAIL]/Spam”)重新映射为“Spam”。(或者“spam spam spam spam…” 如果他们已经看了太多次 蒙提·派森的飞行马戏团)。这将告诉 aerc 只显示帐户的收件箱、已发送和存档文件夹,按此顺序显示,并查找 folder-map 指定的文件以找到 “[Gmail]/Sent” 到 Sent 的重新映射。

folders = INBOX,Archive,Sent
folders-sort = INBOX,Sent,Archive
folder-map = /home/user/.config/aerc/folders

在 folders 文件中,此节将重新映射文件夹名称:

Sent = [Gmail]/Sent

aerc 的大多数界面也是可定制的。例如,可以重新排列邮件列(发件人、主题、日期等)的宽度和顺序、文件夹侧边栏的宽度等等。基本配置在 aerc.conf 文件中提供(有关更多信息,请参阅 aerc-config 手册页),用户可以使用 样式集 来设置用户界面颜色等。样式集功能不仅仅是为了美化 aerc 的界面,尽管它非常适合此目的。样式集可用于突出显示符合某些条件的邮件,以便更容易在邮件列表中找到它们。例如,这些节将对主题中匹配“FR”(供审核)的邮件以及发送到 lists.debian.org 或 lists.postgresql.org 的邮件进行着色:

msglist_*.Subject,~FR.fg=#a64b2a
msglist_*.To,~lists.debian.org.fg=#4e6a79
msglist_*.To,~lists.postgresql.org.fg=#f0ece2

在保存新规则后运行 :reload 将使它们生效,而无需重新启动 aerc。catppuccin/aerc 代码库中有一些 aerc 用户可能想使用或借鉴的样式集示例。

使用 Aerc

即使 aerc 是一个基于终端和键盘驱动的应用程序,它也支持鼠标(假设它运行的终端支持鼠标)。可以通过在 aerc.conf 中将 mouse-enabled 设置为 true 来启用它。它允许使用鼠标选择选项卡、文件夹和邮件,并使用鼠标滚轮滚动邮件列表。除此之外,aerc 没有任何菜单——因此鼠标的用处有限。

伸手去抓鼠标是一个生产力障碍。使用 aerc 时,实际上没有必要伸手去抓鼠标,用户想要做的任何事情都可以通过键盘完成。几乎所有事情都可以通过键盘完成。电子邮件和附件可以使用 :pipe 和 :open 命令从 aerc 中通过管道传输到外部命令。如果电子邮件包含用户想要访问的链接, :open-link 命令将把它发送到默认的网页浏览器。

Aerc 不支持使用 mbox 格式,但它可以使用 :import-mbox 和 :export-mbox 命令导入和导出该格式。这可能对将邮件从另一个程序移动到 Aerc 或者导入邮件列表中的档案很有用。

编辑邮件由用户选择的外部编辑器处理。默认情况下,aerc 将使用 $EDITOR 指定的任何编辑器,但这可以在 aerc.conf 文件中使用 editor 指令进行修改,如下所示:

editor=nano

aerc 的主要用例之一是通过电子邮件使用 Git 与其他人进行协作。开发者预计会使用 Git 的 send-email 命令在运行在 aerc 中的终端中发送补丁,并使用 :patch 命令管理补丁,该命令直接从 aerc 中将补丁应用到 Git 代码库。sourcehut 教程 中关于使用电子邮件和 Git 的内容提供了关于使用 git send-email 的良好概述,相应的 审查贡献的教程 解释了如何使用 aerc 审查补丁并提供了一个示例审查项目以供使用。

搜索

Aerc 有两个命令对使用 IMAP 或 Maildir 后端时搜索电子邮件很有用::search 和 :filter,它们具有相同的语法,但行为略有不同。搜索会突出显示匹配的邮件,并允许用户使用 n (向前)和 N (向后)导航到匹配的邮件。当过滤时,只显示匹配的邮件——这使得它便于用于对邮件进行批量操作。例如,此命令将匹配文件夹中所有在过去一周内在正文中包含“Firefox”的邮件:

:filter -d this_week -b Firefox

请注意,可以运行多次 :filter 以缩小结果范围,但新的 :search 会替换旧的结果。例如,可以运行上述命令来过滤在过去一周内发送的邮件,这些邮件在正文中包含“Firefox”。运行另一个 :filter 命令将进一步缩小结果范围,而不是在文件夹上运行新的搜索。过滤后的结果也可以搜索。在没有参数的情况下运行 :filter 将清除过滤器并显示文件夹中的所有邮件。请注意,过滤在 aerc 重新启动或清除之前一直持续——如果用户在收件箱文件夹中过滤邮件,然后切换到另一个文件夹,再切换回来,收件箱中的过滤器将仍然有效。这可能会与预期结果相悖,并引发“我的所有邮件都到哪里去了?”(或者更强的)反应,如果如果不熟悉 aerc 的话。

如果使用 notmuch 后端,用户可以使用 notmuch 语法 来使用 :filter 和 :search 命令。Aerc 还提供了一个 :query 命令,用于从 notmuch 查询中创建虚拟文件夹。

aerc 项目意识到,即使是开发者也必须偶尔参加会议。如果邮件包含会议邀请,用户可以使用 :accept 和 :decline 命令生成对日历邀请的回复,该回复应该让发送者相应地更新他们的日历。请注意,这不会更新 aerc 用户的日历,这需要通过将 text/calendar 部分通过管道传输到单独的处理程序来手动完成。

总的来说,aerc 是一个高度可定制的邮件客户端,背后有一个小型但活跃的社区。我发现它非常适合管理具有大量邮件的多个帐户。在使用设置和键绑定进行调整的前一两周,生产力略有下降,但这很快就会过去。在性能方面,aerc 能够很好地处理存储在本地的大量邮件。排序、搜索、过滤和一次对数千封邮件进行操作几乎是即时的——尽管性能可能会根据 aerc 可用的系统资源而有所不同。它在 IMAP 后端上也表现良好,尽管这在一定程度上取决于服务。使用 IMAP 在 LWN 的服务器上存储的邮件比 Fastmail 要快得多,但我在 Fastmail 的服务器上存储了十多年的邮件。可能已经到了从我的档案中删除一些几十年前的通讯和自动通知的时候了。

对于将 aerc 作为其主要邮件客户端的用户来说,值得注册 aerc-discuss 和 aerc-devel 邮件列表。这两个列表的邮件量都很低,并且包含关于使用和改进 aerc 的有用的讨论。

尽管版本号很低,aerc 已经被证明足够稳定和功能齐全,可以用于日常使用。该项目在不久的将来将如何发展,以及它是否会达到 1.0 版本,这将是有趣的事情。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

f5a96f75a5d510294887278332cde507.jpeg

内容概要:本文提出了一种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识和Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。
内容概要:本文围绕基于自适应神经模糊推理系统(ANFIS)智能控制器的可再生能源微电网功率管理系统展开研究,结合Simulink仿真实现,深入探讨了微电网中功率的智能调控与经济机组组合调度问题。通过引入ANFIS控制器,有效应对风能、光伏等可再生能源出力的波动性与不确定性,提升系统运行的稳定性与电能质量。研究内容涵盖微电网多源协调控制策略、功率平衡管理、优化调度模型构建及仿真验证,实现了对分布式电源、储能系统和负荷的协同优化,兼顾经济性与可靠性目标,并通过仿真平台验证了所提方法的有效性与优越性。; 适合人群:具备电力系统、自动化或新能源相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网能量管理、智能控制、能源优化等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高比例可再生能源接入场景下的微电网能量管理系统研发与教学实践;②为实现微电网功率稳定控制与经济高效运行提供先进的智能控制解决方案;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的仿真验证与方案优化。; 阅读建议:建议结合提供的Simulink模型与相关代码进行动手实践,重点关注ANFIS控制器的设计流程、规则库构建与参数调优方法,并通过与传统PID或MPC控制策略的对比实验,深入理解其在动态响应与鲁棒性方面的优势。同时可进一步拓展文中提出的优化调度逻辑,应用于多目标、多约束的复杂实际应用场景中。
内容概要:本文档聚焦于“直流电机双闭环控制Matlab仿真”,系统阐述了基于Matlab/Simulink平台实现直流电机双闭环控制系统(主要包括速度环与电流环)的设计与仿真全过程。通过构建直流电机的数学模型,结合PI控制器进行调控,实现对电机转速和电枢电流的高精度动态控制,验证控制策略的稳定性与响应性能。文档详细介绍了仿真模型的搭建流程、关键参数的整定方法、系统动态波形的分析手段以及仿真结果的有效性验证,体现了经典自动控制理论在实际电机系统中的工程应用,是电机控制与电力电子技术相结合的典型研究案例。; 适合人群:具备自动控制原理、电机与拖动基础、电力电子技术和Matlab/Simulink仿真能力的电气工程、自动化、机电一体化等专业的本科生、研究生及从事电机驱动系统研发的工程技术人员。; 使用场景及目标:①作为高校课程设计或实验教学材料,帮助学生深入理解双闭环调速系统的工作机理与工程实现;②服务于科研项目,为新型电机控制算法(如滑模、模糊PID等)的开发与性能对比提供基础仿真验证平台;③作为工业界产品前期设计的仿真工具,用于评估不同控制策略在动态响应、抗干扰能力和稳态精度方面的可行性。; 阅读建议:建议读者在学习过程中紧密结合自动控制理论知识,亲手在Simulink环境中搭建完整的双闭环仿真模型,通过反复调整PI控制器的比例与积分参数,观察并分析转速、电流的阶跃响应曲线,从而深刻理解反馈控制的本质、系统稳定性条件以及参数整定对动态性能的影响,进而掌握电机控制系统的设计精髓。
内容概要:本文研究了基于Benders分解与输电网运营商(TSO)和配电网运营商(DSO)协调机制的不确定环境下输配电网双层优化模型,旨在提升高比例可再生能源接入背景下电网系统的协调性与鲁棒性。模型上层以系统整体经济性为目标进行优化调度,下层采用Benders分解实现TSO与DSO之间的信息交互与协同决策,通过引入割平面迭代机制保障求解的收敛性与全局最优性。研究充分考虑新能源出力与负荷需求的不确定性,构建了具有强适应性的双层优化框架,并基于Matlab完成了模型的编程实现与仿真验证,有效解决了多主体、多层级、多不确定性因素耦合下的电力系统优化调度难题。; 适合人群:具备电力系统分析、运筹学与优化理论基础,熟悉Matlab编程环境,从事智能电网、能源互联网、分布式能源集成、电力市场等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究高渗透率可再生能源条件下输配电网协同优化调度策略;②掌握Benders分解在电力系统双层优化建模中的应用方法与实现技巧;③构建TSO-DSO多主体协调机制,实现跨层级电网资源的高效互动与决策解耦;④提升对不确定性建模、分解算法设计及大规模优化问题求解能力。; 阅读建议:建议读者结合Matlab代码逐模块剖析模型构建流程,重点理解Benders割的生成逻辑、主从问题的信息传递机制及收敛判据设定,推荐在标准IEEE测试系统上复现实验以深入掌握模型特性与算法性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值