2010-11-11 47 views
0

我正在研究可以通過郵件發送EDIFACT消息的應用程序。 發送和接收郵件沒有問題,接收EDIFACT消息(由另一個應用程序發送)也適用。創建一個mimetype的javax.mail消息:application/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) 

有沒有人有任何創建像這樣的消息的經驗,或者如何創建消息韓應用程序/ EDIFACT類型的dler嗎?

在接收電子數據交換消息和附件保存我也是這個問題是不是在默認方式來保存附件,使用:

mp = (Multipart)message.getContent(); 
BodyPart part = mp.getBodyPart(i); 
part.getInputStream() 

我不得不用這個代替(添加此信息,因爲這可能是一個領先的解決方案):

SharedByteArrayInputStream sbaIs = (SharedByteArrayInputStream)message.getContent() 

**編輯2013年3月18日**

在這裏我的問題的最低限度的反應是有原因的推測出來myse最後,我把它變成了一個開源的項目。它對一些開發者來說已經很有用了。

所以一看:使用並請提供相關反饋:https://github.com/iamit/IAmEdifact

+0

IAm接近解決方案。 – 2010-11-19 16:09:43

+0

谷歌搜索沒有給我一個asnwer,無論這個論壇(迄今):所以我開始了這種問題的網站,在那裏人們可以找到這是如何工作的:https://sites.google.com/site/edifact4java /家(根據我自己的研究) – 2010-11-19 16:10:50

回答

2

昨天深夜,我已經完成了上述descibed問題的解決工作。 我無法在互聯網上找到適當的答案。 所以我創建了一個頁面,如何做到這一點的步驟(文檔並未完全終結,但它會很快)

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

總之,你必須這樣做:

  1. 添加DHC(的DataContentHandler)至 時,MailcapCommandMap
  2. 爲MIME類型創建一個 的DataContentHandler 應用/ EDIFACT
  3. 創建定製 應用 MimePart/EDIFACT
  4. 一個EDIFACT文件或 消息
  5. 創建 的DataHandler創建一個消息 接口EDIFACT信息

,並把這個都在一起,和。 .... 有用!!

一個很長的難題,這就是爲什麼我花費在網站上記錄它的努力。希望有一天,有一天可以通過它獲利。

+0

這個問題和答案太糟糕了,標記爲風滾草。通過我爲這個鏈接的網站,我收到了一些有問題的電子郵件。所以我知道這是非常具體的......但至少它可以幫助一些人。所以,如果你來到這裏並在我的網站上找到答案,請投票! – 2011-11-24 12:39:00

+0

所以這基本上不是EDIFACT問題,而是JavaMail。好,你解決了它。 – 2012-08-05 13:58:31