Pergunta

Acabei de receber uma solicitação do meu chefe para um aplicativo no qual estou trabalhando.Basicamente, estamos configurando um endereço de e-mail para um cliente externo enviar arquivos Excel.

O que preciso é de uma forma de coletar automaticamente qualquer e-mail enviado para esse endereço, para que eu possa pegar o anexo, processá-lo e salvá-lo em uma pasta.

Qualquer informação sobre por onde começar seria útil.

Observação:Estamos usando um servidor Lotus Notes para fazer isso, mas uma forma genérica seria mais útil (se possível).

Foi útil?

Solução

E-mail -> servidor de correio ->[algo] -> arquivo em disco.

O arquivo no disco é muito fácil de analisar, use JavaMail.

O [algo] poderia ser:

  • ouvinte de conexões smtp (exagero)!
  • Pop3/imap cliente
  • Maildir/Caixa de correio

Outras dicas

Editar: desde que escrevi esta resposta pela primeira vez, o Wiser mudou e agora afirma ser apenas uma ferramenta de teste de unidade, então aceite a resposta abaixo com uma pitada de sal ...


A resposta de Svrist é boa, mas se você quiser evitar a etapa intermediária (o servidor de e-mail que grava o e-mail no disco para posterior coleta pelo sistema Java), você pode usar Mais sábio.

O Wiser permite iniciar um servidor de e-mail em Java:

Wiser wiser = new Wiser();
wiser.setPort(2500);
wiser.start();

Então você pode pesquisá-lo periodicamente por e-mail:

for (WiserMessage message : wiser.getMessages())
{
    String envelopeSender = message.getEnvelopeSender();
    String envelopeReceiver = message.getEnvelopeReceiver();

    MimeMessage mess = message.getMimeMessage();

    // mail processing goes here
}

Use um mail no banco de dados (seu administrador do Domino pode configurar isso para você, mas também está no arquivo de ajuda).

Nesse banco de dados, você pode criar um agente que é executado periodicamente para processar todos os novos documentos.Esse agente usará a propriedade EmbeddedObjects da classe NotesRichTextItem e o método ExtractFile da classe NotesEmbeddedObject para obter um identificador no anexo do arquivo e extraí-lo para o local especificado.

Por exemplo, este script percorre todos os anexos de arquivos, links de objetos e objetos incorporados no item Corpo de um documento.Cada vez que encontra um anexo de arquivo, ele desanexa o arquivo para o diretório SAMPLES na unidade C e remove o anexo do documento

Dim doc As NotesDocument
Dim rtitem As Variant
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
  Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) Then
      Call o.ExtractFile( "c:\samples\" & o.Source )
      Call o.Remove
      Call doc.Save( False, True )
    End If
  End Forall
End If

Ultimamente tenho trabalhado bastante com agentes Java em servidores Domino.O servidor Domino 8.5 suporta Java 6 e é incorporado, portanto, não será necessário muito tempo para alguém com um pouco de experiência em desenvolvimento do Domino montar um agente que seja executado quando novos e-mails chegarem.No LotusScript é ainda mais fácil, mas requer habilidades mais especializadas que você provavelmente precisará contratar um empreiteiro para fornecer.

A limitação que você provavelmente encontrará diz respeito ao arquivo extraído. Você pode facilmente colocá-lo na estrutura de arquivos do servidor Domino, mas pode ser limitado pela segurança do sistema operacional ao colocá-lo em um servidor diferente.

O Lotus Notes/Domino armazena mensagens em um banco de dados do Notes.Existem APIs disponíveis para obter documentos (e-mails), ler valores de campos (De, Assunto) e desanexar arquivos.

APIs incluem

-LotusScript (variante VB, disponível no banco de dados do Notes)

-Java (de dentro ou de fora do banco de dados)

API -C (externa)

-Mesma API disponível através do servidor COM

Você pode criar um "agente agendado" no banco de dados (usando LotusScript ou Java) que pode localizar documentos criados desde a última execução, localizar os anexos e extraí-los.O agente precisará ser assinado com um ID que possua as permissões apropriadas no servidor, incluindo aquelas necessárias para gravar no sistema de arquivos e iniciar quaisquer outros processos.

Externo ao banco de dados, você pode usar qualquer API, exceto LotusScript, para efetuar login no servidor/banco de dados de correio e seguir um processo semelhante, por exemplo.extrair os arquivos localmente em um cliente ou servidor separado.API C e COM exigem a instalação do cliente Notes, mas os aplicativos Java podem ser configurados para serem executados via CORBA/DIIOP sem uma instalação completa.

Consulte a ajuda do Domino Designer (ou o website da IBM para API C) para obter mais informações.

Quanto a uma "maneira genérica" ​​de fazer isso, se você estiver acessando dados no Notes e precisando extrair anexos, acredito que essas APIs sejam sua melhor opção.Se você pretende portar o aplicativo para outro sistema de correio, considere desacoplar as rotinas da API por meio de uma "interface", de forma que você só precise adicionar uma nova implementação dessa interface para suportar um novo sistema de correio.

Você pode acessar documentos do Notes com relativa facilidade usando DIIOP, seria muito mais fácil do que seguir o caminho C Api ...

Experimente o POP3Client no Pacote NetCommons;permitirá que seu programa Java verifique novos e-mails para uma conta específica em qualquer intervalo que você desejar (a cada poucos minutos?de hora em hora?) e obter/excluir mensagens conforme desejado.

SMTP/POP3 pode ser ativado no servidor Domino.Trabalhei com isso antes e fiz o Squirrel Mail rodar com ele.O SMTP consome um pouco de recursos, mas vale a pena o esforço, porque assim você não precisa descer até o LotusLand para fazer as coisas funcionarem.Basta escrever um pequeno programa Java CLI que irá verificar uma caixa de e-mail específica (POP3 ou SMTP) e analisar as mensagens, extraindo os anexos e colocando-os onde necessário.

Muita documentação e exemplos aqui:http://java.sun.com/products/javamail/

As técnicas que você desenvolver seguindo essa abordagem serão mais amplamente aplicáveis ​​em sua carreira futura do que qualquer coisa específica da Lotus/Domino.

Não importa o que você faça, você precisará compreender as estruturas de dados do Lotus Notes.A boa notícia é que uma solução totalmente automatizada pode ser construída no Notes com muita facilidade.

Sua melhor aposta é construí-lo no Notes e pode ser configurado para ser executado automaticamente sempre que novos e-mails forem recebidos.A resposta de Gary está correta, mas sem qualquer experiência, provavelmente seria difícil descobrir como implementá-la sozinho.Por outro lado, nenhum programador competente do Notes realmente deveria levar mais de uma ou duas horas para configurá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top