【问题标题】:Create a javax.mail message of mimetype: application/EDIFACT创建 mimetype 的 javax.mail 消息:application/EDIFACT
【发布时间】:2011-05-08 11:33:08
【问题描述】:

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

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

【问题讨论】:

  • 我接近解决方案。
  • 谷歌搜索没有让我知道,这个论坛也没有(到目前为止):所以我为这类问题创建了一个网站,人们可以在其中找到它是如何工作的:sites.google.com/site/edifact4java/home(基于我自己的研究)

标签: java jakarta-mail edifact


【解决方案1】:

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

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

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

  1. 将 DHC (DataContentHandler) 添加到 MailcapCommandMap
  2. 创建一个 MIME 类型的 DataContentHandler 应用程序/EDIFACT
  3. 创建一个 MimePart 定制 应用程序/EDIFACT
  4. 创建一个 用于 edifact 文件的 DataHandler 或 留言
  5. 创建消息 编辑消息接口

把所有这些放在一起,然后......它起作用了!!

一个很长的谜题,这就是我努力在网站上记录它的原因。希望有一天有人可以利用它获利。

【讨论】:

  • 太糟糕了,这个问题和答案被标记为风滚草。通过我为这个网站制作的链接网站,我收到了一些带有问题的电子邮件。所以我知道它非常具体……但至少它对某些人有所帮助。因此,如果您来到这里并在我的网站上找到答案,请投票!
  • 所以这基本上不是EDIFACT的问题,而是JavaMail的问题。很好,你解决了。
猜你喜欢
  • 2014-09-09
  • 2010-11-18
  • 2010-12-24
  • 2019-11-06
  • 2017-08-25
  • 1970-01-01
  • 2010-12-01
  • 2011-02-11
  • 2011-03-23
相关资源
最近更新 更多