通过Curl发送时,是否可以在电子邮件中添加变量?

kupeojn6  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(139)

我正在使用Curl发送简单的电子邮件警报:

curl smtp://mail.example.com --mail-from me@example.com --mail-rcpt \
to@example.com --upload-file email.txt

电子邮件. txt内容:

From: John <me@example.com>
To: Joe <to@example.com>
Subject: Example email
Date: Wed, 26 Oct 2022 08:45:16    

Welcome to this example email.

是否可以在email.txt中包含变量(例如,将日期设置为动态date或包含bash用户who)?

q43xntqr

q43xntqr1#

有一个GNU gettext实用程序叫做envsubst,它用变量的值替换标准输入中的变量。例如:

$ export DATE=$(date +'%F %T')
$ echo '$DATE' | envsubst
2022-10-25 13:17:51

请注意,echo '$DATE'打印的是$DATE,因为变量没有被shell展开,原因是使用了单引号。
要在示例中使用该值,可以在环境中设置所需的值:

export FROM='me@example.com'
export TO='to@example.com'
export DATE=$(date +'%F %T')

然后更新电子邮件以使用变量:

From: John <$FROM>
To: Joe <$TO>
Subject: Example email
Date: $DATE

Welcome to this example email.

然后在命令中使用envsubst和进程替换:

curl smtp://mail.example.com \
    --mail-from "$FROM" \
    --mail-rcpt "$TO" \
    --upload-file <(envsubst < email.txt)

其中envsubst < email.txt的输出为

From: John <me@example.com>
To: Joe <to@example.com>
Subject: Example email
Date: 2022-10-25 13:23:44

Welcome to this example email.

除了进程替换,您还可以使用管道和特殊的-文件从标准输入中读取:

envsubst < email.txt \
    | curl smtp://mail.example.com \
        --mail-from "$FROM" \
        --mail-rcpt "$TO" \
        --upload-file -
kqlmhetl

kqlmhetl2#

也许它会帮助你(见man envsubst):

$ cat test.txt
current date is ${CURRENT_DATE}

$ export CURRENT_DATE=$(date); cat test.txt | envsubst | curl bla-bla

相关问题