Zimbra脚本导出用户邮件ID时如何新增对应账号列
Zimbra 全用户邮件ID采集脚本改造方案
直接用awk做输出流逐行处理即可,不需要额外依赖,完全兼容原有命令逻辑,落地步骤如下:
- 保留原有遍历所有用户邮箱的循环逻辑,新增变量存储当前查询的目标邮箱地址
- 对
zmmailbox的原始输出做逐行匹配加工:统计行原样输出,表头追加User列名,分隔线补对应长度保证对齐,实际邮件条目末尾追加当前查询的邮箱地址 - 所有处理后的结果直接追加写入最终的txt导出文件即可
可直接替换使用的核心代码片段(默认适配Zimbra 8.8/9.0版本输出格式):
# 执行前请先切换到zimbra用户:su - zimbra # 结果导出文件路径可自行修改 OUTPUT_FILE="./all_user_mail_id.txt" # 先清空旧的结果文件 > "$OUTPUT_FILE" # 此处替换为你原有获取所有用户邮箱列表的逻辑,示例为遍历所有zmailbox列表里的用户 for USER_EMAIL in $(zmprov -l gaa | grep -v -E "^(admin|galsync|spam|ham|virus-quarantine)@"); do zmmailbox -z -m "$USER_EMAIL" search -l 9999 "in:/inbox" | awk -v cur_user="$USER_EMAIL" ' /^num:/ { print $0 "\n" next } /^ Id Type/ { print $0 " User" next } /^----/ { print $0 "---------------" next } /^[[:space:]]*$/ { next } { print $0 " " cur_user } ' >> "$OUTPUT_FILE" done
调整说明
- 代码里
-l 9999是单用户查询的最大邮件条数,如果不需要全量采集,改回你需要的数值即可 - 代码中拼接的空格数是按默认输出列宽设置的,如果你的环境输出列有偏移,直接增减对应位置的空格数量就能对齐
- 如果只需要导出纯邮件ID,不需要其他字段,把awk里最后一行的
print $0 " " cur_user改成print cur_user "," $1即可直接输出csv格式的「用户邮箱,邮件ID」对应表 - 过滤规则里排除了系统内置账号,如果需要采集系统账号的邮件,删掉grep过滤段即可
内容的提问来源于stack exchange,提问作者rickygm
相关产品推荐
相关产品推荐

