私は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を作成して添付ファイルを送信し、これにテキストと添付パーツを追加します。ただし、エディファクトメッセージにはメッセージ部分はなく、添付ファイルのみが含まれます。
次のように、添付ファイルをコンテンツに追加すると、次のようになります。
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