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