You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Neomutt宏中使用当前邮件ID等变量?

在Neomutt中实现带邮件ID参数的宏及自定义变量使用

1. 获取当前撰写邮件的Message ID并传入宏

在Neomutt的compose模式下,当前正在撰写邮件的Message ID可通过%<{message-id}>格式提取邮件头的Message-ID字段值。注意:这个字段需要在你首次保存草稿或发送邮件后才会生成,未保存草稿时执行宏可能获取不到有效值,建议先保存草稿再操作。

修改后的宏示例(自动清理Message ID中的<>特殊字符,避免目录命名问题):

macro compose <F12> "<shell-escape>mkdir -p ~/tmp/neomutt/$(echo '%<{message-id}>' | tr -d '<>')/<enter>"

如果是要获取回复邮件的原始邮件ID,直接用Neomutt内置的%i变量即可。

2. 在宏中使用自定义变量

方式一:shell内联定义实时变量

直接在shell命令里定义临时变量,比如获取实时时间戳:

macro compose <F12> "<shell-escape>NOW=$(date +%Y%m%d%H%M%S); TARGET_DIR=~/tmp/neomutt/$(echo '%<{message-id}>' | tr -d '<>')/$NOW; mkdir -p $TARGET_DIR/<enter>\
<copy-file>$TARGET_DIR/message.txt<enter>\
<shell-escape>pandoc -o $TARGET_DIR/message.html $TARGET_DIR/message.txt<enter>"

这里通过定义NOW和TARGET_DIR两个变量,简化重复路径的写法,同时保证时间戳是宏执行时的实时值。

方式二:使用Neomutt自定义全局变量

先在neomuttrc中定义变量,再在宏中调用:

# 启动Neomutt时生成变量值
set my_timestamp = "$(date +%s)"
# 宏中调用变量
macro compose <F12> "<shell-escape>mkdir -p ~/tmp/neomutt/$(echo '%<{message-id}>' | tr -d '<>')/$my_timestamp/<enter>"

这种方式的变量值是Neomutt启动时生成的,不是宏执行的实时值,适合不需要实时更新的场景。

注意事项

  • 嵌套shell命令时,必须用$(command)形式执行子命令,确保变量解析正确。
  • Message ID中的@、<>等特殊字符可能干扰目录创建,建议用tr或sed做清理,比如tr -d '<>@'。
  • 多命令宏需用反斜杠\换行,保证Neomutt能识别完整的宏定义。

内容的提问来源于stack exchange,提问作者Moonlanders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:12:41