1

我正在尝试编写一个 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,那么无论出于何种原因,电子邮件都会被退回。

4

1 回答 1

2

您的邮件作为标准输入上的流传递给脚本,而不是作为参数 ( $1)。请注意,您的转发脚本以管道开头,这就是将邮件传递到您的脚本的机制。

因此,您应该能够使用该read语句在您的 shell(bash?)中读取它。有关更多详细信息,请参阅此 SO 答案

于 2012-09-04T14:15:37.783 回答