首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建mimetype类型的javax.mail消息: application/EDIFACT

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

Stack Overflow用户
提问于 2010-11-11 21:30:54
回答 1查看 2.4K关注 0票数 0

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

EDIFACT是一种用于发送业务对业务信息(例如发票)的标准

邮件的结构是这样的:

代码语言:javascript
复制
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邮件没有邮件部分,只有附件。

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

代码语言:javascript
复制
MimeBodyPart attachBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(fileAttach);
attachBodyPart.setDataHandler(new DataHandler(source));
attachBodyPart.setFileName(source.getName());
msg.setContent(attachBodyPart, "application/EDIFACT");

我得到了这个错误:

代码语言:javascript
复制
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)

等等。最后是这个:

代码语言:javascript
复制
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消息和保存附件时,我也遇到了一个问题,它不是默认的保存附件的方式,使用:

代码语言:javascript
复制
mp = (Multipart)message.getContent();
BodyPart part = mp.getBodyPart(i);
part.getInputStream()

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

代码语言:javascript
复制
SharedByteArrayInputStream sbaIs = (SharedByteArrayInputStream)message.getContent()

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

在这里,对我的问题的最小回应是我自己弄清楚它的原因,最后我把它变成了一个开源项目。它对一些开发者来说已经很有用了。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-22 21:21:30

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

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

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

为mime类型的MailcapCommandMap

  • Create application/EDIFACT

  • Create为application/EDIFACT

  • Create定制的DataContentHandler添加DHC (

  • )用于edifact文件或消息的DataContentHandler MimePart DataHandler or message

  • 为edifact messages

创建消息接口

把所有这些放在一起,然后……它成功了!!

这是一个很长的难题,这就是为什么我要把它记录在网站上的原因。希望有个人,有一天能用它获利。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4154898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档