new ImapClient(domain [, port])
Classe responsável pela leitura de mensagens de email utilizando o protocolo IMAP.
Esta classe possui métodos que leem e modificam nomes de caixas de entrada. Esses nomes podem possuir hierarquias, como se fossem pastas e subpastas, delimitadas por um separador definido pelo servidor (por exemplo, "/"). A descrição dos métodos que tratam das caixas de entrada fala em "hierarquias" e "separadores" para explicar seu comportamento.
Esta classe também possui métodos que referenciam emails a partir de conjuntos de identificadores.
Os emails no protocolo IMAP são identificados por um número reutilizável, e portanto não-único,
chamado "número de sequência". O servidor também pode implementar identificadores únicos para
os emails. Todos os métodos que operam sobre as mensagens possuem uma versão que utiliza números
de sequência (que nos referimos por messageId
e idSet
) e outra que utiliza identificadores
únicos (uid
e uidSet
).
Um conjunto de números de sequência pode ser representado por um intervalo de números (como "5:50"), uma enumeração de números específicos, ou uma combinação de ambos, separados por vírgula (como "1:10,12,15"). O símbolo especial "" pode ser usado para representar o maior número de sequência na caixa de entrada. Um conjunto de UIDs é semelhante, mas não pode conter o símbolo especial "".
Parameters:
Name | Type | Argument | Description |
---|---|---|---|
domain |
string | Servidor IMAP que deve ser utilizado para acessar os emails. Por exemplo, "imap.gmail.com" para o Gmail e "imap.outlook.com" para o Outlook. |
|
port |
number |
<optional> |
Porta usada para se conectar ao servidor IMAP. Esta classe sempre utiliza uma conexão TLS segura, cuja porta padrão é 993. |
Example
const imapClient = new ImapClient('imap.gmail.com'); try { imapClient.login('nginstack@nginstack.com', appPasswd); imapClient.selectMailbox('Arquivos/XML'); const ids = imapClient.search({ flags: ['unseen'] }); const messages = imapClient.fetch(ids); messages.forEach(function (message) { const attachments = message.getAttachments(); attachments .filter(function (attachment) { return attachment.contentType.indexOf('xml') !== -1; }) .forEach(function (xmlFile) { console.log(xmlFile.textContent); }); }); } finally { imapClient.logout(); }
Methods
-
authenticate(type, options)
-
Realiza autenticação do usuário no servidor IMAP.
Parameters:
Name Type Description type
AuthenticationType Tipo de autenticação. São suportados "plain" e "xoauth2".
options
PlainAuthentication | XOAuth2Authentication Dados para autenticação. Varia de acordo com o tipo de autenticação.
-
copy(idSet, destinationMailbox)
-
Copia mensagens de uma caixa de entrada para outra.
Parameters:
Name Type Description idSet
string | number | Array.<number> Conjunto de IDs de mensagens a serem copiadas. Pode ser um número, uma lista de números ou uma string com expressão suportada pelo protocolo IMAP.
destinationMailbox
string Caixa de entrada de destino.
-
createMailbox(mailbox)
-
Cria uma nova caixa de entrada no servidor IMAP.
Tentar criar uma caixa com "INBOX" ou um nome já existente resulta em erro.
Nomes terminados com o separador de hierarquia do servidor criam uma caixa de entrada sem o separador no final do nome. Separadores em quaisquer outros lugares do nome criam as caixas necessárias para que o nome seja válido. Por exemplo, "arquivos/trabalho/outros" também cria "arquivos/" e "arquivos/trabalho/" se ainda não existirem.
Parameters:
Name Type Description mailbox
string Nome da nova caixa de entrada a ser criada.
-
deleteMailbox(mailbox)
-
Remove uma caixa de entrada no servidor IMAP.
Tentar remover "INBOX" ou uma caixa de entrada inexistente resulta em erro.
Este comando não remove nomes com hierarquia inferior. Por exemplo, remover "arquivos" não afetará "arquivos/trabalho".
Remover um nome que possui hierarquia inferior remove todas as mensagens daquela caixa de entrada e aplica o atributo "NoSelect", tornando aquela caixa não selecionável. Tentar remover nome que possui hierarquia inferior e já possui o atributo "NoSelect" resulta em erro.
Parameters:
Name Type Description mailbox
string -
expunge()
-
Remove permanentemente da caixa de entrada corrente todas as mensagens marcadas com a flag "deleted" e retorna uma lista com os IDs das mensagens removidas.
Alguns servidores podem não implementar o fluxo de remoção de mensagens da maneira padrão, necessitando que a mensagem seja primeiro movida para uma caixa de entrada especial que funciona como lixeira, para só então ser marcada com a flag "deleted" e em seguida removida permanentemente com
expunge
.Returns:
Lista de IDs das mensagens que foram removidas.
- Type
- Array.<number>
-
fetch(idSet [, query])
-
Faz o download de mensagens da caixa de entrada corrente.
Parameters:
Name Type Argument Description idSet
string | number | Array.<number> Conjunto de IDs de mensagens a serem baixadas. Pode ser um número, uma lista de números ou uma string com expressão suportada pelo protocolo IMAP.
query
string <optional>
Lista indicando quais dados serão baixados. Essa lista é composta por itens separados por espaço e, caso haja mais de um item, encapsulados entre parênteses.
Por padrão, a lista usada pelo método é
(FLAGS UID INTERNALDATE RFC822.SIZE RFC822)
, que traz todos os dados suportados por este cliente e marca a mensagem como lida.Os itens suportados por este cliente são:
BODY[]
: Traz o corpo completo da mensagem, incluindo cabeçalho, e marca como lida.BODY[HEADER]
: Traz o cabeçalho da mensagem e marca como lida.BODY.PEEK[]
eBODY.PEEK[HEADER]
: Trazem o corpo completo e o cabeçalho da mensagem, respectivamente, mas não marcam como lida.RFC822
eRFC822.HEADER
: Funcionalmente equivalentes a "BODY[]" e "BODY.PEEK[HEADER]", respectivamente.INTERNALDATE
: Traz a data de recebimento da mensagem.RFC822.SIZE
: Traz o tamanho da mensagem em octetos no formato RFC5322.UID
: Traz o unique ID da mensagem.FLAGS
: Traz as flags da mensagem, como "\Seen", "\Answered", "\Flagged", "\Deleted", "\Draft" ou "\Recent".
Returns:
Uma lista contendo as mensagens que foram baixadas. Independente da query, as mensagens baixadas sempre conterão
messageId
.Cada mensagem é representada por um objeto que contém os seguintes dados:
messageId
: O identificador da mensagem.uid
: O unique ID da mensagem.size
: O RFC822.SIZE da mensagem.flags
: A lista de flags da mensagem.internalDate
: A data de recebimento da mensagem.subject
: O assunto da mensagem.to
: O destinatário da mensagem.from
: O remetente da mensagem.date
: A data de envio da mensagem.plainBody
: O corpo da mensagem em texto simples.htmlBody
: O corpo da mensagem em HTML.getAttachments
: Função que retorna a lista de anexos da mensagem. Os anexos são retornados apenas se a query requisitar o corpo completo da mensagem.
Cada anexo é representado por um objeto que contém os seguintes dados:
filename
: O nome do arquivo do anexo.contentType
: O tipo MIME do conteúdo do anexo.textContent
: O conteúdo do anexo em texto simples, caso o tipo do conteúdo seja textual.data
: O conteúdo do anexo em bytes.
- Type
- Array.<ImapEmail>
Example
// Baixar apenas os cabeçalhos de todas as mensagens e não marcar como lidas imapClient.fetch('1:*', '(BODY.PEEK[HEADER])'); // Baixar o corpo das mensagens 10 e 15 no padrão RFC822. imapClient.fetch([10, 15], 'RFC822') // Baixar apenas o tamanho da mensagem 20 imapClient.fetch(20, 'RFC822.SIZE'); // Baixar o corpo das mensagens de 10 a 20 no padrão RFC822 e incluir o unique ID. imapClient.fetch('10:20', '(RFC822 UID)') // Baixar todos os dados da mensagem 15. imapClient.fetch([15]);
-
listMailboxes( [referenceName] [, mailboxPattern])
-
Lista todas as caixas de entrada disponíveis no servidor IMAP e retorna uma lista de objetos, onde cada objeto contém informações sobre uma caixa de entrada.
Parameters:
Name Type Argument Description referenceName
string <optional>
Nome da referência da caixa de entrada. Indica que as caixas devem ser listadas a partir daquele nível hierárquico. Este método utiliza string vazia por padrão, que indica que todas as caixas devem ser listadas a partir da raiz.
mailboxPattern
string <optional>
Padrão de correspondência para o nome da caixa de entrada. O caractere "" é um coringa que corresponde a qualquer sequência de zero ou mais caracteres naquela posição. O caractere "%" é semelhante, e corresponde a uma sequência de caracteres que não inclui o separador de hierarquia. Este método utiliza "" por padrão. Passar uma string vazia para este parâmetro retorna apenas o delimitador e a raiz da referência.
Returns:
Lista de caixas de entrada. Cada objeto contém informações sobre uma caixa de entrada. São elas:
name
: o nome da caixa de entrada.delimiter
: o delimitador utilizado para hierarquia de caixas de entrada.attributes
: lista de atributos da caixa de entrada.
- Type
- Array.<Mailbox>
-
login(user, password)
-
Realiza login do usuário no servidor IMAP utilizando um nome de usuário e uma senha. Alguns servidores não aceitam autenticação via senha e exigem o uso de OAuth 2.0, como por exemplo o Outlook. Outros aceitam apenas uso de senhas de aplicativo, como é o caso do Gmail.
Usar o tipo "plain" com o método
authenticate
é mais recomendado, pois utiliza o comando "AUTHENTICATE" do protocolo IMAP, que é mais moderno. O métodologin
deve ser usado apenas quando o servidor não suporta o comando "AUTHENTICATE".Parameters:
Name Type Description user
string Nome de usuário, geralmente o email.
password
string Senha do usuário.
-
logout()
-
Realiza logout do usuário no servidor IMAP, encerrando a sessão e permitindo a autenticação em outra conta utilizando o mesmo cliente.
O logout é realizado automaticamente quando o cliente é destruído pelo garbage collector. No entanto, caso seja necessário liberar recursos do servidor de forma mais eficiente, recomendamos que o logout seja antecipado manualmente.
-
move(idSet, destinationMailbox)
-
Move mensagens de uma caixa de entrada para outra.
Este método realiza uma cópia dos emails e apaga os originais. Caso falhe no meio da execução, alguns emails podem ficar na origem e outros no destino, mas os emails nunca serão duplicados.
O comando MOVE pode não ser suportado por alguns servidores.
Parameters:
Name Type Description idSet
string | number | Array.<number> Conjunto de IDs de mensagens a serem movidas. Pode ser um número, uma lista de números ou uma string com expressão suportada pelo protocolo IMAP.
destinationMailbox
string Caixa de entrada de destino.
-
renameMailbox(oldName, newName)
-
Renomeia uma caixa de entrada no servidor IMAP.
Tentar renomear uma caixa de entrada que não existe, ou para um nome que já existe, resulta em erro.
Se o nome possui hierarquias inferiores, então elas também são renomeadas. Por exemplo, renomear "arquivos" para "dados" também renomeia "arquivos/trabalho" para "dados/trabalho".
Novos nomes que possuam separadores criam as caixas de entrada necessárias para que o nome seja válido. Por exemplo, renomear "arquivos/trabalho/outros" para "dados/trabalho/outros" também cria "dados/" e "dados/trabalho/" se ainda não existirem.
Renomear "INBOX" tem um comportamento especial. Esta operação move todos os emails de "INBOX" para a nova caixa de entrada com o nome especificado, deixando "INBOX" vazia. Se o servidor suporta nomes com hierarquia inferior a "INBOX", essas hierarquias não são afetadas.
Parameters:
Name Type Description oldName
string Nome da caixa de entrada a ser renomeada.
newName
string Novo nome da caixa de entrada.
-
search(query)
-
Busca mensagens na caixa de entrada corrente.
Parameters:
Name Type Description query
string | SearchOptions Um comando suportado pelo protocolo IMAP ou um objeto de opções de busca. O comando cru proporciona uma maior flexibilidade na busca, enquanto o objeto apresenta uma interface estruturada e fácil de usar.
As opções de busca são:
since
: Filtra mensagens recebidas após uma data específica. Pode ser uma instância de Date ou uma string no formato 'dd-Mon-yyyy'.before
: Filtra mensagens recebidas antes de uma data específica. Pode ser uma instância de Date ou uma string no formato 'dd-Mon-yyyy'.subject
: Filtra mensagens com um assunto específico.from
: Filtra mensagens de um remetente específico.to
: Filtra mensagens enviadas para um destinatário específico.flags
: Filtra mensagens com uma lista de flags específica.
Returns:
Uma lista contendo os IDs das mensagens que correspondem à busca.
- Type
- Array.<number>
-
selectMailbox(mailbox)
-
Seleciona uma caixa de entrada no servidor IMAP para que as mensagens nela possam ser acessadas. Na maioria dos servidores de email, a caixa de entrada padrão é chamada de "INBOX", e é onde os novos emails são entregues. Esta caixa é automaticamente selecionada no momento da autenticação.
Apenas uma caixa de entrada pode ser selecionada por vez. Para acessar simultaneamente outras caixas, é necessário criar uma nova instância do cliente IMAP.
No momento da seleção, a anterior é desfeita. Portanto, se a nova seleção falhar, o cliente passa a não possuir nenhuma caixa de entrada selecionada.
Parameters:
Name Type Description mailbox
string Nome da caixa de entrada a ser selecionada.
-
store(idSet, query)
-
Altera o conjunto de flags das mensagens especificadas.
Parameters:
Name Type Description idSet
string | number | Array.<number> Conjunto de IDs de mensagens a serem modificadas. Pode ser um número, uma lista de números ou uma string com expressão suportada pelo protocolo IMAP.
query
string Comando suportado pelo protocolo IMAP com as flags a serem modificadas.
Returns:
Uma lista contendo apenas as mensagens que foram atualizadas, mas sem nenhum dado do corpo da mensagem. Apenas
messageId
eflags
. Caso o sufixo ".SILENT" seja usado, as mensagens não serão retornadas (mesmo que modificadas), resultando em uma lista vazia.- Type
- Array.<ImapEmail>
Example
// Marcar mensagens 1, 3 e 5 como lidas. imapClient.store([1, 3, 5], '+FLAGS (\\Seen)'); // Marcar mensagens de 2 a 10 como não lidas. imapClient.store('2:10', '-FLAGS (\\Seen)'); // Sobrescrever as flags de todas as mensagens para lidas e respondidas e não retornar resposta. imapClient.store('1:*', 'FLAGS.SILENT (\\Seen \\Answered )');
-
uidCopy(uidSet, destinationMailbox)
-
Copia mensagens de uma caixa de entrada para outra. Equivalente a
copy
, mas usando unique IDs.Parameters:
Name Type Description uidSet
string | number | Array.<number> Conjunto de UIDs de mensagens a serem copiadas. Pode ser um número, uma lista de números ou uma string com expressão suportada pelo protocolo IMAP.
destinationMailbox
string Caixa de entrada de destino.
- See:
-
uidExpunge(uidSet)
-
Remove permanentemente da caixa de entrada corrente todas as mensagens marcadas com a flag "deleted" e cujo unique ID esteja presente no conjunto de UIDs especificado. Retorna uma lista com os UIDs das mensagens removidas.
Este método evita remoções indesejadas por erro de sincronização entre cliente e servidor, que podem acontecer caso uma mensagem tenha sido marcada como "deleted" por outro cliente.
Assim como
expunge
, este método não garante a remoção correta para todos os servidores, já que algumas implementações para a remoção não seguem o fluxo padrão.Parameters:
Name Type Description uidSet
string | number | Array.<number> Conjunto de UIDs de mensagens a serem removidas. Pode ser um número, uma lista de números ou uma string com expressão suportada pelo protocolo IMAP.
- See:
Returns:
Lista de UIDs das mensagens que foram removidas.
- Type
- Array.<number>
-
uidFetch(uidSet [, query])
-
Faz o download de mensagens da caixa de entrada corrente. Equivalente a
fetch
, mas usando unique IDs.Parameters:
Name Type Argument Description uidSet
string | number | Array.<number> Conjunto de UIDs de mensagens a serem baixadas. Pode ser um número, uma lista de números ou uma string com expressão suportada pelo protocolo IMAP.
query
string <optional>
Lista indicando quais dados serão baixados. Essa lista é composta por itens separados por espaço e, caso haja mais de um item, encapsulados entre parênteses.
Por padrão, a lista usada pelo método é
(FLAGS UID INTERNALDATE RFC822.SIZE RFC822)
, que traz todos os dados suportados por este cliente e marca a mensagem como lida.- See:
Returns:
Uma lista contendo as mensagens que foram baixadas. Independente da query, as mensagens baixadas sempre conterão
messageId
euid
.- Type
- Array.<ImapEmail>
-
uidMove(uidSet, destinationMailbox)
-
Move mensagens de uma caixa de entrada para outra. Equivalente a
move
, mas usando unique IDs.Parameters:
Name Type Description uidSet
string | number | Array.<number> Conjunto de UIDs de mensagens a serem movidas. Pode ser um número, uma lista de números ou uma string com expressão suportada pelo protocolo IMAP.
destinationMailbox
string Caixa de entrada de destino.
- See:
-
uidSearch(query)
-
Busca mensagens na caixa de entrada corrente. Equivalente a
search
, mas usando unique IDs.Parameters:
Name Type Description query
string | SearchOptions Um comando suportado pelo protocolo IMAP ou um objeto de opções de busca.
- See:
Returns:
Uma lista contendo os UIDs das mensagens que correspondem à busca.
- Type
- Array.<number>
-
uidStore(uidSet, query)
-
Altera o conjunto de flags das mensagens especificadas. Equivalente a
store
, mas usando unique IDs.Parameters:
Name Type Description uidSet
string | number | Array.<number> Conjunto de UIDs de mensagens a serem modificadas. Pode ser um número, uma lista de números ou uma string com expressão suportada pelo protocolo IMAP.
query
string Comando suportado pelo protocolo IMAP com as flags a serem modificadas.
- See: