使用Curl发送邮件时,能否在email.txt中加入变量?
如何在Curl发送邮件时使用动态变量(如日期、用户信息)
当然可以实现动态内容,直接在静态email.txt里写变量不会被解析,得通过Bash的命令替换或动态生成内容的方式来实现,下面是几种实用方案:
方案1:用Here-Document直接生成邮件内容(无需单独文件)
直接在curl命令里嵌入动态内容,Bash会自动解析变量和命令输出:
curl smtp://mail.example.com --mail-from me@example.com --mail-rcpt to@example.com <<EOF From: John <me@example.com> To: Joe <to@example.com> Subject: Example email Date: $(date -R) 当前登录用户信息: $(who) Welcome to this example email. EOF
$(date -R)生成符合邮件标准的RFC 2822格式日期,避免手动填写的格式问题$(who)直接插入who命令的输出内容
方案2:动态生成临时邮件文件
先生成带动态内容的email.txt,再用curl发送:
# 生成含变量的邮件文件 cat > email.txt <<EOF From: John <me@example.com> To: Joe <to@example.com> Subject: Example email Date: $(date -R) 当前操作用户:$(whoami) 完整登录会话: $(who) Welcome to this example email. EOF # 发送邮件 curl smtp://mail.example.com --mail-from me@example.com --mail-rcpt to@example.com --upload-file email.txt # 可选:发送完成后删除临时文件 rm email.txt
方案3:通过管道传递动态内容(无文件生成)
用printf格式化内容并通过管道传给curl,无需生成实体文件:
printf "From: John <me@example.com>\nTo: Joe <to@example.com>\nSubject: Example email\nDate: %s\n\n当前用户:%s\n\nWelcome to this example email.\n" "$(date -R)" "$(whoami)" | curl smtp://mail.example.com --mail-from me@example.com --mail-rcpt to@example.com --upload-file -
--upload-file -表示从标准输入读取邮件内容
注意事项
- 务必使用
date -R生成日期,这是邮件服务器认可的标准格式 - 命令替换
$(...)会直接执行命令并替换为输出,确保命令在当前Bash环境中可正常运行 - 如果内容包含特殊字符(空格、换行等),要用双引号包裹变量或命令替换,避免解析错误
内容的提问来源于stack exchange,提问作者IMB
相关产品推荐
相关产品推荐

