2

因此,我正在尝试使用名为 Postmark 的服务来发送格式化的 HTML 电子邮件。他们在这里有一些 API 文档,并给出了如何使用 CURL 的示例:

$: curl -X POST "http://api.postmarkapp.com/email" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Postmark-Server-Token: ed742D75-5a45-49b6-a0a1-5b9ec3dc9e5d" \
-v \
-d "{From: 'sender@example.com', To: 'receiver@example.com', Subject: 'Postmark test', HtmlBody: '<html><body><strong>Hello</strong> dear Postmark user.</body></html>'}"

所以,这一切都很好,当我使用自己的令牌时工作得很好。问题是当我添加自己的 HtmlBody 时。如果我发送一条简单的消息,它就可以正常工作。一旦我添加某些特殊字符,它就会中断。例如,如果我做这样的事情:

-d "{From: 'sender@example.com', To: 'receiver@example.com', Subject: 'Postmark test', HtmlBody: '<!DOCTYPE html><html><body><strong>Hello</strong> dear Postmark user.</body></html>'}"

它因为!. 我怎样才能解决这个问题?


更新:正如sourcejedi指出的那样,我正在从 shell(bash)运行它,所以这个!问题现在对我来说很有意义。我将 JSON 字符串移动到一个名为 email.json 的单独文件中,并使用-d @email.json. 这适用于带有 的简单电子邮件<!DOCTYPE>,但是当我尝试加载完整的 HTML 时仍然收到以下错误:

{"ErrorCode":402,"Message":"Received invalid JSON input."}

我相信这与其他一些特殊字符有关。当我使用--data-urlencode @email.json.

4

3 回答 3

3

你需要使用--data-urlencode,所以它应该像curl -X POST --data-urlencode

当我测试结束时..

* About to connect() to api.postmarkapp.com port 80 (#0)
*   Trying 50.56.54.211... connected
> POST /email HTTP/1.1
> User-Agent: curl/7.23.1 (x86_64-pc-win32) libcurl/7.23.1 OpenSSL/0.9.8r zlib/1
.2.5
> Host: api.postmarkapp.com
> Accept: application/json
> Content-Type: application/json
> X-Postmark-Server-Token: ed742D75-5a45-49b6-a0a1-5b9ec3dc9e5d
> Content-Length: 164
于 2012-08-28T18:42:36.837 回答
2

发布 JSON 数据时,我曾经收到过同样的错误。我所做的是用单引号将数据括起来,并对字符串使用双引号:

所以从:

-d "{From: 'sender@example.com', To: 'receiver@example.com', Subject: 'Postmark test', HtmlBody: '<html><body><strong>Hello</strong> dear Postmark user.</body></html>'}"

利用:

-d '{From: "sender@example.com", To: "receiver@example.com", Subject: "Postmark test", HtmlBody: "<html><body><strong>Hello</strong> dear Postmark user.</body></html>"}'

希望这可以帮助。

于 2014-02-18T01:34:33.880 回答
2

似乎仍然让我感到震惊,只是返回:-bash:!DOCTYPE:未找到事件

这是 bash shell 的错误。你需要逃脱!作为 \!你自己。但我认为,你最好从文件中读取。而不是-d data使用-d @datafile. (或-d @-从标准输入读取)。

于 2012-08-28T19:08:54.020 回答