Integre o DirectMail ao EventBridge para rotear notificações de entrega de e-mail para destinos como DingTalk, Message Queue for Apache RocketMQ e endpoints HTTP.
Após a configuração do barramento de eventos, os resultados de entrega dos e-mails enviados pelo DirectMail são roteados para os destinos especificados (como DingTalk, Message Queue for Apache RocketMQ e HTTP) conforme suas regras de roteamento. Isso permite recuperar os resultados de entrega de forma assíncrona.
Siga as etapas abaixo para configurar o roteamento de eventos.
Ativar distribuição de eventos
Ative a opção de notificação de eventos no console do DirectMail.

Ativar e autorizar o EventBridge
Pesquise por EventBridge na página inicial do Alibaba Cloud e ative o serviço gratuitamente.


Criar uma regra de evento
No console do EventBridge, acesse o barramento de eventos para serviços em nuvem > Crie uma regra. Insira um nome e uma descrição para a regra do DirectMail.

Configure o padrão de evento. Selecione Alibaba Cloud official event source como tipo de origem do evento e acs.dm como origem do evento. Tipos de evento suportados: Send Failure, Send Success, Link Click e Email Open. Adicione os tipos de evento conforme necessário; os tipos não suportados são filtrados automaticamente.
Para configurar o destino do evento, selecione um tipo de serviço como DingTalk, Message Service (MNS) ou HTTP. Para mais detalhes, consulte Gerenciar regras de evento.
Este exemplo utiliza o Message Queue for MQTT como destino do evento. Especifique a fila de destino. (Para ativar o Message Queue for MQTT e criar uma fila, siga a seção "Ativar o Message Queue for MQTT e criar uma fila de recebimento" abaixo.) O corpo da mensagem padrão é o evento completo sem codificação Base64. Configure as opções de nova tentativa e carta morta conforme necessário e clique em Crie uma regra.
Após criar a regra, visualize-a no console do EventBridge.

Tipos de evento e modificações
Tipos de evento suportados
|
Tipo de evento |
Valor do parâmetro type |
|
dm:Deliver:Fail |
|
|
dm:Deliver:Succeed |
|
|
dm:Feedback:FblReport |
|
|
dm:Feedback:Subscribe |
|
|
dm:Feedback:UnSubscribe |
|
|
dm:Trace:Click |
|
|
dm:Trace:Open |
|
|
Resultado assíncrono da validação de endereço em lista cinza |
dm:Validator:GrayListResult |
O EventBridge recebe eventos por 30 dias após o envio de um e-mail.
Configurar estatísticas para tipos de evento
Clique em Event Rules > Edit Event Pattern > Event Type para modificar o tipo de evento.


Pré-requisitos para rastreamento de aberturas e cliques
Para receber notificações sobre eventos de abertura e clique em e-mails, ative primeiro o rastreamento de dados. Consulte Ativar rastreamento de dados.
Receber mensagens de evento e verificar links
Este exemplo utiliza a fila de mensagens leve configurada anteriormente para validar o caminho de entrega do evento.
Configurar uma fila de mensagens leve
Acesse o console do Message Queue for MQTT. Caso o Message Queue for MQTT não esteja ativado, siga as instruções na tela para ativá-lo.
No painel de navegação à esquerda, clique em Queues.
Clique em Create Queue.
Insira um nome para a fila, como
delivery-result-queue. Mantenha as configurações padrão e clique em OK.

Acionar distribuição de eventos
Após enviar um e-mail pelo DirectMail, visualize o rastro do evento no console do EventBridge.


Resultados no destino do evento
No console da fila de mensagens leve, selecione a fila configurada como destino do EventBridge (delivery-result-queue) e clique em Send and Receive Messages.

Clique em Receive Messages para visualizar a mensagem do evento e, em seguida, clique em Details para ver o conteúdo completo. A entrega no Message Service é confirmada se o ID do evento corresponder ao registro do EventBridge.


Exemplo: Configurar encaminhamento de eventos por endereço do remetente
A distribuição de eventos configurada acima aplica-se a todos os domínios e endereços de envio no DirectMail. É possível modificar o JSON da regra de evento para filtrar eventos por condições específicas, como um endereço de remetente.
O exemplo a seguir configura uma regra que roteia eventos do DirectMail do endereço de remetente test@hangzhou.dmtest.top para um destino de evento.
Ao criar uma regra de evento, especifique um padrão de evento para filtrar eventos por seus campos.

Este exemplo utiliza o seguinte padrão:
{
"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"
]
}
}
Abaixo está um corpo completo de mensagem de evento. Crie um padrão de evento com base em seu conteúdo e estrutura.
Todos os nomes de campo no padrão de evento devem existir no corpo do evento.
A estrutura aninhada dos nomes de campo no padrão de evento deve corresponder à do evento.
A correspondência é exata, caractere por caractere, e diferencia maiúsculas de minúsculas. As strings não são normalizadas.
Os valores no padrão devem seguir as regras JSON: strings entre aspas, números e as palavras-chave sem aspas true, false e null.
Os padrões de evento suportam lógica AND e OR. Chaves (key) diferentes dentro de um padrão usam lógica AND. Uma matriz de valores para uma key usa lógica OR.
Corpo padrão da mensagem de evento:
Falha na entrega de e-mail
Quando há falha na entrega de um e-mail, o EventBridge recebe um evento semelhante ao exemplo a seguir.
{
"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"
}
A tabela a seguir descreve os parâmetros no campo data.
Parâmetro | Tipo | Exemplo | Descrição |
header | Object | Cabeçalhos relacionados ao e-mail. | |
X-Notify-Message-ID | String | test****@example.com | Cabeçalho personalizado X-Notify-Message-ID. |
env_id | String | 60000**** | ID do e-mail retornado pelo sistema no momento do envio. |
account | String | batch****@top | Endereço de e-mail do remetente. |
from | String | batch****@top | Endereço de e-mail do remetente. |
rcpt | String | a****@aliyun.com | Endereço de e-mail do destinatário. |
msg_id | String | 1df****@example.com | Campo Message-ID do e-mail. |
channel_name | String | bg:vip_* | Nome do canal ao qual pertence o IP de saída desta entrega. |
outbound_ip | String | 8...7 | Endereço IP de saída utilizado nesta entrega. |
send_time | String | 2024-04-29T11:07:04 | Horário em que o e-mail foi aceito. |
deliver_time | String | 2024-04-29T11:07:12 | Horário em que a entrega do e-mail foi concluída. |
status | String | 2 | Status da entrega.
|
event | String | dm:Deliver:Fail | Tipo da mensagem de evento. Corresponde ao parâmetro type. |
region | String | cn-hangzhou | Região onde o evento ocorreu. |
err_code | String | 554 | Código retornado pelo provedor de serviços de e-mail (ESP) do destinatário após a conclusão da entrega. |
err_msg | String | 554 RCPT a****@aliyun.com dosn't exist | Mensagem retornada pelo ESP do destinatário após a conclusão da entrega. |
failed_type | String | SmtpNxBox | Categorização do resultado da entrega. |
esp | String | *mail.com | Categorização do provedor de e-mail do destinatário. |
ip_pool_id | String | 10306c37-**-**-a82f-1dafb56a9dd2 | ID do pool de IPs usado para enviar o e-mail. |
is_dedicated_ip | Boolean | true | Indica se foi utilizado um endereço IP dedicado. |
tag | String | xxxxx | Tag utilizada para enviar o e-mail. |
Entrega de e-mail bem-sucedida
Quando um e-mail é entregue com sucesso, o EventBridge recebe um evento semelhante ao exemplo a seguir.
{
"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"
}
Para obter uma descrição dos parâmetros no campo data, consulte Descrições dos parâmetros.
Dados de relatório FBL de e-mail
Quando um e-mail é reportado por meio de um loop de feedback (FBL), o EventBridge recebe um evento como o seguinte:
{
"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****"
}
}
Parâmetros no campo data:
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
send_time |
String |
1726821644 |
Horário em que o e-mail foi enviado. |
|
send_email |
String |
from@xxx.com |
Endereço de e-mail do remetente. |
|
block_email |
String |
to@yyy.com |
Endereço de e-mail do destinatário bloqueado. |
|
subject |
String |
Hello Mr.xxx |
Assunto do e-mail. |
|
message_id |
String |
<msgid***@xxx.com> |
Identificador único do e-mail. |
|
block_time |
String |
1726821667 |
Horário em que o e-mail foi bloqueado. |
|
fbl_isp |
String |
outlook** |
Provedor de Serviços de Internet (ISP) do remetente. |
|
fingerprint |
String |
SMTPD_abc**** |
Impressão digital do e-mail. |
Dados de nova inscrição de e-mail
Quando um destinatário se inscreve novamente, o EventBridge recebe um evento como o seguinte:
{
"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"
}
}
Parâmetros no campo data:
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
operate_time |
String |
2024-04-29T11:25:48 |
Horário em que a operação ocorreu. O horário está em UTC. |
|
env_id |
String |
6000***** |
ID do e-mail retornado pelo sistema no momento do envio. |
|
from |
String |
from@xxx.com |
Endereço do remetente. |
|
rcpt |
String |
to@yyy.com |
Endereço do destinatário. |
|
client_ip |
String |
102...1 |
Endereço IP do cliente para o evento de abertura |
Dados de cancelamento de inscrição de e-mail
Quando um destinatário cancela a inscrição, o EventBridge recebe um evento como o seguinte:
{
"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"
}
}
Parâmetros no campo data:
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
operate_time |
String |
2024-04-29T11:25:48 |
Horário em que a operação ocorreu. O horário está em UTC. |
|
env_id |
String |
6000***** |
ID do e-mail retornado pelo sistema no momento do envio. |
|
from |
String |
from@xxx.com |
Endereço do remetente. |
|
rcpt |
String |
to@yyy.com |
Endereço do destinatário. |
|
client_ip |
String |
102...1 |
Endereço IP do cliente de origem para o evento |
Evento de clique
Quando um destinatário clica em um link no e-mail, o EventBridge recebe um evento semelhante ao exemplo a seguir.
{
"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"
}
}
A tabela a seguir descreve os parâmetros no campo data.
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
operate_time |
String |
2024-04-29T11:25:48 |
Horário em que a operação ocorreu. |
|
client_ip |
String |
202...1 |
Endereço IP do cliente que clicou no link. |
|
env_id |
String |
60000 |
ID do e-mail retornado pelo sistema no momento do envio. |
|
from |
String |
batch****@top |
Endereço do remetente. |
|
rcpt |
String |
xxx@aliyun.com |
Endereço do destinatário. |
|
msg_id |
String |
1df@ |
Campo Message-ID no e-mail. |
|
event |
String |
dm:Trace:Click |
Tipo do evento. |
|
region |
String |
cn-hangzhou |
Região onde o evento ocorreu. |
|
url |
String |
https://www.aliyun.com |
URL que recebeu o clique. |
|
outbound_ip |
String |
102...1 |
Endereço IP de saída usado para enviar o e-mail. |
|
esp |
String |
*mail.com |
Categorização do provedor de e-mail do destinatário. |
|
ip_pool_id |
String |
10306c37-**-**-a82f-1dafb56a9dd2 |
ID do pool de IPs usado para enviar o e-mail. |
|
is_dedicated_ip |
Boolean |
true |
Indica se foi utilizado um endereço IP dedicado. |
|
user_agent |
String |
Mozilla/5.0 (Macintosh; Intel Mac OS X ****) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 |
Agente de usuário para o evento de clique. |
|
tag |
String |
xxxxx |
Tag utilizada para enviar o e-mail. |
Evento de abertura
Quando ocorre um evento, o EventBridge recebe o seguinte evento de exemplo.
{
"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"
}
}
A tabela a seguir descreve os parâmetros no campo data.
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
operate_time |
String |
2024-04-29T11:25:48 |
Horário em que a operação ocorreu. |
|
client_ip |
String |
192.168.XX.XX |
Endereço IP do cliente que abriu o e-mail. |
|
env_id |
String |
60000 |
ID do e-mail retornado pelo sistema no momento do envio. |
|
from |
String |
batch****@top |
Endereço do remetente. |
|
rcpt |
String |
a****@aliyun.com |
Endereço do destinatário. |
|
msg_id |
String |
1df****@example.com |
Campo Message-ID no e-mail. |
|
event |
String |
dm:Trace:Click |
Tipo do evento. |
|
region |
String |
cn-hangzhou |
Região onde o evento ocorreu. |
|
outbound_ip |
String |
102...1 |
Endereço IP de saída usado para enviar o e-mail. |
|
esp |
String |
*mail.com |
Categorização do provedor de e-mail do destinatário. |
|
ip_pool_id |
String |
10306c37-**-**-a82f-1dafb56a9dd2 |
ID do pool de IPs usado para enviar o e-mail. |
|
is_dedicated_ip |
Boolean |
true |
Indica se foi utilizado um endereço IP dedicado. |
|
user_agent |
String |
Mozilla/5.0 (Macintosh; Intel Mac OS X ****) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 |
Agente de usuário para o evento de abertura. |
|
tag |
String |
xxxxx |
Tag utilizada para enviar o e-mail. |
Resultado assíncrono da validação de endereço em lista cinza
Quando um resultado assíncrono de validação de endereço em lista cinza está disponível, o EventBridge recebe um evento como o seguinte:
{
"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"
}
}
Parâmetros no campo data:
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
request_id |
String |
45ef4dewdwe1-7c35-447a-bd93-fab**** |
ID da solicitação retornado pela API quando a requisição foi enviada. |
|
submission_time |
String |
1763541726 |
Horário em que a solicitação de validação foi enviada. O horário está em UTC. |
|
completion_time |
String |
1763541793 |
Horário em que a validação foi concluída. O horário está em UTC. |
|
|
String |
xxxxxx@yyy.com |
Endereço de e-mail que foi validado. |
|
status |
String |
INVALID |
Status do endereço de e-mail após a validação. |
|
sub_status |
String |
MAILBOX_NOT_EXISTS |
Substatus que fornece detalhes adicionais sobre o resultado da validação. |
|
provider |
String |
XXXX |
Categorização do provedor de e-mail para o endereço. |
|
is_free_mail |
Boolean |
false |
Indica se o endereço pertence a um provedor de e-mail gratuito. |
|
local_part |
String |
xxxxxx |
Parte local do endereço de e-mail, convertida para minúsculas e com a tag de sub-endereçamento removida. |
|
domain_part |
String |
yyy.com |
Parte do domínio do endereço de e-mail, convertida para minúsculas. |
Todos os campos de horário nos detalhes do evento estão em UTC.
Envie um e-mail de
test@hangzhou.dmtest.toppara verificar o remetente.

Verifique a fila do Message Service (MNS) em busca da mensagem. (Este exemplo usa o Message Service (MNS) como destino do evento. Configure um destino diferente, se necessário.)

Envie um e-mail de um endereço de remetente diferente e verifique o EventBridge > event trace. O evento aparece no rastro, mas não é entregue ao Message Queue for Apache RocketMQ, confirmando que as notificações são acionadas apenas pelo endereço de remetente especificado.


