Domínio¶
Entidade domínio. Os domínios são utilizados como parte dos endereços de remetente de mensagens.
Os domínios no DUO podem ser activados de duas formas:
- Domínio de envio — utilizável no header-from dos emails.
- Domínio de bounce — utilizado no envelope-from (Return-Path) e nos URLs de páginas de destino. Não deve ser usado como header-from.
Nota
Os parâmetros is_sending e is_bounce no POST/PUT são ignorados até que todos os registos DNS
necessários estejam presentes nos resolvers públicos.
Endpoints¶
| Método | URL |
|---|---|
GET |
/domain/<domain> |
POST |
/domain |
PUT |
/domain/<domain> |
DELETE |
/domain/<domain> |
Prova de Controlo do Domínio¶
Chave Pré-partilhada¶
- Crie o domínio via
POST. - Faça GET ao novo domínio e leia o campo
proof_of_control. - Publique um registo DNS TXT no domínio com o conteúdo exacto de
proof_of_control.
Chave RSA¶
- Gere um par de chaves RSA de 1024 bits:
- Publique um registo DNS TXT:
DUO-DOMAIN-VERIFICATION=rsa:<conteúdo de duo-public.pem> - Defina
proof_of_controlcomoDUO-DOMAIN-VERIFICATION=rsa:<conteúdo de duo-private.pem>no POST ou PUT.
A chave pública pode ser publicada num domínio pai (ex: example.com cobre todos os subdomínios).
Registos DNS¶
Domínios de envio:
- Publique um registo DKIM TXT: <dkim_selector>._domainkey.<domain> com valor v=DKIM1; k=rsa; s=email; p=<dkim_public_key>
- Se tiver um registo SPF, adicione include:_spf.duo.pt como primeiro mecanismo.
Domínios de bounce:
- Publique um registo CNAME para o domínio apontando para go.duo.pt.
Aviso
Os domínios de bounce são totalmente delegados ao DUO e não podem albergar outros serviços.
Activação¶
Os domínios activam-se automaticamente quando os registos DNS estão presentes. Pode forçar uma verificação DNS via PUT definindo is_sending e/ou is_bounce como true.
GET /domain/<domain>¶
Payload: Sem payload.
Devolve: O domínio.
Exemplo:
Resposta:
{
"success": true,
"data": {
"domain": {
"id": 1,
"name": "mail.yourdomain.com",
"owner": 1,
"dkim_selector": "duo202012",
"dkim_public_key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUrNpRSBAG/RT9DAJ1R9dg1Az3+p2HmjizZL/vlZVYo7mAo2UFRYFI7Y8mc+SgtYwMIzp+hXZAFrpvx0e5NJPnnAqQGecE2jvZUQ0EQJfmNme+hVP6TcBeIspIhftXbjRs2xgljoKga3bDLiah7sS2VC2NNe3zPqGItPWDEFc0yQIDAQAB",
"shared_with_children": false,
"dkim_domain_name": "duo.pt",
"proof_of_control": "DUO-DOMAIN-VERIFICATION=psk:ZbGpYyhRPYKxbMW",
"is_sending": false,
"is_bounce": false
},
"dns_validation": {
"bounce": false,
"sending": true,
"control": false
}
}
}
POST /domain¶
| Parâmetro | Tipo | Descrição |
|---|---|---|
name |
string | Nome do domínio |
proof_of_control |
string | Opcional. Utilizado apenas para prova de controlo RSA. |
is_sending |
boolean | Activar como domínio de envio (requer validação DNS) |
is_bounce |
boolean | Activar como domínio de bounce (requer validação DNS) |
Devolve: O novo domínio.
Exemplo:
curl -u "username:api_key" -H "Accept: application/json" \
-d "name=mail.yourdomain.com" \
https://app.duo.pt/domain
Resposta:
{
"success": true,
"data": {
"domain": {
"id": 1,
"name": "mail.yourdomain.com",
"owner": 1,
"dkim_selector": null,
"dkim_public_key": null,
"shared_with_children": null,
"dkim_domain_name": null,
"proof_of_control": "DUO-DOMAIN-VERIFICATION=psk:ZbGpYyhRPYKxbMW"
}
}
}
PUT /domain/<domain>¶
Mesmo payload que o POST.
Devolve: O domínio editado.
Exemplo:
curl -u "username:api_key" -H "Accept: application/json" -X PUT \
-d "name=mail.yourdomain.com&is_sending=true" \
https://app.duo.pt/domain/{domain_id}
Resposta:
{
"success": true,
"data": {
"uneditableField": "dkim_private_key",
"domain": {
"id": 1,
"name": "mail.yourdomain.com",
"owner": 1,
"dkim_selector": "duo202012",
"dkim_public_key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUrNpRSBAG/RT9DAJ1R9dg1Az3+p2HmjizZL/vlZVYo7mAo2UFRYFI7Y8mc+SgtYwMIzp+hXZAFrpvx0e5NJPnnAqQGecE2jvZUQ0EQJfmNme+hVP6TcBeIspIhftXbjRs2xgljoKga3bDLiah7sS2VC2NNe3zPqGItPWDEFc0yQIDAQAB",
"shared_with_children": false,
"dkim_domain_name": null,
"proof_of_control": "DUO-DOMAIN-VERIFICATION=psk:ZbGpYyhRPYKxbMW",
"is_sending": false,
"is_bounce": false
}
}
}
DELETE /domain/<domain>¶
Payload: Sem payload.
Devolve: O domínio eliminado.
Exemplo:
curl -u "username:api_key" -H "Accept: application/json" -X DELETE \
https://app.duo.pt/domain/{domain_id}
Resposta:
{
"success": true,
"data": {
"domain": {
"id": 1,
"name": "mail.yourdomain.com",
"owner": 1,
"dkim_selector": "duo202012",
"dkim_public_key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUrNpRSBAG/RT9DAJ1R9dg1Az3+p2HmjizZL/vlZVYo7mAo2UFRYFI7Y8mc+SgtYwMIzp+hXZAFrpvx0e5NJPnnAqQGecE2jvZUQ0EQJfmNme+hVP6TcBeIspIhftXbjRs2xgljoKga3bDLiah7sS2VC2NNe3zPqGItPWDEFc0yQIDAQAB",
"shared_with_children": false,
"dkim_domain_name": null,
"proof_of_control": "DUO-DOMAIN-VERIFICATION=psk:ZbGpYyhRPYKxbMW",
"is_sending": false,
"is_bounce": false
}
}
}