设置事件分发

本文介绍邮件推送服务如何通过集成阿里云事件总线服务,实现邮件投递结果的分发通知。

用户成功进行事件总线相关配置后,通过邮件推送服务发送的邮件,其投递结果将按照在事件总线中设置的事件分发规则,发送至指定的事件目标(钉钉、轻量消息队列、HTTP等),实现投递结果的异步获取。

下文将详细介绍如何完成事件分发设置。

邮件推送控制台开启事件分发功能

在邮件推送控制台打开事件分发开关。

b3070724625e6b3377fe779d96bf76ec

事件总线服务开通与访问授权

1.在阿里云首页搜索事件总线或 EventBridge,免费开通事件总线服务

image.png

image.png

image.png

image.png

创建事件规则

在控制台-事件总线-云服务专用事件总线-创建规则,创建邮件推送服务的事件分发规则,配置基本信息,填写规则名称和描述;

image

image.png

配置事件模式,事件源类型为阿里云官方事件源,事件源选择acs.dm,事件类型目前支持发送失败、发送成功、点击链接、打开邮件,用户可按需添加,未添加的事件类型会被过滤。

image

配置事件目标,选择服务类型(钉钉、轻量消息队列、HTTP等,相关文档:管理事件规则

image

img_2025-08-06_15-07-10

这里以轻量消息队列为例,指定发送到的目标队列(轻量消息队列服务的开通与队列的创建请参考下文“开通轻量消息队列并创建消息接收的队列”章节),消息体默认选择完整事件,不进行base64编码,重试和死信选型可按需设置,设置完成后点击创建规则。

image

规则创建完成后,可在事件总线概览中进行查看。

image.png

事件类型和修改方式

目前支持的事件类型

事件类型

type参数值

邮件投递失败

dm:Deliver:Fail

邮件投递成功

dm:Deliver:Succeed

邮件FBL举报数据

dm:Feedback:FblReport

邮件重新订阅数据

dm:Feedback:Subscribe 

邮件退订数据

dm:Feedback:UnSubscribe

点击事件

dm:Trace:Click

打开事件

dm:Trace:Open

地址校验灰名单异步结果

dm:Validator:GrayListResult

修改各类事件的统计

左侧导航栏点击事件规则-编辑事件模式-事件类型,可对事件类型进行修改。

image.png

image.png

打开或者点击事件的统计的前提

如果需要对邮件的打开和点击行为事件进行通知分发,前提是开启数据跟踪功能,详细操作可参考如何开启数据跟踪功能?

接收事件分发消息,验证链路已通

以上文流程设置的事件目标轻量消息队列为例,验证事件分发链路。

开通轻量消息队列并创建消息接收的队列

  1. 进入轻量消息队列控制台,若未开通轻量消息队列服务,则按引导先开通轻量消息队列服务。

  2. 单击左侧导航栏中队列,进入队列页面。

  3. 单击页面创建队列按钮,将会弹出新建队列对话框。

  4. 输入队列名称(队列名称用户可自由定义,本示例创建delivery-result-queue名称的队列),其他按默认值即可,然后单击确认。

image.png

触发事件分发并查看

使用邮件推送服务发送一封邮件后,在事件总线控制台查看到事件的追踪记录;image.png

image.png

image.png

查看事件分发目标的结果

打开轻量消息队列控制台,在队列列表选择事件总线目标配置的队列(案例中为delivery-result-queue)点击收发消息按钮,跳转至收发消息快速体验页面;

image.png

点击页面下方接收消息按钮,可查看到刚刚的事件消息,点击详情,可查看到对应的完整事件消息内容(可以看到事件ID与事件总线中的记录一致,事件即成功分发到了轻量消息队列);image.png

image.png

image.png

设置发信地址级事件分发示例

按照以上示例流程配置的事件分发对邮件推送服务下所有的发信域名和地址生效,用户可根据实际业务需求,修改事件规则的JSON串,来实现按照发信地址等过滤条件进行事件分发。

以下是指定发信地址test@hangzhou.dmtest.top进行邮件推送事件分发的示例,通过进行规则配置,使得只有从test@hangzhou.dmtest.top发出的邮件,其记录消息才会由事件总线分发到事件目标。

1.在创建事件规则时,在模式内容中指定事件模式的具体内容,对指定字段内容进行过滤。

image.png

本示例中,模式内容如下:

{
    "source": [
        "acs.dm"
    ],
    "type": [
        "dm:Deliver:Fail",
        "dm:Deliver:Succeed",
        "dm:Trace:Click",
        "dm:Trace:Open",
        "dm:Feedback:FblReport"
    ],
    "data": {
        "from": [
            "test@hangzhou.dmtest.top"
        ]
    }
}

这里是一个完整的事件消息体,用户可基于事件体的内容和结构,参考事件模式,编写事件规则的模式内容。

  • 模式内容中的所有字段名都必须存在于事件体中,否则此事件消息会被过滤。

  • 事件模式里的字段名必须和事件中的字段名具有相同嵌套结构。

  • 事件模式是逐个字符精确匹配的 ,需注意大小写,匹配过程中不会对字符串进行任何标准化的操作。

  • 要匹配的值遵循JSON规则:用引号引起来的字符串、数字以及不带引号的关键字truefalsenull

  • 事件模式支持OR的语义,事件模式匹配中各个Key支持AND语义,KeyValue值支持数组OR的语义。

以下是事件默认的消息体

邮件投递失败

邮件投递失败时,事件总线EventBridge接收到的示例事件如下所示。

{
  "data": {
    "header": {
      "X-Notify-Message-ID": "test******@******"
    },
    "env_id": "60000******",
    "account": "batch******@top",
    "from": "batch******@top",
    "rcpt": "xxx******@aliyun.com",
    "msg_id": "1df******@******",
    "channel_name": "bg:vip_*",
    "outbound_ip": "8.*.*.7",
    "send_time": "2024-04-29T11:07:04",
    "deliver_time": "2024-04-29T11:07:12",
    "status": "2",
    "event": "dm:Deliver:Fail",
    "region": "cn-hangzhou",
    "err_code": "554",
    "err_msg": "554  RCPT xxx******@aliyun.com dosn't exist",
    "failed_type": "SmtpNxBox",
    "esp": "*mail.com",
    "ip_pool_id": "10306c37-****-****-a82f-1dafb56a9dd2",
    "is_dedicated_ip": true,
    "tag": "xxxxx"
  },
  "id": "8734hhidu983hi457",
  "source": "acs:dm",
  "specversion": "1.0",
  "subject": "acs:dm:cn-hangzhou:{AccountId}:*",
  "time": "2024-04-29T11:07:12+08:00",
  "type": "dm:Deliver:Fail",
  "aliyunaccountid": "123456789098****",
  "aliyunpublishtime": "2024-04-29T11:07:13.179PRC",
  "aliyuneventbusname": "default",
  "aliyunregionid": "cn-hangzhou",
  "aliyunpublishaddr": "172.25.XX.XX"
}

data字段包含的参数解释如下表所示。

参数

类型

示例值

描述

header

Object

与电子邮件相关的头。

X-Notify-Message-ID

String

test****@example.com

自定义头X-Notify-Message-ID。

env_id

String

60000****

发送邮件时系统返回的邮件ID。

account

String

batch****@top

发件人的邮箱地址。

from

String

batch****@top

发件人的邮箱地址。

rcpt

String

a****@aliyun.com

收件人的邮箱地址。

msg_id

String

1df****@example.com

邮件的Message-ID字段。

channel_name

String

bg:vip_*

本次投递外发IP所在的通道名称。

outbound_ip

String

8.*.*.7

本次投递外发IP。

send_time

String

2024-04-29T11:07:04

邮件接收时间。

deliver_time

String

2024-04-29T11:07:12

邮件投递完成时间。

status

String

2

投递结果状态。

  • 0:成功。

  • 2:无效地址。

  • 3:接收方认为垃圾邮件。

  • 4:其他失败。

event

String

dm:Deliver:Fail

事件消息的类型。和type相同。

region

String

cn-hangzhou

事件发生的区域。

err_code

String

554

投递完成时接收方ESP返回的码。

err_msg

String

554 RCPT a****@aliyun.com dosn't exist

投递完成时接收方ESP返回的信息。

failed_type

String

SmtpNxBox

投递结果分类。

esp

String

*mail.com

收信人的电子邮件提供商分类。

ip_pool_id

String

10306c37-****-****-a82f-1dafb56a9dd2

发送邮件使用的IPID。

is_dedicated_ip

Boolean

true

是否使用了独立IP。

tag

String

xxxxx

发送邮件使用的tag。

邮件投递成功

邮件投递成功时,事件总线EventBridge接收到的示例事件如下所示。

{
  "data": {
    "header": {
      "X-Notify-Message-ID": "test******@******"
    },
    "env_id": "60000******",
    "account": "batch******@top",
    "from": "batch******@top",
    "rcpt": "xxx******@aliyun.com",
    "msg_id": "1df******@******",
    "channel_name": "bg:vip_*",
    "outbound_ip": "8.*.*.7",
    "send_time": "2024-04-29T11:07:04",
    "deliver_time": "2024-04-29T11:07:12",
    "status": "0",
    "event": "dm:Deliver:Succeed",
    "region": "cn-hangzhou",
    "err_code": "250",
    "err_msg": "250 Send Mail OK",
    "failed_type": "SendOk",
    "esp": "*mail.com",
    "ip_pool_id": "10306c37-****-****-a82f-1dafb56a9dd2",
    "is_dedicated_ip": true,
    "tag": "xxxxx"
  },
  "id": "8734hhidu983hi457",
  "source": "acs:dm",
  "specversion": "1.0",
  "subject": "acs:dm:cn-hangzhou:{AccountId}:*",
  "time": "2024-04-29T11:07:12+08:00",
  "type": "dm:Deliver:Succeed",
  "aliyunaccountid": "123456789098****",
  "aliyunpublishtime": "2024-04-29T11:07:13.179PRC",
  "aliyuneventbusname": "default",
  "aliyunregionid": "cn-hangzhou",
  "aliyunpublishaddr": "172.25.XX.XX"
}

关于data字段包含的参数解释,请参见参数解析

邮件FBL举报数据

邮件FBL举报数据时,事件总线EventBridge接收到的示例事件如下所示。

{
    "id": "45ef4dewdwe1-7c35-447a-bd93-fab****",
    "source": "acs.dm",
    "specversion": "1.0",
    "subject": "acs.dm:cn-hangzhou:123456789098****:215672",
    "time": "2020-11-19T21:04:41+08:00",
    "type": "dm:Feedback:FblReport",
    "aliyunaccountid": "123456789098****",
    "aliyunpublishtime": "2020-11-19T21:04:42Z",
    "aliyuneventbusname": "default",
    "aliyunregionid": "cn-hangzhou",
    "aliyunpublishaddr": "172.25.XX.XX",
    "data": {
        "send_time": "1726821644",
        "send_email": "from@xxx.com",
        "block_email": "to@yyy.com",
        "subject": "Hello Mr.xxx",
        "message_id": "<msgid***@xxx.com>",
        "block_time": "1726821667",
        "fbl_isp": "outlook**",
        "fingerprint": "SMTPD_abc****"
    }
}

data字段包含的参数解释如下表所示。

参数

类型

示例值

描述

send_time

String

1726821644

邮件发送时间。

send_email

String

from@xxx.com

发件人邮箱地址。

block_email

String

to@yyy.com

被拦截的收件人邮箱地址。

subject

String

Hello Mr.xxx

邮件主题。

message_id

String

<msgid***@xxx.com>

邮件的唯一标识符。

block_time

String

1726821667

邮件被拦截的时间。

fbl_isp

String

outlook**

发件人使用的邮件服务提供商(ISP)。

fingerprint

String

SMTPD_abc****

邮件的特征指纹。

邮件重新订阅数据

邮件重新订阅数据时,事件总线EventBridge接收到的示例事件如下所示。

{
    "id": "45ef4dewdwe1-7c35-447a-bd93-fab****",
    "source": "acs.dm",
    "specversion": "1.0",
    "subject": "acs.dm:cn-hangzhou:123456789098****:215672",
    "time": "2020-11-19T21:04:41+08:00",
    "type": "dm:Feedback:Subscribe",
    "aliyunaccountid": "123456789098****",
    "aliyunpublishtime": "2020-11-19T21:04:42Z",
    "aliyuneventbusname": "default",
    "aliyunregionid": "cn-hangzhou",
    "aliyunpublishaddr": "172.25.XX.XX",
    "data": {
        "operate_time": "2024-04-29T11:25:48",
        "envid": "6000*********",
        "from": "from@xxx.com",
        "rcpt": "to@yyy.com",
        "client_ip": "102.**.**.1"
    }
}

data字段包含的参数解释如下表所示。

参数

类型

示例值

描述

operate_time

String

2024-04-29T11:25:48

事件操作时间(UTC时间)

env_id

String

6000*********

发送邮件时系统返回的邮件ID

from

String

from@xxx.com

发件人地址

rcpt

String

to@yyy.com

收件人地址

client_ip

String

102.**.**.1

打开事件的客户端IP

邮件退订数据

邮件退订数据时,事件总线EventBridge接收到的示例事件如下所示。

{
    "id": "45ef4dewdwe1-7c35-447a-bd93-fab****",
    "source": "acs.dm",
    "specversion": "1.0",
    "subject": "acs.dm:cn-hangzhou:123456789098****:215672",
    "time": "2020-11-19T21:04:41+08:00",
    "type": "dm:Feedback:UnSubscribe",
    "aliyunaccountid": "123456789098****",
    "aliyunpublishtime": "2020-11-19T21:04:42Z",
    "aliyuneventbusname": "default",
    "aliyunregionid": "cn-hangzhou",
    "aliyunpublishaddr": "172.25.XX.XX",
    "data": {
        "operate_time": "2024-04-29T11:25:48",
        "envid": "6000*********",
        "from": "from@xxx.com",
        "rcpt": "to@yyy.com",
        "client_ip": "102.**.**.1"
    }
}

data字段包含的参数解释如下表所示。

参数

类型

示例值

描述

operate_time

String

2024-04-29T11:25:48

事件操作时间(UTC时间)

env_id

String

6000*********

发送邮件时系统返回的邮件ID

from

String

from@xxx.com

发件人地址

rcpt

String

to@yyy.com

收件人地址

client_ip

String

102.**.**.1

打开事件的客户端IP

点击事件

点击事件时,事件总线EventBridge接收到的示例事件如下所示。

{
    "id": "45ef4dewdwe1-7c35-447a-bd93-fab****",
    "source": "acs.dm",
    "specversion": "1.0",
    "subject": "acs.dm:cn-hangzhou:123456789098****:215672",
    "time": "2020-11-19T21:04:41+08:00",
    "type": "dm:Trace:Click",
    "aliyunaccountid": "123456789098****",
    "aliyunpublishtime": "2020-11-19T21:04:42Z",
    "aliyuneventbusname": "default",
    "aliyunregionid": "cn-hangzhou",
    "aliyunpublishaddr": "172.25.XX.XX",
    "data": {
        "operate_time": "2024-04-29T11:25:48",
        "client_ip": "202.**.**.1",
        "env_id": "60000******",
        "from": "batch******@top",
        "rcpt": "xxx******@aliyun.com",
        "msg_id": "1df******@******",
        "event": "dm:Trace:Click",
        "region": "cn-hangzhou",
        "url": "https://www.aliyun.com",
        "outbound_ip": "102.**.**.1",
        "esp": "*mail.com",
        "ip_pool_id": "10306c37-****-****-a82f-1dafb56a9dd2",
        "is_dedicated_ip": true,
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X ****) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1",
        "tag": "xxxxx"
    }
}

data字段包含的参数解释如下表所示。

参数

类型

示例值

描述

operate_time

String

2024-04-29T11:25:48

事件操作时间。

client_ip

String

202.**.**.1

点击事件的客户端IP。

env_id

String

60000******

发送邮件时系统返回的邮件ID。

from

String

batch****@top

发件人地址。

rcpt

String

xxx******@aliyun.com

收件人地址。

msg_id

String

1df******@******

邮件中的Message-ID字段。

event

String

dm:Trace:Click

事件类型。

region

String

cn-hangzhou

事件发生的区域。

url

String

https://www.aliyun.com

点击的URL。

outbound_ip

String

102.**.**.1

发送邮件的出口IP。

esp

String

*mail.com

收信人的电子邮件提供商分类。

ip_pool_id

String

10306c37-****-****-a82f-1dafb56a9dd2

发送邮件使用的IP池的ID。

is_dedicated_ip

Boolean

true

是否使用了独立IP。

user_agent

String

Mozilla/5.0 (Macintosh; Intel Mac OS X ****) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1

点击事件的UserAgent。

tag

String

xxxxx

发送邮件使用的tag。

打开事件

打开事件时,事件总线EventBridge接收到的示例事件如下所示。

{
    "id": "45ef4dewdwe1-7c35-447a-bd93-fab****",
    "source": "acs.dm",
    "specversion": "1.0",
    "subject": "acs.dm:cn-hangzhou:123456789098****:215672",
    "time": "2020-11-19T21:04:41+08:00",
    "type": "dm:Trace:Open",
    "aliyunaccountid": "123456789098****",
    "aliyunpublishtime": "2020-11-19T21:04:42Z",
    "aliyuneventbusname": "default",
    "aliyunregionid": "cn-hangzhou",
    "aliyunpublishaddr": "172.25.XX.XX",
    "data": {
        "operate_time": "2024-04-29T11:25:48",
        "client_ip": "202.**.**.1",
        "env_id": "60000******",
        "from": "batch******@top",
        "rcpt": "xxx******@aliyun.com",
        "msg_id": "1df******@******",
        "event": "dm:Trace:Open",
        "region": "cn-hangzhou",
        "outbound_ip": "102.**.**.1",
        "esp": "*mail.com",
        "ip_pool_id": "10306c37-****-****-a82f-1dafb56a9dd2",
        "is_dedicated_ip": true,
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X ****) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1",
        "tag": "xxxxx"
    }
}

data字段包含的参数解释如下表所示。

参数

类型

示例值

描述

operate_time

String

2024-04-29T11:25:48

事件操作时间。

client_ip

String

192.168.XX.XX

打开事件的客户端IP。

env_id

String

60000******

发送邮件时系统返回的邮件ID。

from

String

batch****@top

发件人地址。

rcpt

String

a****@aliyun.com

收件人地址。

msg_id

String

1df****@example.com

邮件中的Message-ID字段。

event

String

dm:Trace:Click

事件类型。

region

String

cn-hangzhou

事件发生的区域。

outbound_ip

String

102.**.**.1

发送邮件的出口IP。

esp

String

*mail.com

收信人的电子邮件提供商分类。

ip_pool_id

String

10306c37-****-****-a82f-1dafb56a9dd2

发送邮件使用的IP池的ID。

is_dedicated_ip

Boolean

true

是否使用了独立IP。

user_agent

String

Mozilla/5.0 (Macintosh; Intel Mac OS X ****) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1

打开事件的UserAgent。

tag

String

xxxxx

发送邮件使用的tag。

地址校验灰名单异步结果

地址校验灰名单异步结果时,事件总线EventBridge接收到的示例事件如下所示。

{
    "id": "45ef4dewdwe1-7c35-447a-bd93-fab****",
    "source": "acs.dm",
    "specversion": "1.0",
    "subject": "acs.dm:cn-hangzhou:123456789098****:215672",
    "time": "2020-11-19T21:04:41+08:00",
    "type": "dm:Validator:GrayListResult",
    "aliyunaccountid": "123456789098****",
    "aliyunpublishtime": "2020-11-19T21:04:42Z",
    "aliyuneventbusname": "default",
    "aliyunregionid": "cn-hangzhou",
    "aliyunpublishaddr": "172.25.XX.XX",
    "data": {
        "request_id": "45ef4dewdwe1-7c35-447a-bd93-fab****",
        "submission_time": "1763541726",
        "completion_time": "1763541793",
        "email": "xxxxxx@yyy.com",
        "status": "INVALID",
        "sub_status": "MAILBOX_NOT_EXISTS",
        "provider": "XXXX",
        "is_free_mail": false,
        "local_part": "xxxxxx",
        "domain_part": "yyy.com"
    }
}

data字段包含的参数解释如下表所示。

参数

类型

示例值

描述

request_id

String

45ef4dewdwe1-7c35-447a-bd93-fab****

提交请求时OPENAPI返回的请求ID

submission_time

String

1763541726

提交校验请求时间(UTC时间)

completion_time

String

1763541793

校验完成时间(UTC时间)

email

String

xxxxxx@yyy.com

校验的电子邮件地址

status

String

INVALID

校验得到的电子邮件地址状态

sub_status

String

MAILBOX_NOT_EXISTS

校验得到的电子邮件地址子状态,是对状态的详细描述

provider

String

XXXX

地址的电子邮件提供商分类

is_free_mail

Boolean

false

地址是否为免费邮箱

local_part

String

xxxxxx

语法校验解析得到的电子邮件地址的本地部分(经过小写化与去掉+号部分)

domain_part

String

yyy.com

语法校验解析得到的电子邮件地址的域名部分(经过小写化)

相关文档:邮件推送事件

说明

事件详情里的时间字段统一是UTC时间格式

2.进行发信验证,通过test@hangzhou.dmtest.top发送一封邮件;

image.png

3.在轻量消息队列的队列中(本示例和设置事件分发流程一样,采用轻量消息队列作为事件目标接收事件消息,用户可自行设置事件目标)可查询到此条消息。

image.png

4.使用其他发信地址发信后,在事件总线-事件追踪中查询到了该事件的详情,但在轻量消息队列侧,不会收到此条事件消息,即实现了指定发信地址的回调通知。image.png

image.png

image.png