使用Lua在Neomutt中程序化删除邮件
用Neomutt Lua脚本实现邮件批量处理
完全可以通过Neomutt的Lua API实现批量查找特定发件人邮件,并完成删除或移动操作,以下是具体实现方案:
前置准备
- 确保你的Neomutt编译时启用了Lua支持(编译参数带
--lua) - 在Neomutt配置文件(如
~/.neomuttrc)中添加Lua脚本加载语句:source "~/.config/neomutt/lua/init.lua"
核心实现脚本
创建~/.config/neomutt/lua/clean_senders.lua文件,写入以下代码:
-- 定义发件人处理规则:键为发件人匹配模式,值为目标文件夹(nil表示直接删除) local sender_rules = { ["spam@example.com"] = nil, ["newsletter@example.org"] = "Archives/Newsletters", ["promo@shop.com"] = "Archives/Promotions" } -- 单邮件处理逻辑 local function process_msg(msg) local sender = mutt.msg_get_header(msg, "From") if not sender then return end for pattern, target in pairs(sender_rules) do -- 匹配发件人(如需精确匹配邮箱,可改用string.match(sender, "<"..pattern..">")) if string.find(sender, pattern) then if target then -- 移动邮件到目标文件夹 local ok = mutt.msg_move(msg, target) mutt.debug(1, ok and string.format("移出发件人 %s 的邮件到 %s", sender, target) or string.format("移动发件人 %s 的邮件失败", sender)) else -- 直接删除邮件 mutt.msg_delete(msg, true) -- true为立即删除,false为标记待删 mutt.debug(1, string.format("删除发件人 %s 的邮件", sender)) end break end end end -- 注册自定义Neomutt命令:在终端输入:clean_senders即可执行 mutt.command_register("clean_senders", function() mutt.debug(1, "开始执行发件人邮件清理...") mutt.msg_iter(process_msg) -- 遍历当前邮箱所有邮件 mutt.debug(1, "清理完成") end)
然后在~/.config/neomutt/lua/init.lua中引入该脚本:
dofile("~/.config/neomutt/lua/clean_senders.lua")
使用方式
- 启动Neomutt后,进入目标邮箱(如收件箱)
- 输入
:clean_senders并回车,脚本会自动按规则处理邮件 - 如需启动时自动执行清理,可在
clean_senders.lua末尾添加启动钩子:mutt.hook_register("startup", function() mutt.command_exec("folder +INBOX") -- 切换到收件箱 mutt.command_exec("clean_senders") end)
注意事项
- 确保目标文件夹已存在,否则移动操作会失败
- 可通过Neomutt的
:debug命令查看脚本日志(对应代码中mutt.debug()的输出) - 匹配模式支持Lua字符串匹配语法,可灵活调整匹配精度
内容的提问来源于stack exchange,提问作者caltuntas
相关产品推荐
相关产品推荐

