2024年在线市场平台的11大最佳支付解决方案
如何使用API发送电子邮件?
发送一封电子邮件
通过 Postmark 发送单封电子邮件非常简单,只需向我们的 /email 端点发送 HTTP POST 请求并将 JSON 消息 附加到正文即可。
使用 curl 的示例请求
curl "https://api.postmarkapp.com/email" \
-X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Postmark-Server-Token: server token" \
-d '{
"From": "sender@example.com",
"To": "receiver@example.com",
"Subject": "Postmark test",
"TextBody": "Hello dear Postmark user.",
"HtmlBody": "<html><body><strong>Hello</strong> dear Postmark user.</body></html>",
"MessageStream": "outbound"
}'
header身份验证
为了向服务验证您的身份,您需要使用 X-Postmark-Server-Token
标头进行身份验证和授权。每个 Postmark 服务器都有自己的 API 令牌,允许您隔离连接到 Postmark 的每个应用程序的访问和数据。
标头名称和值不区分大小写。如果您执行的请求包含错误或缺失的标头,您将收到 HTTP 响应 401(未授权)。
测试
为了测试目的,Postmark 允许您发送测试电子邮件,但这些电子邮件实际上不会发送给收件人。此方法通常用于验证您的数据是否有效。您可以通过传递 POSTMARK_API_TEST
服务器 API 令牌来执行此操作。
header示例
X-Postmark-Server-Token: server token
JSON 消息格式
JSON 消息在 HTTP POST 请求的正文中传递。 From
和 To
字段能够接受名称,格式为 John Doe <email@example.com>
。您可以提供 HtmlBody
HTML 格式的消息、 TextBody
纯文本,或为多部分提供两者。多部分发送带有文本版本的 HTML,供不支持 HTML 的客户端使用。传递标头是可选的。
- 您必须拥有已注册并确认的发件人签名和发件人电子邮件。否则您将收到 HTTP 响应 422(无法处理的实体)。
- 可以
Name
通过 API 覆盖发件人签名中的 。如果您想在电子邮件中使用会员信息,同时保留您的From
电子邮件地址,这将非常有用。只需将姓名传递到From
字段 即可"From": "John Smith <sender@example.com>"
。这也适用于To
、Cc
和Bcc
字段。 To
您可以在、Cc
和 字段中传递多个收件人地址Bcc
。多个地址以逗号分隔,每封邮件最多可容纳 50 个收件人。这意味着所有收件人(To
、Cc
和Bcc
)合计不得超过 50 个。- 您可以使用该
Tag
属性对发送的电子邮件进行分类。这样您就可以获得所有标记的电子邮件的详细统计信息。每封邮件只能使用一个标签。标签的最大大小为 1000 个字符。 - 您可以使用该属性向电子邮件添加元数据
Metadata
。 - 对于带有标点符号的名称或标题的电子邮件地址,您应该按如下方式引用:
"To" : "\"Joe Receiver, Jr.\" <receiver@example.com>"
- 要发送带有自定义 Message-ID 标头的电子邮件,您可以将所需的值传递到标头数组中:
"Headers": [{"Name":"Message-ID", "Value": "<my-id-123@example.com>"}]
- 如果没有提供消息流 ID,MessageStream 将默认为出站消息流 ID(默认事务流)。
- 主题字符限制为 2000 个字符,而“发件人地址”字符限制为 255 个。为了计算长度,我们计算 UTF-16 代码点的数量,当 Unicode 点在 0000 – FFFF 范围内时,它们被计为 1,当 Unicode 点高于 FFFF 时,它们被计为 2。
JSON 消息格式示例
{
"From": "sender@example.com",
"To": "receiver@example.com",
"Cc": "copied@example.com",
"Bcc": "blank-copied@example.com",
"Subject": "Test",
"Tag": "Invitation",
"HtmlBody": "<b>Hello</b>",
"TextBody": "Hello",
"ReplyTo": "reply@example.com",
"Metadata": {
"Color":"blue",
"Client-Id":"12345"
},
"Headers": [
{
"Name": "CUSTOM-HEADER",
"Value": "value"
}
],
"TrackOpens": true,
"TrackLinks": "HtmlOnly",
"MessageStream": "outbound"
}
追踪开启
您可以使用三种方式激活电子邮件的打开跟踪:
- 为整个服务器打开跟踪
- 跟踪单封电子邮件的打开情况
具有开放跟踪的 API 请求示例
{
...
"TrackOpens" : true
}
跟踪链接
您可以启用链接跟踪来获取收件人在电子邮件中点击的链接的信息。可以按每条消息或每台服务器启用链接跟踪。
了解有关链接跟踪的更多信息。
带有链接跟踪的 API 请求示例
{
...
"TrackLinks" : "HtmlAndText"
}
附件
附件在 JSON 消息的数组中指定 Attachments
。然后可以将各个附件作为单独的对象存储在该数组中。
此 Name
字段是将显示给邮件收件人的实际文件名。为了消除传播病毒或间谍软件的可能性,我们不允许某些文件类型:
- 禁止的文件类型: vbs、exe、bin、bat、chm、com、cpl、crt、hlp、hta、inf、ins、isp、jse、lnk、mdb、pcd、pif、reg、scr、sct、shs、vbe、vba、wsf、wsh、wsl、msc、msi、msp、mst。
该 ContentType
字段是电子邮件客户端用来解释附件的 MIME 内容类型。
该 Content
字段存储文件的二进制数据,必须以 base64 编码的字符串形式传输。大多数编程语言和库都内置了此功能,例如 Java、 .NET、 PHP、 Ruby
限制:
- 如果检测到具有不允许的扩展名的文件类型,则该消息将被拒绝 – 或者如果使用 SMTP,您将收到 SMTP API 退回。
- 消息有一定的大小限制,如果超出将导致消息被拒绝:
- 和 每个最大可为 5MB
TextBody
。HtmlBody
- 邮件总大小(包括附件)最多可达 10MB。可以是单个附件,也可以是多个附件,但总大小不超过 10MB。请注意:Base64 编码的字符串可能会使您的数据看起来比实际大,但 Postmark 会在 Base64 编码后计算附件大小。
- 和 每个最大可为 5MB
- 我们建议从后台作业发送带有附件的电子邮件,而不是作为对同一 Web 请求处理程序中用户操作的响应。这是因为增加的邮件大小将需要更长时间才能提交到 Postmark 服务器。您的用户会因此而爱上您!
带附件的示例消息
{
...
"Attachments": [
{
"Name": "readme.txt",
"Content": "dGVzdCBjb250ZW50",
"ContentType": "text/plain"
},
{
"Name": "report.pdf",
"Content": "dGVzdCBjb250ZW50",
"ContentType": "application/octet-stream"
}
]
}
内联图像附件
Postmark 还允许您通过 HTML 消息发送内嵌图像。图像必须采用 base64 编码,并且字段 ContentID
必须与图像的 CID 匹配。
只要 CID 标签匹配,Postmark 就会自动将图像嵌入到 HTML 中。 注意: 如果您在消息中多次引用附加图像,则只需附加一次图像。Postmark 将按照 HTML 标记中引用图像的频率使用该图像。这将节省带宽,避免附件大小限制。
带有内嵌图像附件的示例消息
{
...
"Attachments": [
{
"Name": "bacon.jpg",
"Content": "/9j/4AAQSkZJRgABAgEAAAAAAAD/4",
"ContentType": "image/jpeg",
"ContentID": "cid:part1.01030607.06070005@gmail.com"
}
]
}
HTML 内联图像示例
<img src="cid:part1.01030607.06070005@gmail.com">
成功
如果一切顺利,您将收到一条类似示例的 JSON 消息。
该 MessageID
字段可用于登录您的系统。然后,它可用于将您发送的消息与您从退回 webhook 或退回 API 获得的可能退回相关联。
查看API 错误的完整列表 以了解更多详细信息。
示例 JSON 响应
{
"ErrorCode": 0,
"Message": "OK",
"MessageID": "b7bc2f4a-e38e-4336-af7d-e6c392c2f817",
"SubmittedAt": "2010-11-26T12:01:05.1794748-05:00",
"To": "receiver@example.com"
}
检索附件
Postmark 不以任何方式托管附件,因此无法通过 Postmark UI、API 或 webhook 检索附件。
发送批量电子邮件
POST
/email/batch
我们理解,处理量较大或处理时间受限的开发人员需要批量发送消息。为了方便使用,我们提供了一个批处理端点,允许您在单个 API 调用中发送最多 500 条格式正确的 Postmark 消息。如果您使用批量调用发送广播(批量)消息,请使用 MessageStream 字段设置您的发送流。
请注意,批处理端点每个 API 调用最多接受 500 条消息,有效负载大小最多为 50 MB(包括附件)。
批量消息的格式为包含多个消息请求的JSON数组,
批量请求示例可参见此处。
使用 curl 的示例请求
curl "https://api.postmarkapp.com/email/batch" \
-X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Postmark-Server-Token: server token" \
-d '[{
"From": "sender@example.com",
"To": "receiver1@example.com",
"Subject": "Postmark test #1",
"TextBody": "Hello dear Postmark user.",
"HtmlBody": "<html><body><strong>Hello</strong> dear Postmark user.</body></html>",
"MessageStream": "outbound"
},
{
"From": "sender@example.com",
"To": "receiver2@example.com",
"Subject": "Postmark test #2",
"TextBody": "Hello dear Postmark user.",
"HtmlBody": "<html><body><strong>Hello</strong> dear Postmark user.</body></html>",
"MessageStream": "outbound"
}
]'
回复
类似地,您将收到一个匹配的 JSON 数组,其中包含您在批量调用中发送的每个消息的响应。
查看API 错误的完整列表 以了解更多详细信息。