Como anexar dados como se fossem arquivos em um e-mail?

06/12/2005

Pessoal, tenho o seguinte problema:

Em um programa faço a geração de configurações que deverão ser inseridas num determinado equipamento eletrônico. O meio de comunicação entre o programa e o equipamento é feito unicamente por mensagens de e-mail (o equipamento eletrônico não é um celular, nem palm, nem nenhum outro equipamento comercial). Até aí OK.

Já criei uma rotina que cria e envia a mensagem, porém esta rotina até agora só faz a manipulação dos dados de cabeçalho e texto do corpo da mensagem. Faltam os arquivos anexos.

Preciso enviar uma mensagem ao equipamento, contendo suas configurações. Estas informações de configurações devem estar num arquivo anexo à mensagem (necessita que seja anexo, pois o equipamento entende apenas assim).

[b:de7c9788ac] O PROBLEMA[/b:de7c9788ac]: Como transformar as informações (dados de tipos variados) geradas pelo programa num arquivo anexo? Quais são as regras para que um arquivo faça parte de uma mensagem de e-mail como sendo um arquivo anexo?
[b:de7c9788ac] DETALHES[/b:de7c9788ac]:
1- Não posso criar um arquivo com as informações e salva-las em disco;
2- Não posso usar ferramentas do Delphi tal como Indy por exemplo, pois o corpo e o cabeçalho da mensagem também são importantes e as ferramentas de e-mail, como Indy, não permitem manipular estas informações byte a byte.

Alguém pode dar uma ajuda?

valeu
rtava


Rtava

Respostas

06/12/2005

Rtava

Apenas complementando, preciso saber quais são os cabeçalhos e delimitadores do corpo da mensagem e que apontam início e fim de anexos assim como as demais informações.


Responder Citar

06/12/2005

Massuda

Se você está usando o sistema de email convencional para comunicar com seu aparelho, talvez fosse mais interessante você incluir esses seus dados adicionais no próprio texto da mensagem ao invés de incluir como anexo. O motivo é que o sistema convencional de email só trabalha com texto e para manipular anexos ele utiliza um processo baseado em MIME, o que pode tornar o processamento do lado do aparelho muito complicado; claro, se o seu aparelho é ´inteligente´, nada disso se aplica, mas nesse caso não entendo porque você não pode utilizar o Indy.


Responder Citar

07/12/2005

Rtava

Fala Massuda!
Nas mensagens o processo deve mesmo ser baseado em MIME com base64.
Precisa ser assim, pois só assim o sistema do equipamento eletrônico a que me refiro poderá tratar a mensagem. Não dá pra ser de outra forma, pois os recursos do lado do equipamento são muito limitados e não existe um sistema operacional que dê flexibilidade para variar a forma de tratamento das mensagens. Ele recebe a mensagem de texto MIME, codificado em base64 (pois também serão enviados programas EXE como anexo às mensagens, o que implica em caracteres não imprimíveis para envio numa mensagem textual) e o equipamento trata esta mensagem encontrando os marcadores de texto e de arquivos, desmenbrando e manipulando a mensagem.

Aliás, falando em recursos limitados do lado do equipamento, estou precisando também reimplementar o código dele. Detalhe: a linguagem em que tudo deve ser feito é ANSI C (que neste caso é para programas embarcados). Estou com sérios problemas para encontrar documentação à respeito e fazer a implementação do envio, recebimento e tratamento das mensagens.

Quanto ao equipamento ser relativamente inteligente para tratar as mensagens, até é. Eu disse que não daria para usar Indy, pois preciso que a mensagem chegue no equipamento de uma forma compreenssível, conforme protocolo RFC822 (para formatação de mensagens de texto) e com Indy não consigo manipular as mensagens adequadamente. Não que não possa ser usado, mas até agora não consegui usar o Indy para isso e decidi partir para fazer a coisa na unha mesmo. Se houver uma maneira de usar Indy de maneira que o formato da mensagem seja um padronizado e com arquivos anexos codificados base64, beleza! Sem problemas. Seria até muito bom, além de prático.

Se tiver alguma coisa que possa me dar uma luz, seria de grande ajuda... Aliás, tudo pode ser desenhado como for mais fácil, pois estou implementando ainda.

Valeu!

OBS.: Desculpe o excesso de texto, mas não tinha como ser menos para poder explicar tudo...


Responder Citar

07/12/2005

Massuda

Eu disse que não daria para usar Indy, pois preciso que a mensagem chegue no equipamento de uma forma compreenssível, conforme protocolo RFC822 (para formatação de mensagens de texto) e com Indy não consigo manipular as mensagens adequadamente.
Indy implementa a RFC822... não entendi se você teve problemas em gerar a mensagem no formato esperado ou se teve problemas em usar Indy.

Aliás, falando em recursos limitados do lado do equipamento, estou precisando também reimplementar o código dele. Detalhe: a linguagem em que tudo deve ser feito é ANSI C (que neste caso é para programas embarcados). Estou com sérios problemas para encontrar documentação à respeito e fazer a implementação do envio, recebimento e tratamento das mensagens.
Talvez seja útil... esta é uma implementação bem simples de pilha TCP/IP em C para uso nesses casos: [url=http://www.sics.se/~adam/uip/]uIP[/url].

Se tiver alguma coisa que possa me dar uma luz, seria de grande ajuda... Aliás, tudo pode ser desenhado como for mais fácil, pois estou implementando ainda.
Sinceramente, a não ser que haja algum motivo que não esteja aparente pelo que você escreveu, acho que enviar anexos no email uma complexidade desnecessária. Eu implementaria (no equipamento embarcado) apenas o recebimento de mensagens em formato texto, contendo uma mensagem texto formatada de modo a permitir reconhecer a mensagem como uma mensagem autêntica do sistema bem como permitir incluir diferentes tipos de informação (seria como reinventar o MIME, mas evitando detalhes complicados que exigiriam mais do equipamento). Por exemplo, poderia enviar o texto todo em Base64 de modo que o equipamento, após decodificar o Base64, soubesse como tratar o conteúdo resultante.


Responder Citar

07/12/2005

Rtava

Sinceramente, a não ser que haja algum motivo que não esteja aparente pelo que você escreveu, acho que enviar anexos no email uma complexidade desnecessária. Eu implementaria (no equipamento embarcado) apenas o recebimento de mensagens em formato texto, contendo uma mensagem texto formatada de modo a permitir reconhecer a mensagem como uma mensagem autêntica do sistema bem como permitir incluir diferentes tipos de informação (seria como reinventar o MIME, mas evitando detalhes complicados que exigiriam mais do equipamento). Por exemplo, poderia enviar o texto todo em Base64 de modo que o equipamento, após decodificar o Base64, soubesse como tratar o conteúdo resultante.


Concordo plenamente com você. O pessoal que está trabalhando comigo no desenvolvimento falou o mesmo. Porém (e sempre tem um porém...), o cliente para o qual este projeto está sendo desenvolvido gostaria que fosse possível enviar mensagens também por um Webmail qualquer ou pelo Outlook. Sendo assim, se as mensagens tivessem formato personalizado não seria possível manter estas opções de interfaces de envio das mesmas. Ou seja, o cliente teria que ter um programa ´gerador/validador´ da mensagem para que então fosse enviada. Só que tendo este programa, o cliente e qualquer outra pessoa também teriam acesso a outras informações do protolo de comunicação e aceitação de mensagens por parte do equipamento, o que não poderia ser permitido de forma alguma.

É complicado mesmo... mas, mesmo assim estou bem inclinado a usar esta sua opção e tentar convencer o cliente sobre os problemas e limitá-lo ao envio de mensagens unicamente por meio do programa que estou fazendo.

Obrigado pela atenção mais uma vez Massuda.


Responder Citar