Domínios e endereços
Acrescente e verifique domínios, leia os registos DNS de que precisam, gira os respetivos endereços e verifique a partir de que endereços pode enviar.
Visão geral
Dois espaços de nomes cobrem os seus domínios. openemail domains gere os domínios associados ao espaço de trabalho: acrescentá-los e removê-los, os registos DNS de que cada um precisa, se pode receber e enviar, o catch-all, os domínios de rastreio e de ficheiros, e os endereços. openemail addresses responde a uma pergunta mais restrita: a partir de que endereços pode enviar a chave ou o início de sessão que está a usar.
- Um comando de domínio aceita o id do domínio, um UUID de
domains listoudomains create. O nome do anfitrião não é aceite em vez dele, por issoopenemail domains get acme.comdá 404 e sai com o código5. - Um comando de endereço aceita o id do domínio e depois o id do endereço, um UUID de
domains list-addressesoudomains create-address. domaineaddresstambém funcionam como nomes de espaço de nomes. Os verbos de domínio respondem aos aliases habituais, comols,show,new,editerm, e o mesmo acontece comaddresses list. Os cinco verbos para os endereços de um domínio, comocreate-address, não têm nenhum.openemail <command> --helplista cada argumento e opção com o tipo, o scope de que a chamada precisa, o método e o caminho, e o que devolve. Acrescente--jsonpara ter a mesma página como dados.
Todos os comandos
| Comando | O que faz |
|---|---|
| openemail domains list | Listar os domínios do espaço de trabalho, por ordem alfabética, com o estado de receção, envio, rastreio e ficheiros |
| openemail domains get <id> | Ler um domínio com os seus endereços, cada registo DNS que usa e se cada um foi encontrado, e a sua leitura de DMARC |
| openemail domains create --domain <value> | Acrescentar um domínio. A resposta contém cada registo DNS a publicar, já verificado uma vez |
| openemail domains verify <id> | Verificar de imediato o DNS do domínio e devolver o domínio tal como a verificação o deixou |
| openemail domains update <id> | Ligar ou desligar o catch-all, e definir ou remover o domínio de rastreio e o domínio de ficheiros |
| openemail domains delete <id> | Remover o domínio e todos os seus endereços. Pede-lhe confirmação |
| openemail domains list-addresses <id> | Listar os endereços de um domínio com os ids, as etiquetas, se estão ativos e quando cada um recebeu correio pela última vez |
| openemail domains create-address <id> --local-part <value> | Criar um endereço no domínio, ativo, com uma --label opcional |
| openemail domains get-address <id> <address-id> | Ler um endereço de um domínio |
| openemail domains update-address <id> <address-id> | Mudar o nome de um endereço com --label, ou desativá-lo e ativá-lo com --no-enabled e --enabled |
| openemail domains delete-address <id> <address-id> | Remover um endereço do seu domínio. Pede-lhe confirmação |
| openemail addresses list | Listar os endereços a partir dos quais pode enviar com esta chave ou este início de sessão, e o estado de receção e envio de cada domínio |
Cada opção está na ajuda do seu comando, por exemplo openemail domains update --help ou openemail domains create-address --help.
Receção e envio
Um domínio indica dois factos independentes. receiving.verified é true assim que o DNS público responde com os seus registos MX e o seu registo TXT _openemail-challenge, e a partir daí recebe correio. sending.status é o estado de assinatura tal como a última verificação o viu: verified, pending, failed, no_identity ou unknown. sending.canSend diz se um envio a partir do domínio seria aceite neste momento, e um veredicto negativo com mais de um dia conta como desconhecido, por isso um script deve decidir com base em canSend e não em status. Enquanto for false, um envio a partir do domínio é recusado com 409 domain_not_sendable.
domains createfaz a primeira verificação de DNS durante a chamada, por isso cada entrada emrecordsjá traz umstatus:found,missing, ou null quando ainda não foi verificada. Publique cada registo exatamente como é dado, já que os valores são específicos do domínio.domains verifyverifica de imediato. Nos 10 segundos seguintes à última verificação não verifica nada de novo e devolve o domínio tal como está. Num domínio verificado volta a verificar os registos de assinatura, por issosendingestá atualizado.domains getnum domínio não verificado volta a verificar quando a última verificação tem mais de 20 segundos, por isso consultargetperiodicamente também funciona e só precisa dedomains:read, enquantoverifyprecisa dedomains:write.- Um registo publicado há pouco pode demorar alguns minutos a aparecer no DNS público.
Num terminal, get, create e verify mostram um campo por linha, com os blocos aninhados como receiving, sending e records em JSON compacto. Acrescente --json e leia-os com uma ferramenta como jq, como fazem os exemplos abaixo.
Catch-all e domínios de rastreio e de ficheiros
domains update altera três definições que não dependem umas das outras. Uma opção que omitir fica como está, e sem nenhuma opção o domínio volta inalterado.
| Opção | O que altera |
|---|---|
| --catch-all, --no-catch-all | Ligado, aceita correio para qualquer endereço do domínio que ninguém criou, e o endereço aparece em list-addresses a partir da primeira mensagem. Desligado, recusa correio para cada endereço não criado à mão, incluindo os que o catch-all apanhou antes. Um domínio novo começa com ele ligado |
| --tracking-host <value> | Um subdomínio como links.acme.com para as ligações rastreadas e o píxel de abertura. null remove-o |
| --storage-host <value> | Um subdomínio como files.acme.com para as ligações de transferência dos ficheiros enviados a partir do domínio. null remove-o |
- Um anfitrião novo é guardado e verificado na mesma chamada. Publique um registo CNAME com o nome
record.namee o valorrecord.valuedo blocotrackingoustorageda resposta, com qualquer proxy desligado. Configurar um anfitrião de novo pode dar-lhe um valor diferente, por isso publique o que a resposta mais recente indicar. - Até passar uma verificação, o anfitrião aparece como
pendinge o correio novo mantém o anfitrião predefinido do OpenEmail. Quando passa uma, aparece comoactive. O OpenEmail continua a verificar por si, e um anfitrião ativo que falha três verificações seguidas, ou cuja última verificação bem-sucedida tem 2 horas, aparece comofailedenquanto o correio novo volta ao anfitrião predefinido. - Remova um anfitrião com
null, como em--tracking-host null. Um valor vazio como--tracking-host=é um erro de utilização na CLI e sai com o código2. - Um anfitrião novo precisa do domínio verificado, ou pelo menos do seu registo TXT
_openemail-challengepublicado. Caso contrário, a chamada é recusada com 409domain_not_verified. - As opções aplicam-se por ordem: o catch-all, depois o domínio de rastreio e depois o domínio de ficheiros. Uma opção posterior que seja recusada pode deixar guardada uma alteração anterior, por isso envie-as em chamadas separadas quando cada uma tiver de valer por si.
Endereços de um domínio
Um domínio contém os endereços criados à mão ou através da API, e os que o seu catch-all apanhou quando lhes chegou correio pela primeira vez. list-addresses mostra os dois tipos, incluindo os desativados. O catch-all em si não é uma linha: é receiving.catchAll no domínio.
create-addressaceita--local-part, a parte antes da @, e uma--labelopcional. O domínio ainda não tem de estar verificado, mas o endereço não recebe nada até estar.*sozinho é recusado, já que é assim que se escreve o catch-all.- Criar um endereço que já existe, ou um que foi removido, não é um erro. Volta ativo, com a etiqueta que enviou ou sem nenhuma, e mantém o id. Um endereço que o catch-all apanhou passa a ser um criado à mão, por isso continua a receber depois de o catch-all ser desligado.
- Com o catch-all ligado, um endereço novo começa com as definições por endereço do catch-all, como a assinatura e o rastreio, exceto as definições de privacidade. São copiadas uma vez e não se mantêm sincronizadas.
update-address --no-enabledfaz com que o endereço deixe de aceitar correio, por isso os remetentes recebem uma devolução, e não é possível enviar nada a partir dele. Mantém o correio, as definições e as pessoas que lhe têm acesso, e--enabledretoma onde parou.--labelmuda-lhe o nome, e--label nullremove o nome.delete-addressvai mais longe. O correio para o endereço é recusado mesmo com o catch-all ligado, o reencaminhamento para, as definições são eliminadas, as pessoas com acesso a ele perdem esse acesso e o início de sessão com palavra-passe é revogado. O correio que já recebeu fica na caixa de correio. Criá-lo de novo recupera o mesmo id, sem as definições nem os acessos anteriores.
A partir de que endereços pode enviar
openemail addresses list responde à pergunta por trás de um 403 from_address_forbidden: que endereços a chave ou o início de sessão com que está a chamar pode pôr em From. Precisa de emails:send em vez de um scope de leitura, porque descreve o que um envio aceitaria.
- Num terminal mostra duas tabelas: os endereços, cada um a indicar se está ativo e se pode enviar a partir dele, e depois os domínios, cada um a indicar se está verificado para receber e para enviar, e o seu catch-all.
unrestrictedé true quando nada restringe a credencial. Nesse caso é possível enviar a partir de qualquer parte local dos domínios do espaço de trabalho, incluindo as que ninguém criou. Caso contrário,canSendsó é true para um endereço ativo que a credencial cobre, através de um domínio inteiro que tem ou da sua própria lista de endereços.canSendé false para um endereço desativado, para um que a credencial não cobre e para um cujo domínio ainda não consegue assinar.- Só são listados os endereços criados. Uma credencial que tem um domínio inteiro pode na mesma enviar a partir de qualquer parte local dele, e um endereço da sua lista sem caixa de correio por trás pode ser usado para enviar sem aparecer aqui.
- Com
--jsonmostra{ unrestricted, addresses, domains, hasMore, nextCursor }para uma página, e{ unrestricted, addresses, domains }com--all, em vez do documento{ items, hasMore, nextCursor }que outras listas mostram. Com--allnum pipe, ou com--ndjson, mostra um endereço por linha.
status, open e fornecedores de DNS
openemail status lê o seu início de sessão, addresses list e domains list ao mesmo tempo e mostra-os juntos. A sua tabela Sender addresses mostra cada endereço a indicar se pode enviar e se está ativo. A sua tabela Domains mostra cada domínio como verified ou not verified para a receção, o estado de envio e o catch-all. Mostra os primeiros 100 de cada uma e indica o comando --all para o resto.
- Uma parte que a sua credencial não pode ler, como os domínios sem
domains:readou os endereços sememails:send, diz Not available com o motivo, e o resto é mostrado na mesma. - Se ainda não houver endereços, sugere
openemail domains create --domain example.com. openemail status --jsonmostra um objeto comaccount,addresses,domainseunavailable, ondeunavailabledá o motivo de cada parte que não foi possível ler.
Ligar um fornecedor de DNS, para que os registos de um domínio novo sejam escritos por si, só se faz na aplicação web em 0.0.2. openemail open providers, ou open dns, abre essa página. open domains abre os domínios e os seus registos DNS, e open addresses os endereços. O reencaminhamento também está na aplicação web, e open forwarding <address> abre-o para um endereço. --print mostra a ligação em vez de abrir um navegador.
Quando o OpenEmail escreveu ele próprio o DNS de um domínio, domains delete retira esses registos e lista em leftBehind os que não conseguiu, para que os remova no seu fornecedor de DNS. Os registos que publicou por si nunca são tocados, por isso remova-os também depois de o domínio desaparecer.
Exemplos
openemail domains create --domain acme.com --json > acme.jsonjq -r '.records[] | [.type, .name, .value, (.priority // "")] | @tsv' acme.jsonopenemail domains verify "$(jq -r .id acme.json)"id=b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6funtil openemail domains get "$id" --json | jq -e .receiving.verified > /dev/null; do sleep 30doneopenemail domains get "$id" --json | jq '.sending | {status, canSend, error}'openemail domains list-addresses "$id" --allopenemail domains create-address "$id" --local-part invoices --label Invoicesopenemail domains update "$id" --no-catch-all --dry-runopenemail domains update "$id" --no-catch-allCriar invoices à mão faz com que continue a receber depois de o catch-all ser desligado, enquanto o correio para qualquer outro endereço que o catch-all apanhou é recusado. A simulação mostra o PATCH e o seu corpo sem o enviar.
openemail domains update "$id" --tracking-host links.acme.com --json | jq '.tracking | {status, record, error}'openemail domains update "$id" --tracking-host nulladdress_id=$(openemail domains list-addresses "$id" --all | jq -r 'select(.address == "[email protected]") | .id')openemail domains update-address "$id" "$address_id" --no-enabledopenemail domains delete-address "$id" "$address_id" --yesDesativar primeiro o endereço pode ser anulado com --enabled. A eliminação não, e num script precisa de --yes. Com um início de sessão no navegador também pede um código de verificação, que --yes nunca salta.
openemail domains list --all | jq -r 'select(.sending.canSend | not) | [.domain, .sending.status] | @tsv'openemail addresses list --all --json | jq -r '.addresses[] | select(.canSend) | .address'Scopes, confirmações e erros
| Scope | Comandos |
|---|---|
| domains:read | domains list, get, list-addresses, get-address |
| domains:write | domains create, verify, update, delete, create-address, update-address, delete-address |
| emails:send | addresses list |
- Um início de sessão ou uma chave sem o scope para com o código de saída
4, indica o scope em falta e explica como o obter. domains deleteedomains delete-addresspedem-lhe confirmação. Responder que não sai com o código10e não altera nada. Sem supervisão e sem--yes, param com o código de saída2antes de enviar o que quer que seja.- Com um início de sessão no navegador, essas duas eliminações também pedem um código de verificação, como faz a aplicação web. Sem supervisão ninguém o pode escrever, por isso o comando para com o código de saída
4. Execute primeiroopenemail verifye os 60 minutos seguintes não precisam de código. A uma chave de API nunca é pedido. --dry-runmostra o pedido que uma alteração enviaria, com o corpo, e sai com o código0sem o enviar nem lhe pedir confirmação.- Uma lista lê uma página:
--limitaceita de 1 a 100 e o servidor envia 25 quando é omitido, e--cursoraceita onextCursorda página anterior.--alllê todas as páginas,--max <n>para depois desse número de itens, e--ndjson, ou--allnum pipe, mostra um objeto JSON por linha. Com--json,domains listelist-addressesmostram um único documento{ items, hasMore, nextCursor }. - Uma chave ou um início de sessão limitados a determinados domínios ou endereços continuam a ver todos os domínios e endereços. Não podem acrescentar um domínio, e qualquer outra alteração precisa do domínio inteiro entre os domínios que têm, ou a chamada é recusada com 422
capability_unsupported. - Uma recusa sai com o código do seu estado:
4para um 403, comodomain_allowance_reachedquando o plano não permite mais domínios,5para um 404,6para um 409, comodomain_already_addedoudomain_claimed, e7para um 422, comoinvalid_tracking_hostouworkspace_limit_reached. - O último domínio de um espaço de trabalho não pode ser removido a partir da CLI. Isso é um 409
last_domain, porque removê-lo elimina a caixa de correio inteira, algo que a aplicação web confirma primeiro. Um domínio que contém endereços de conta reservados dá um 409domain_holds_reserved_addresses. domains createe as duas eliminações nunca são repetidas depois de uma falha de rede. Um 409domain_already_added, ou um 404 na sua própria segunda tentativa depois de perder a resposta, significa que a primeira funcionou.verify,update,create-addresseupdate-addresssão repetidos automaticamente, já que enviar um duas vezes deixa o mesmo resultado.