网淘吧来吧,欢迎您!

SendGrid

2026-03-31 新闻来源:网淘吧 围观:17
电脑广告
手机广告

SendGrid

通过托管的OAuth认证访问SendGrid API。发送交易和营销邮件,管理联系人、模板、退订,并分析邮件性能。

快速开始

# Get user profile
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/sendgrid/v3/user/profile')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

基础URL

https://gateway.maton.ai/sendgrid/{native-api-path}

{native-api-path}替换为实际的SendGrid API端点路径。网关将请求代理到api.sendgrid.com并自动注入您的OAuth令牌。

SendGrid

认证

所有请求都需要在Authorization头部中包含Maton API密钥:

Authorization: Bearer $MATON_API_KEY

环境变量:将您的API密钥设置为MATON_API_KEY

export MATON_API_KEY="YOUR_API_KEY"

获取您的API密钥

  1. 登录或在maton.ai
  2. 创建一个账户前往
  3. maton.ai/settings

复制您的API密钥

https://ctrl.maton.ai管理您的 SendGrid OAuth 连接。

列出连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=sendgrid&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

创建连接

python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'sendgrid'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

获取连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

响应:

{
  "connection": {
    "connection_id": "943c6cd5-9a56-4f5b-8adf-ecd4a140049f",
    "status": "ACTIVE",
    "creation_time": "2026-02-11T10:53:41.817938Z",
    "last_updated_time": "2026-02-11T10:54:05.554084Z",
    "url": "https://connect.maton.ai/?session_token=...",
    "app": "sendgrid",
    "metadata": {}
  }
}

在浏览器中打开返回的URL以完成 OAuth 授权。

删除连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

指定连接

如果您有多个 SendGrid 连接,请使用Maton-Connection请求头来指定要使用哪一个:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/sendgrid/v3/user/profile')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '943c6cd5-9a56-4f5b-8adf-ecd4a140049f')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

如果省略,网关将使用默认的(最早的)活动连接。

API 参考

所有 SendGrid API 端点都遵循此模式:

/sendgrid/v3/{resource}

邮件发送

发送邮件

POST /sendgrid/v3/mail/send
Content-Type: application/json

{
  "personalizations": [
    {
      "to": [{"email": "recipient@example.com", "name": "Recipient"}],
      "subject": "Hello from SendGrid"
    }
  ],
  "from": {"email": "sender@example.com", "name": "Sender"},
  "content": [
    {
      "type": "text/plain",
      "value": "This is a test email."
    }
  ]
}

使用 HTML 内容:

POST /sendgrid/v3/mail/send
Content-Type: application/json

{
  "personalizations": [
    {
      "to": [{"email": "recipient@example.com"}],
      "subject": "HTML Email"
    }
  ],
  "from": {"email": "sender@example.com"},
  "content": [
    {
      "type": "text/html",
      "value": "<h1>Hello</h1><p>This is an HTML email.</p>"
    }
  ]
}

使用模板:

POST /sendgrid/v3/mail/send
Content-Type: application/json

{
  "personalizations": [
    {
      "to": [{"email": "recipient@example.com"}],
      "dynamic_template_data": {
        "first_name": "John",
        "order_id": "12345"
      }
    }
  ],
  "from": {"email": "sender@example.com"},
  "template_id": "d-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

用户资料

获取用户资料

GET /sendgrid/v3/user/profile

响应:

{
  "type": "user",
  "userid": 59796657
}

获取账户详情

GET /sendgrid/v3/user/account

营销联系人

列出联系人

GET /sendgrid/v3/marketing/contacts

响应:

{
  "result": [],
  "contact_count": 0,
  "_metadata": {
    "self": "https://api.sendgrid.com/v3/marketing/contacts"
  }
}

搜索联系人

POST /sendgrid/v3/marketing/contacts/search
Content-Type: application/json

{
  "query": "email LIKE '%@example.com%'"
}

添加/更新联系人

PUT /sendgrid/v3/marketing/contacts
Content-Type: application/json

{
  "contacts": [
    {
      "email": "contact@example.com",
      "first_name": "John",
      "last_name": "Doe"
    }
  ]
}

响应:

{
  "job_id": "2387e363-4104-4225-8960-4a5758492351"
}

注意:联系人操作是异步的。请使用任务状态端点来检查进度。

获取导入任务状态

GET /sendgrid/v3/marketing/contacts/imports/{job_id}

响应:

{
  "id": "2387e363-4104-4225-8960-4a5758492351",
  "status": "pending",
  "job_type": "upsert_contacts",
  "results": {
    "requested_count": 1,
    "created_count": 1
  },
  "started_at": "2026-02-11T11:00:14Z"
}

删除联系人

DELETE /sendgrid/v3/marketing/contacts?ids=contact_id_1,contact_id_2

按ID获取联系人

GET /sendgrid/v3/marketing/contacts/{contact_id}

按邮箱获取联系人

POST /sendgrid/v3/marketing/contacts/search/emails
Content-Type: application/json

{
  "emails": ["contact@example.com"]
}

营销列表

列出所有列表

GET /sendgrid/v3/marketing/lists

响应:

{
  "result": [],
  "_metadata": {
    "self": "https://api.sendgrid.com/v3/marketing/lists?page_size=100&page_token="
  }
}

创建列表

POST /sendgrid/v3/marketing/lists
Content-Type: application/json

{
  "name": "My Contact List"
}

响应:

{
  "name": "My Contact List",
  "id": "b050f139-4231-47c8-bf32-94ad76376d3b",
  "contact_count": 0,
  "_metadata": {
    "self": "https://api.sendgrid.com/v3/marketing/lists/b050f139-4231-47c8-bf32-94ad76376d3b"
  }
}

按ID获取列表

GET /sendgrid/v3/marketing/lists/{list_id}

更新列表

PATCH /sendgrid/v3/marketing/lists/{list_id}
Content-Type: application/json

{
  "name": "Updated List Name"
}

删除列表

DELETE /sendgrid/v3/marketing/lists/{list_id}

将联系人添加到列表

PUT /sendgrid/v3/marketing/contacts
Content-Type: application/json

{
  "list_ids": ["list_id"],
  "contacts": [
    {"email": "contact@example.com"}
  ]
}

分段

列出分段

GET /sendgrid/v3/marketing/segments

创建分段

POST /sendgrid/v3/marketing/segments
Content-Type: application/json

{
  "name": "Active Users",
  "query_dsl": "email_clicks > 0"
}

通过ID获取分段

GET /sendgrid/v3/marketing/segments/{segment_id}

删除分段

DELETE /sendgrid/v3/marketing/segments/{segment_id}

模板

列出模板

GET /sendgrid/v3/templates

带生成过滤器:

GET /sendgrid/v3/templates?generations=dynamic

创建模板

POST /sendgrid/v3/templates
Content-Type: application/json

{
  "name": "My Template",
  "generation": "dynamic"
}

响应:

{
  "id": "d-ffcdb43ed8a04beba48a702e1717ddb5",
  "name": "My Template",
  "generation": "dynamic",
  "updated_at": "2026-02-11 11:00:20",
  "versions": []
}

通过ID获取模板

GET /sendgrid/v3/templates/{template_id}

更新模板

PATCH /sendgrid/v3/templates/{template_id}
Content-Type: application/json

{
  "name": "Updated Template Name"
}

删除模板

DELETE /sendgrid/v3/templates/{template_id}

创建模板版本

POST /sendgrid/v3/templates/{template_id}/versions
Content-Type: application/json

{
  "name": "Version 1",
  "subject": "{{subject}}",
  "html_content": "<html><body><h1>Hello {{name}}</h1></body></html>",
  "active": 1
}

响应:

{
  "id": "54230a99-1e89-4edf-821d-d4925b40c64b",
  "template_id": "d-ffcdb43ed8a04beba48a702e1717ddb5",
  "active": 1,
  "name": "Version 1",
  "html_content": "<html><body><h1>Hello {{name}}</h1></body></html>",
  "plain_content": "Hello {{name}}",
  "generate_plain_content": true,
  "subject": "{{subject}}",
  "editor": "code",
  "thumbnail_url": "//..."
}

发件人

列出发件人

GET /sendgrid/v3/senders

创建发件人

POST /sendgrid/v3/senders
Content-Type: application/json

{
  "nickname": "My Sender",
  "from": {"email": "sender@example.com", "name": "Sender Name"},
  "reply_to": {"email": "reply@example.com", "name": "Reply To"},
  "address": "123 Main St",
  "city": "San Francisco",
  "country": "USA"
}

响应:

{
  "id": 8513177,
  "nickname": "My Sender",
  "from": {"email": "sender@example.com", "name": "Sender Name"},
  "reply_to": {"email": "reply@example.com", "name": "Reply To"},
  "address": "123 Main St",
  "city": "San Francisco",
  "country": "USA",
  "verified": {"status": false, "reason": null},
  "updated_at": 1770786031,
  "created_at": 1770786031,
  "locked": false
}

注意:使用前需要进行发件人验证。请检查已验证状态

通过ID获取发件人

GET /sendgrid/v3/senders/{sender_id}

更新发件人

PATCH /sendgrid/v3/senders/{sender_id}
Content-Type: application/json

{
  "nickname": "Updated Sender Name"
}

删除发件人

DELETE /sendgrid/v3/senders/{sender_id}

退订列表

退信

# List bounces
GET /sendgrid/v3/suppression/bounces

# Get bounce by email
GET /sendgrid/v3/suppression/bounces/{email}

# Delete bounces
DELETE /sendgrid/v3/suppression/bounces
Content-Type: application/json

{
  "emails": ["bounce@example.com"]
}

拦截

# List blocks
GET /sendgrid/v3/suppression/blocks

# Get block by email
GET /sendgrid/v3/suppression/blocks/{email}

# Delete blocks
DELETE /sendgrid/v3/suppression/blocks
Content-Type: application/json

{
  "emails": ["blocked@example.com"]
}

无效邮箱

# List invalid emails
GET /sendgrid/v3/suppression/invalid_emails

# Delete invalid emails
DELETE /sendgrid/v3/suppression/invalid_emails
Content-Type: application/json

{
  "emails": ["invalid@example.com"]
}

垃圾邮件举报

# List spam reports
GET /sendgrid/v3/suppression/spam_reports

# Delete spam reports
DELETE /sendgrid/v3/suppression/spam_reports
Content-Type: application/json

{
  "emails": ["spam@example.com"]
}

全局退订

# List global unsubscribes
GET /sendgrid/v3/suppression/unsubscribes

# Add to global unsubscribes
POST /sendgrid/v3/asm/suppressions/global
Content-Type: application/json

{
  "recipient_emails": ["unsubscribe@example.com"]
}

退订组 (ASM)

列表组

GET /sendgrid/v3/asm/groups

创建组

POST /sendgrid/v3/asm/groups
Content-Type: application/json

{
  "name": "Weekly Newsletter",
  "description": "Weekly newsletter updates"
}

响应:

{
  "name": "Weekly Newsletter",
  "id": 122741,
  "description": "Weekly newsletter updates",
  "is_default": false
}

按ID获取组

GET /sendgrid/v3/asm/groups/{group_id}

更新组

PATCH /sendgrid/v3/asm/groups/{group_id}
Content-Type: application/json

{
  "name": "Updated Group Name"
}

删除组

DELETE /sendgrid/v3/asm/groups/{group_id}

向组添加退订项

POST /sendgrid/v3/asm/groups/{group_id}/suppressions
Content-Type: application/json

{
  "recipient_emails": ["user@example.com"]
}

列出组内退订项

GET /sendgrid/v3/asm/groups/{group_id}/suppressions

统计

获取全局统计

GET /sendgrid/v3/stats?start_date=2026-02-01

结束日期:

GET /sendgrid/v3/stats?start_date=2026-02-01&end_date=2026-02-28

响应:

[
  {
    "date": "2026-02-01",
    "stats": [
      {
        "metrics": {
          "blocks": 0,
          "bounce_drops": 0,
          "bounces": 0,
          "clicks": 0,
          "deferred": 0,
          "delivered": 0,
          "invalid_emails": 0,
          "opens": 0,
          "processed": 0,
          "requests": 0,
          "spam_report_drops": 0,
          "spam_reports": 0,
          "unique_clicks": 0,
          "unique_opens": 0,
          "unsubscribe_drops": 0,
          "unsubscribes": 0
        }
      }
    ]
  }
]

分类统计

GET /sendgrid/v3/categories/stats?start_date=2026-02-01&categories=category1,category2

邮箱提供商统计

GET /sendgrid/v3/mailbox_providers/stats?start_date=2026-02-01

浏览器统计

GET /sendgrid/v3/browsers/stats?start_date=2026-02-01

API密钥

列出API密钥

GET /sendgrid/v3/api_keys

创建API密钥

{
  "result": [
    {
      "name": "MatonTest",
      "api_key_id": "WJBgv5EKR8y0nn2F8Qfk5w"
    }
  ]
}

通过ID获取API密钥

POST /sendgrid/v3/api_keys
Content-Type: application/json

{
  "name": "New API Key",
  "scopes": ["mail.send", "alerts.read"]
}

更新API密钥

GET /sendgrid/v3/api_keys/{api_key_id}

删除API密钥

PATCH /sendgrid/v3/api_keys/{api_key_id}
Content-Type: application/json

{
  "name": "Updated Key Name"
}

分页

DELETE /sendgrid/v3/api_keys/{api_key_id}

SendGrid为营销端点使用基于令牌的分页:

响应包括:

GET /sendgrid/v3/marketing/lists?page_size=100&page_token={token}

对于抑制端点,使用

{
  "result": [...],
  "_metadata": {
    "self": "https://api.sendgrid.com/v3/marketing/lists?page_size=100&page_token=",
    "next": "https://api.sendgrid.com/v3/marketing/lists?page_size=100&page_token=abc123"
  }
}

limitoffset代码示例

GET /sendgrid/v3/suppression/bounces?limit=100&offset=0

JavaScript

Python

// Send an email
const response = await fetch(
  'https://gateway.maton.ai/sendgrid/v3/mail/send',
  {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      personalizations: [{
        to: [{email: 'recipient@example.com'}],
        subject: 'Hello'
      }],
      from: {email: 'sender@example.com'},
      content: [{type: 'text/plain', value: 'Hello World'}]
    })
  }
);

注意事项

import os
import requests

# Get email stats
response = requests.get(
    'https://gateway.maton.ai/sendgrid/v3/stats',
    headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
    params={'start_date': '2026-02-01'}
)
data = response.json()
for day in data:
    metrics = day['stats'][0]['metrics']
    print(f"{day['date']}: {metrics['delivered']} delivered, {metrics['opens']} opens")

所有请求使用JSON内容类型

  • 日期格式为YYYY-MM-DD
  • 动态模板的模板ID以
  • d-开头
  • 邮件发送成功时返回202 Accepted(而非200)
  • 营销联系人操作是异步的 - 请使用任务状态端点
  • 抑制端点支持通过start_timeend_time(Unix时间戳)进行日期过滤
  • 重要提示:使用curl命令时,如果URL包含方括号,请使用curl -g以禁用通配符解析
  • 重要提示:当通过管道将curl输出传递给jq或其他命令时,某些shell环境中可能无法正确展开环境变量,例如$MATON_API_KEY 错误处理

状态码

含义400
请求错误或验证失败401
Maton API密钥无效或缺失403
权限不足404
资源未找到Resource not found
429请求频率受限
500内部服务器错误

故障排除:API 密钥问题

  1. 检查是否已设置MATON_API_KEY环境变量:
echo $MATON_API_KEY
  1. 通过列出连接来验证 API 密钥是否有效:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

故障排除:无效的应用名称

  1. 请确保您的 URL 路径以sendgrid开头。例如:
  • 正确示例:https://gateway.maton.ai/sendgrid/v3/user/profile
  • 错误示例:https://gateway.maton.ai/v3/user/profile

资源

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏

文章底部电脑广告
手机广告位-内容正文底部
上一篇:BrainRepo 下一篇:Reve AI Image Generation

相关文章

您是本站第382970名访客 今日有395篇新文章/评论