我正在尝试编写一个 shell 脚本,将电子邮件传送到其中(通过 cpanel 中的电子邮件转发)。
然后,shell 脚本将使用 curl 将整个电子邮件发布到 url。
脚本如下所示:
curl -d "param=$1" http://localhost/stuff/
前锋看起来像这样:
|/home/usr/script/curlthis.sh
这只是一种工作。
即使 curl 成功发布到 url,电子邮件也会被退回。(看起来只有部分电子邮件被发布,但我不是 100% 确定)
我被告知电子邮件退回,因为我没有阅读标准输入,但我不知道为什么我需要这样做以及为什么我不能使用 1 美元?
如何读取管道的全部内容(然后使用 curl 发布),这会阻止邮件服务器将其退回吗?
编辑
在这里使用下面的答案是我想出的:
#!/bin/bash
m=$(cat -)
escapedm="$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$m")"
curl -silent -G -d "param=$escapedm" http://localhost/stuff/ 2>&1 >/dev/null
这部分:
2>&1 >/dev/null
非常重要。如果您不将 stdout/err 重定向为 null,那么无论出于何种原因,电子邮件都会被退回。