我正在尝试编写一个shell脚本,其中电子邮件被传送到(通过cpanel中的电子邮件转发)。
然后,shell脚本将使用curl将整个电子邮件发布到URL。
脚本如下所示:
curl -d "param=$1" http://localhost/stuff/
前锋看起来像这样:
|/home/usr/script/curlthis.sh
这只是一种工作方式。
即使卷曲成功发布到网址,电子邮件也会被退回。 (看起来只有部分电子邮件被发布,但我不是百分百肯定的)
我被告知电子邮件反弹是因为我没有阅读stdin,但我不确定为什么我需要这样做以及为什么我不能使用$ 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,那么无论出于何种原因,电子邮件都会被退回。
答案 0 :(得分:2)
您的邮件将作为stdin上的流传递给脚本,而不是作为参数($1
)。请注意,您的转发脚本以管道开头,这是将邮件传递到您的脚本的机制。
所以你应该能够使用read
语句在shell(bash?)中读取它。有关详细信息,请参阅this SO answer。