我正在研究一个可以通过邮件发送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

通常,您通过创建Mimemultipart并添加文本和附件来发送附件。但是,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)

是否有人在创建这样的消息方面有任何经验,或者如何为应用程序/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

有帮助吗?

解决方案

昨天很晚才完成了上述问题的解决方案。我在互联网上找不到适当的答案。因此,我创建了一个如何执行此操作的步骤的页面(文档还没有完全完成,但是很快就会)

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

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

  1. 将DHC(DataContentHandler)添加到MailCapCommandMap
  2. 为MIME-Type应用程序/Edifact创建DataContentHandler
  3. 创建一个用于应用程序/Edifact的MimePart
  4. 创建用于Edifact文件或消息的Datahandler
  5. 为Edifact消息创建消息接口

并将所有这些都放在一起,.....它有效!

一个漫长的难题,这就是为什么我要在网站上进行记录的努力。希望有人有一天可以用它来赚钱。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top