Создать javax.mail сообщение mimetype: приложение / Edifact

StackOverflow https://stackoverflow.com/questions/4154898

  •  08-10-2019
  •  | 
  •  

Вопрос

Я работаю над приложением, которое может отправлять Edifact Messages по почте. Отправка и получение почты не являются проблемой, принимая Edifact Message (отправить другой приложение).

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

Здесь вы можете найти эмоциональные характеристики: http://www.faqs.org/rfcs/rfc1767.html.

Обычно вы отправляете вложение, создавая MimemUltiPART и добавить текст и присоединить деталь к этому. Однако Edifact Message не имеет значения сообщений, просто вложение.

Когда я добавляю часть вложения к контенту, как это:

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»?

При получении Edifact Message и сохранения вложения у меня также была проблема, это не в том, чтобы сохранить вложение, используя:

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

Я должен был использовать это вместо этого (добавление этой информации, потому что это может быть привести к решению):

SharedByteArrayInputStream sbaIs = (SharedByteArrayInputStream)message.getContent()

** Править 18 Мар 2013 ** **

Минимальный ответ на мой вопрос здесь был причиной, чтобы понять это MySelver, а в конце концов я сделал его с открытым исходным кодом. Это уже было полезно для некоторых разработчиков.

Так что посмотрите: используйте и пожалуйста, обратная связь на нем: https://github.com/iamit/iamedifact.

Это было полезно?

Решение

Вчера очень поздно я закончил работать над решением проблемы, выпускаемой выше. Я не мог найти правильный ответ в любоевере в Интернете. Поэтому я создал страницу со ступенями того, как это сделать (документация не полностью закончена, но она скоро будет)

Сайт: https://sites.google.com/site/edifact4java/home.

Короче говоря, вы должны сделать это:

  1. Добавьте DHC (DataContentHandler) на MailcapCommandmap
  2. Создайте DataContentHandler для приложения типа MIME / EDIFACT
  3. Создать mimepart, настроенный для приложения / Edifact
  4. Создайте DataHandler для файла или сообщения Edifact
  5. Создайте интерфейс сообщения для Edifact Message

И поставить все это вместе, и ..... это работает !!

Длинная головоломка, поэтому я принимаю усилия, документируя его на сайте. Надеюсь, кто-то, какой-то день может сделать свою прибыль с этим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top