首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在procmail中设置电子邮件地址变量

如何在procmail中设置电子邮件地址变量
EN

Stack Overflow用户
提问于 2022-09-01 18:02:43
回答 1查看 35关注 0票数 0

我有一个Procmail规则,它使用formail解析To:电子邮件头,以确定电子邮件发送到的电子邮件地址:

代码语言:javascript
复制
TO_=`formail -XTo:`

这是行不通的,因为我希望${TO_}评估为"address@domain.com",但我得到的是" to : firstName lastName“。

如何将procmail脚本中的环境变量设置为我想要的格式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-01 18:20:04

不,您正在提取To:头的全部内容,它通常应该类似于To: Real Name <recipient@example.net>。但是,有许多不同的版本;例如,它也可以是recipient@example.net (Real Name),尽管这种格式已经过时了。

演示:

代码语言:javascript
复制
bash$ cat <<\: >nst.rc
SHELL=/bin/sh
TO_=`formail -XTo:`
:

bash$ cat <<\: >nst.eml
From: me <sender@example.org>
To: Real Name <recipient@example.net>
Subject: All your base

They are belong to us
:

bash$ procmail -m VERBOSE=yes DEFAULT=/dev/null nst.rc <nst.eml
procmail: [271] Fri Sep  2 10:01:29 2022
procmail: Assigning "DEFAULT=/dev/null"
procmail: Assigning "MAILDIR=."
procmail: Rcfile: "nst.rc"
procmail: Assigning "SHELL=/bin/sh"
procmail: Executing "formail,-XTo:"
procmail: Assigning "TO_=To: Real Name <recipient@example.net>"
procmail: Assigning "LASTFOLDER=/dev/null"
procmail: Opening "/dev/null"
 Subject: All your base
  Folder: /dev/null                             114

如果您知道标头包含<brokets>之间的地址,则可以在它们之间提取文本,而无需使用formail或其他外部实用程序。

代码语言:javascript
复制
:0
* ^To:.*<\/[^>]+
{ TO_=$MATCH }

这使用Procmail的特殊\/提取令牌,它将匹配的文本分配给特殊的内部变量MATCH

代码语言:javascript
复制
bash$ cat <<\: >nst2.rc
SHELL=/bin/sh

:0
* ^To:.*<\/[^>]+
{ TO_=$MATCH }
:

bash$ procmail -m VERBOSE=yes DEFAULT=/dev/null nst2.rc <nst.eml
procmail: [275] Fri Sep  2 10:03:26 2022
procmail: Assigning "DEFAULT=/dev/null"
procmail: Assigning "MAILDIR=."
procmail: Rcfile: "nst2.rc"
procmail: Assigning "SHELL=/bin/sh"
procmail: Assigning "MATCH="
procmail: Matched "recipient@example.net"
procmail: Match on "^To:.*<\/[^>]+"
procmail: Assigning "TO_=recipient@example.net"
procmail: Assigning "LASTFOLDER=/dev/null"
procmail: Opening "/dev/null"
 Subject: All your base
  Folder: /dev/null                             114

切线上,如果您想提取一个没有header关键字本身的标头值,那将是

代码语言:javascript
复制
formail -zxTo:

用小写的-x

但这仍然提取整个值,即Real Name <recipient@example.net>。当然,您可以添加一个简单的sed脚本来提取电子邮件终端;但是一般来说,出于效率原因,您希望避免产生外部进程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73573726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档