因此,我正在尝试使用一种名为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>'}"
它因!
而断开。我该怎么解决这个问题?
UPDATE:正如sourcejedi所指出的,我正在从shell(bash)运行此程序,因此!
问题现在对我来说是有意义的。我将JSON字符串移动到一个名为email.JSON的单独文件中,并使用-d @email.json
加载该文件。这适用于一封带有<!DOCTYPE>
的简单电子邮件,但当我尝试加载完整的HTML:时,仍然会出现以下错误
{"ErrorCode":402,"Message":"Received invalid JSON input."}
我相信这与其他一些特殊的角色有关。当我使用--data-urlencode @email.json
时,我也会遇到同样的错误。
您需要使用--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
还似乎打断了我一个刚回:-砰:!DOCTYPE:未找到事件
这是bash shell的一个错误。你需要逃离!as \!你自己但我认为你最好从文件中阅读。使用-d @datafile
代替-d data
。(或从stdin读取-d @-
)。
我曾经在发布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>"}'
希望这能有所帮助。