Ficheiros
`files.list`, `list_all`, `iterate`, `get`, `download`, `list_links`, `list_all_links`, `iterate_links`, `create_link`, `revoke_link`, `stats`, `upload`, `delete` e `delete_many`.
Todos os métodos
from pathlib import Path from openemail import openemail page = openemail.files.list(kind='pdf', sort='largest')file = page['items'][0] Path(file['filename']).write_bytes(openemail.files.download(file['id'])) links = openemail.files.list_all_links(file['id'])print([(link['url'], link['downloads']) for link in links]) stats = openemail.files.stats()print(stats['totals']['files'], stats['uploaded']['bytes'])Cada ficheiro que a caixa de correio guarda, anexos enviados e recebidos e os ficheiros carregados nela, a página Ficheiros da aplicação. download devolve o ficheiro inteiro como bytes, as ligações são as ligações de transferência com que um ficheiro saiu, com quantas vezes cada uma foi obtida, e stats é o separador Análises.
list, list_all e iterate aceitam q, kind e sort, e também direction (inbound, outbound ou uploaded), address, os ficheiros de um endereço comparado sem distinguir maiúsculas de minúsculas, e since e until, um datetime ou uma string ISO 8601. since inclui o seu momento e until para antes dele.
Ler precisa de files:read, e carregar, eliminar e publicar ou revogar ligações precisam de files:write, que inclui files:read. Uma chave criada antes de os ficheiros terem permissões próprias recebeu as correspondentes. Uma chave limitada a determinados endereços ou domínios só vê os ficheiros deles.
Ligações públicas
from openemail import openemail uploads = openemail.files.list_all(direction='uploaded', since='2026-09-01') file = uploads[0] link = openemail.files.create_link(file['id'], domain='acme.com')print(link['url']) openemail.files.revoke_link(file['id'], link['id'])create_link publica um ficheiro numa ligação de transferência pública que abre sem início de sessão e devolve-a. A ligação fica no anfitrião de ficheiros de domain quando esse domínio tem um, como files.acme.com, senão no anfitrião de ficheiros do endereço a que o ficheiro pertence, senão no endereço da API. Um ficheiro que entrou ou saiu numa mensagem é primeiro copiado para o armazenamento público, e um programa ou um script é recusado com 422 file_unshareable.
Cada create_link cria uma nova ligação, por isso nunca é repetido depois de uma resposta perdida: procure primeiro a ligação com list_links. revoke_link desativa uma ligação para sempre, incluindo no correio que já saiu, e devolve-a com revokedAt preenchido. Revogar uma duas vezes é seguro, e uma ligação desconhecida é um 404.
Carregar e eliminar
from pathlib import Path from openemail import openemail upload = openemail.files.upload( Path('price-list.pdf').read_bytes(), filename='price-list.pdf', content_type='application/pdf',) if upload['deletable']: openemail.files.delete(upload['id']) result = openemail.files.delete_many([ 'file_0c4e7a91d2b84f63a5e19b7d', 'file_6bb640f5b99e47deb758f1f5',])for kept in result['kept']: print(kept['filename'], kept['reason'])upload guarda os bytes tal como estão, até 100 MB, com o nome filename, e devolve o ficheiro, cujo id um envio anexa como {'fileId': upload['id']}. Passe content_type, ou os bytes são guardados como application/octet-stream. Nunca é repetido, porque uma segunda tentativa guardaria uma segunda cópia.
Só um ficheiro carregado de que nada depende pode ser eliminado, e deletable e usage em cada ficheiro dizem-no antecipadamente. delete recusa qualquer outro ficheiro com um 409 file_in_use. delete_many aceita até 100 ids, elimina o que pode e reporta o resto em kept, cada um com o seu motivo, e em missing.
upload aceita bytes, bytearray ou memoryview. Espera pelo menos 600 segundos por uma resposta, por mais curto que seja o timeout do cliente, a não ser que passe timeout= à chamada, e um filename em branco lança ValueError antes de qualquer coisa ser enviada.
Referência
files.list()Referência completafiles.list_all()Referência completafiles.iterate()Referência completafiles.get()Referência completafiles.download()Referência completafiles.list_links()Referência completafiles.list_all_links()Referência completafiles.iterate_links()Referência completafiles.create_link()Referência completafiles.revoke_link()Referência completafiles.stats()Referência completafiles.upload()Referência completafiles.delete()Referência completafiles.delete_many()Referência completa