0

我想将 curl 命令的输出通过管道传输到电子邮件,但是当我运行此脚本时收到一个空附件文件:

#!/bin/bash

STATUS=$(curl -I example.com)

echo $STATUS | mail -s "Test" an@email.com

我也尝试过分组,但这也没有用:

#!/bin/bash    
{
curl -I example.com
} | mail -s "Test" an@email.com

操作系统:红帽 6.3

# mail -V
12.4 7/29/08
4

2 回答 2

2

假设您的邮件二进制文件是这个,请尝试添加该选项-a -

于 2012-12-14T21:42:12.867 回答
1

编辑:

尝试简单

curl -SIo /dev/stdout example.com 2>/dev/null | mail -s "Test" an@email.com

好吧,如果是邮件问题。您的描述似乎很奇怪,您使用的是哪个版本的邮件?

或者sendmail直接要求:

/usr/sbin/sendmail an@email.com < <(
    echo $'From: an@email.com\nTo: an@email.com\nDate: '$(
        env LANG=C date +%c)$'\nSubject: Test'
    echo
    curl -SIo /dev/stdout 2>/dev/null example.com)

你甚至可以构建一些更复杂的工作:

MyVar="$(curl -SIo /dev/stdout 2>/dev/null example.com)"
/usr/sbin/sendmail an@email.com < <(
    echo $'From: an@email.com\nTo: an@email.com\nDate: '$(
        env LANG=C date +%c)$'\nSubject: Server resp: '${MyVar%%$'\r'*}
    echo
    echo "$MyVar")

因此,您可以在主题中获得初始服务器响应。

这不是保留 sendmail功能!

多年来我一直在使用这种方法,首先是在 下sendmail,但是这与我曾经使用过的所有MTA使用相同的语法(即直接调用../sbin/sendmail二进制文件或包装器,使用格式化的邮件作为标题 + 空行 + 正文)现在(sendmail、qmail、postfix、exim)。

注意一些(旧)MTA 抱怨CR的存在(或不存在)或\r在行尾,也许有些sed 's/$/\r/'可以提供帮助。

于 2012-12-14T22:19:56.917 回答