如何在Procmail中设置变量为收件人邮箱地址
解决Procmail提取收件人邮箱地址的问题
原命令TO_=formail -XTo:``会输出完整的To头行(包括字段名和姓名信息),所以无法直接得到纯邮箱地址。你可以通过以下两种方式修改脚本,提取出符合预期的邮箱地址:
方法一:用formail二次解析
利用formail的参数先提取To字段的值,再反向解析出标准邮箱地址:
TO_=`formail -x To: | formail -rt -X To:`
formail -x To:会去除字段名To:,只保留后面的地址内容(比如firstName lastName <address@domain.com>)formail -rt -X To:会对提取到的内容进行反向解析,自动提取出<>包裹的纯邮箱地址;如果To字段本身就是纯邮箱(无姓名),也会直接输出该地址。
方法二:用sed精准匹配提取
如果需要更灵活的处理逻辑,可结合sed正则提取邮箱:
TO_=`formail -x To: | sed -n 's/.*<\([^>]*\)>.*/\1/p; s/^[[:space:]]*\([^[:space:]]*\)[[:space:]]*$/\1/p'`
这个命令会处理两种常见场景:
- 匹配
<>包裹的邮箱地址(如firstName lastName <address@domain.com>),提取出address@domain.com - 处理无姓名的纯邮箱格式(如
address@domain.com),直接提取邮箱本身
内容的提问来源于stack exchange,提问作者dawydiuk
相关产品推荐
相关产品推荐

