代码之家  ›  专栏  ›  技术社区  ›  michel.iamit

创建mimetype:application/EDIFACT的javax.mail消息

  •  0
  • michel.iamit  · 技术社区  · 14 年前

    我正在开发一个可以通过邮件发送EDIFACT消息的应用程序。 发送和接收邮件没有问题,接收EDIFACT消息(由另一个应用程序发送)也可以。

    EDIFACT是一个标准,用于发送企业对企业的信息(例如发票)

    邮件具有以下结构:

    Message-ID: 20101110081058.CLOCKT..SRC.SRCNUMBER.edi01@SENDER.DOMAIN.com
    From: EDI-berichten <edi01@SENDER.DOMAIN.com>
    Date: Wed, 10 Nov 2010 08:10:57
    To: <ekt@DOMAIN.nl>
    Subject: INVOIC;SRC
    MIME-VERSION: 1.0
    Content-type: application/EDIFACT;
      name=message.edi
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="message.edi"
    X-OriginalArrivalTime: 10 Nov 2010 07:13:29.0843 (UTC) FILETIME=[C6CCD430:01CB80A6]
    X-Virus-Scanned: clamav-milter 0.96.4 at pilot
    X-Virus-Status: Clean
    

    在这里您可以找到EDIFACT规范: http://www.faqs.org/rfcs/rfc1767.html

    通常通过创建mimultipart来发送附件,并为此添加文本和附件。 然而,edifact消息没有消息部分,只有附件。

    当我将附件部分添加到内容时,如下所示:

    MimeBodyPart attachBodyPart = new MimeBodyPart();
    DataSource source = new FileDataSource(fileAttach);
    attachBodyPart.setDataHandler(new DataHandler(source));
    attachBodyPart.setFileName(source.getName());
    msg.setContent(attachBodyPart, "application/EDIFACT");
    

    我得到这个错误:

    javax.mail.MessagingException: IOException while sending message;
      nested exception is:
        javax.activation.UnsupportedDataTypeException: no object DCH for MIME type application/EDIFACT
        at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:930)
    

    等。。。 最后一点:

    Caused by: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type application/EDIFACT
        at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:877)
        at javax.activation.DataHandler.writeTo(DataHandler.java:302)
        at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1383)
        at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1743)
        at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:888)
    

    有没有人在创建这样的消息方面有经验,或者如何为application/EDIFACT之类的类型创建消息处理程序?

    在接收EDIFACT消息并保存附件时,我还遇到了一个问题,即它不是默认的保存附件的方式,使用:

    mp = (Multipart)message.getContent();
    BodyPart part = mp.getBodyPart(i);
    part.getInputStream()
    

    我不得不使用这个(添加这个信息,因为它可能是解决方案的线索):

    SharedByteArrayInputStream sbaIs = (SharedByteArrayInputStream)message.getContent()
    

    **2013年3月18日编辑**

    在这里,对我的问题的最低限度的回答是找出它的原因,最后我把它变成了一个开源项目。它已经对一些开发人员有用了。

    所以请看一看:使用并请反馈: https://github.com/iamit/IAmEdifact

    1 回复  |  直到 11 年前
        1
  •  2
  •   michel.iamit    14 年前

    昨天很晚,我已经完成了上述问题的解决工作。 我在网上找不到合适的答案。 因此,我创建了一个页面,其中包含如何完成此操作的步骤(文档还没有完全完成,但很快就会完成)

    网站: https://sites.google.com/site/edifact4java/home

    简而言之,你必须这样做:

    1. 将DHC(DataContentHandler)添加到 MailcapCommandMap
    2. 创建 mime类型的DataContentHandler 应用程序/EDIFACT
    3. 创建 MimePart定制 应用程序/EDIFACT
    4. 创建 edifact文件的数据处理程序或 消息
    5. 创建消息 edifact消息接口

    把这一切放在一起,然后。。。。。它起作用了!!

    一个很长的谜团,这就是为什么我要在一个网站上记录它。希望有人,有朝一日能用它来做他/她的利润。

    推荐文章