cancel
Showing results for 
Search instead for 
Did you mean: 

Envio de e-mail (NF-e 2.0) - Arquivo Untitled.bin

Former Member
0 Kudos

Bom dia senhores.

Estou com um cliente que me informou que o e-mail com o XML está sendo barrado para alguns clientes dele, pois o servidor de e-mail deles está acusando a presença de um arquivo Untitled.bin.

Realizei a configuração de envio do e-mail com o Mail XSD e o envio está ok, com o Remetente, Destinatário, Assunto e Corpo do Email sendo montados dinamicamente. No Configuration, estou utilizando as opções 'Use Mail Package', Content Enconding = None e 'Keep Attachments'.

O estranho é que eu coloco o meu e-mail e o do cliente e eu recebo o e-mail corretamente, inclusive com o XML da NF-e, porém o cliente retorna esse erro.

Abaixo vocês podem conferir o e-mail de falha:

EDITADO PELA MODERAÇÃO

Message was edited by: Henrique Pinto

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Gabriel,

Não tenho mais detalhes sobre o seu erro, mas desenvolvi um Module que monta o email de envio ao Clliente, voce deverá compilar o codigo no Developer Studio.

Ele faz o tratamento de xml de NF-e, Cancelamento e CC-e, jogando o payload do xml para attachment, removendo qualquer outro payload e dando o nome correto ao xml.

Outra funcionalidade importante é a montagem do corpo do email com um resumo das informações da Nota, Cancelamento, CC-e

Voce deverá utilizar Variable Transport Binding ao invés do Mail Package.

package b2b.br.com.netweaver;

/**

  • @author Luis Naves

  • @ejbHome <{com.sap.aii.af.mp.module.ModuleHome}>

  • @ejbLocal <{com.sap.aii.af.mp.module.ModuleLocal}>

  • @ejbLocalHome <{com.sap.aii.af.mp.module.ModuleLocalHome}>

  • @ejbRemote <{com.sap.aii.af.mp.module.ModuleRemote}>

  • @stateless

*/

import javax.ejb.CreateException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

import com.sap.aii.af.mp.module.*;

import com.sap.aii.af.ra.ms.api.*;

import com.sap.aii.af.service.auditlog.*;

import javax.xml.parsers.*;

import org.w3c.dom.*;

import java.io.InputStream;

/**

  • @ejbHome <

    • @ejbLocal <
    > >

  • @ejbLocalHome <

    • @ejbRemote <
    > >

*/

public class SetToB2BParameters implements SessionBean, Module {

    private SessionContext myContext;

    public void ejbRemove() {

    }

    public void ejbActivate() {

    }

    public void ejbPassivate() {

    }

    public void setSessionContext(SessionContext context) {

        myContext = context;

    }

    public void ejbCreate() throws CreateException {

    }

    public ModuleData process(ModuleContext moduleContext, ModuleData inputModuleData) throws ModuleException {

        try {

            Message msg = (Message) inputModuleData.getPrincipalData();

            if (msg.getMessageDirection() == MessageDirection.INBOUND)

                amk = new AuditMessageKey(msg.getMessageId(), AuditDirection.INBOUND);

            else

                amk = new AuditMessageKey(msg.getMessageId(), AuditDirection.OUTBOUND);

            Payload payload = msg.getDocument();

            String fileName = "";

            InputStream resp = payload.getInputStream();

            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

            Document doc = builder.parse(resp);

            Node node = (Node) doc.getElementsByTagName("chNFe").item(0);

            if (node.hasChildNodes() && !node.getFirstChild().getNodeValue().equals("")) {

                fileName = node.getFirstChild().getNodeValue();

                // Show access key

                Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS, "chNFe: " + fileName);

            }

            String content = "Caro cliente,

";

            // Change attachment filename according to file type

            Node xmlType = (Node) doc.getElementsByTagName("cStat").item(0);

            if (xmlType.hasChildNodes()) {

                switch (Integer.parseInt(xmlType.getFirstChild().getNodeValue())) {

                    case 100 :

                        content =

                            content

                                + "A NF-e: "

                                + fileName

                                + " foi autorizada na base de dados da SEFAZ

Valor Total: "

                                + doc.getElementsByTagName("vNF").item(0).getFirstChild().getNodeValue()

                                + "

Protocolo: "

                                + doc.getElementsByTagName("nProt").item(0).getFirstChild().getNodeValue();

                        fileName = node.getFirstChild().getNodeValue() + "-procNFe.xml";

                        break;

                    case 101 :

                        content =

                            content

                                + "A NF-e: "

                                + fileName

                                + " foi cancelada na base de dados da SEFAZ

Motivo: "

                                + doc.getElementsByTagName("xJust").item(0).getFirstChild().getNodeValue()

                                + "

Protocolo: "

                                + doc.getElementsByTagName("nProt").item(0).getFirstChild().getNodeValue();

                        fileName = node.getFirstChild().getNodeValue() + "-procCancNFe.xml";

                        break;

                    case 135 :

                        content =

                            content

                                + "Uma carta de corre\u00e7\u00e3o eletr\u00f4nica foi autorizada para a NF-e: "

                                + fileName

                                + " na base de dados da SEFAZ

Corre\u00e7\u00e3o: "

                                + doc.getElementsByTagName("xCorrecao").item(0).getFirstChild().getNodeValue()

                                + "

Protocolo: "

                                + doc.getElementsByTagName("nProt").item(0).getFirstChild().getNodeValue();

                        fileName = node.getFirstChild().getNodeValue() + "-procEventoNFe.xml";

                        break;

                }

            }

            content = content + "

Este e-mail foi enviado de forma autom\u00e1tica, favor n\u00e3o respond\u00ea-lo.

Segue o XML em anexo

NF-e Empresa";

            Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS, "Attachment name: " + fileName);

            XMLPayload text = msg.createXMLPayload();

            text.setContent(content.getBytes("UTF-8"));

            text.setContentType("text/plain; charset=utf-8");

            text.setAttribute("Content-Transfer-Encoding", "quoted-printable");

            text.setAttribute("Content-Description", "Body");

            text.setAttribute("Content-Disposition", "inline");

            msg.setDocument(text);

            payload.setContentType("text/xml;charset = "UTF-8";" + "name="" + fileName);

            payload.setAttribute("Content-Description", fileName);

            payload.setAttribute("Content-Disposition", "attachment; filename="" + fileName + """);

            msg.addAttachment(payload);

            inputModuleData.setPrincipalData(msg);

        } catch (Exception e) {

            throw new ModuleException(e);

        }

        return inputModuleData;

    }

    private AuditMessageKey amk;

}

Answers (1)

Answers (1)

0 Kudos

Boa tarde Gabriel.

Estou com o mesmo problema.

Alguns clientes estão reclamando desse arquivo, porém enviei para mais de um email meu diferente e em nenhum esse arquivo aparece.

Você resolveu?

Obrigado

Former Member
0 Kudos

Boa noite Alexandre.

Infelizmente não encontrei a solução, pois na época o cliente resolveu instalar o GRC 10.0 e, feito isso, fizeram o Envio de E-mail do zero através de um Java Mapping, o que resolveu o problema.

No meu caso, acredito que o problema estava no firewall (ou de quem envia o e-mail ou de quem recebe), visto que eu enviava para o meu e-mail e recebia normalmente.

Os seus e-mails recebem o que? O XML?

Abraços!

0 Kudos

Consegui resolver o problema.

O Java Mapping gera todas as informações do Email, to, corpo e o anexo com o XML da nota.

Tive que especificar um nome para o Content Type do Multpart, assim evitando a geração do nome default untitled.bin no header do MIME

 

Text contentTypeText = docout.createTextNode("multipart/mixed;boundary=--AaZz;filename=untitled.txt");

[]´s

renato_fantacini
Discoverer
0 Kudos

Boa tarde Alexandre,

Aqui na minha empresa resolveu o problema executando exatamente sua dica.

Muito obrigado.