所有文章 > 学习各类API > 如何使用API发送电子邮件?
如何使用API发送电子邮件?

如何使用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>"。这也适用于ToCcBcc字段。 
  • 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 编码后计算附件大小。
  • 我们建议从后台作业发送带有附件的电子邮件,而不是作为对同一 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 错误的完整列表  以了解更多详细信息。

#你可能也喜欢这些API文章!