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

EDIFACT是将企业间信息发送给企业的标准(例如发票)

邮件具有以下结构:

Message-ID: [email protected]
From: EDI-berichten <[email protected]>
Date: Wed, 10 Nov 2010 08:10:57
To: <[email protected]>
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)


有没有人有创建这样的消息的经验,或者如何为像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

最佳答案

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

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

简而言之,您必须执行以下操作:


将DHC(DataContentHandler)添加到
MailcapCommandMap
创建一个
MIME类型的DataContentHandler
申请/ EDIFACT
创建一个
MimePart专为
申请/ EDIFACT
创建一个
用于edifact文件的DataHandler或
信息
建立讯息
edifact消息的界面


把所有这些放在一起,.....就可以了!!

一个漫长的谜题,这就是为什么我要努力在网站上进行记录。希望有一天,某人可以从中获利。

09-26 08:44