Подтвердить что ты не робот

Сообщение электронной почты Java Parser?

Кто-нибудь знаком с библиотекой Java, которая помогает в синтаксическом анализе полей (дата, тема, от, до) по электронной почте ниже?

Message-ID: <[email protected]>
Date: Wed, 6 Mar 2010 12:32:20 -0800 (PST)
From: [email protected]
To: [email protected]
Subject: some subject
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-From: one, some <[email protected]>
X-To: one
X-cc: 
X-bcc: 
X-Folder: Bob\Inbox
X-Origin: Bob-R
X-FileName: rbob (Non-Privileged).pst


some message
4b9b3361

Ответ 1

JavaMail - это библиотека оракула, которая предоставляет почтовые службы и службы, связанные с почтой (такие как синтаксический анализ обычных и MIME-сообщений) в javax. почтовый пакет. Кроме того, у Apache есть библиотека Commons Email для обработки почты.

В JavaMail api простой способ проанализировать строку, содержащую сообщение электронной почты (которое может быть или не быть явно MIME), будет следующим:

String content = ...
Session s = Session.getInstance(new Properties());
InputStream is = new ByteArrayInputStream(content.getBytes());
MimeMessage message = new MimeMessage(s, is);

и разбор заголовков можно сделать следующим образом

message.getAllHeaderLines();
for (Enumeration<Header> e = message.getAllHeaders(); e.hasMoreElements();) {
    Header h = e.nextElement();
    h.getName();
    h.getValue();
}

Ответ 2

У меня были проблемы с JavaMail (он не смог разобрать некоторые сообщения электронной почты, которые он должен).

У меня были лучшие результаты с Mime4J.

Ответ 3

Я бы предложил вам использовать email-mime-parser,

Следующий пример кода дает вам всю необходимую информацию:

ContentHandler contentHandler = new CustomContentHandler();

MimeConfig mime4jParserConfig = new MimeConfig();
BodyDescriptorBuilder bodyDescriptorBuilder = new DefaultBodyDescriptorBuilder();
MimeStreamParser mime4jParser = new MimeStreamParser(mime4jParserConfig,DecodeMonitor.SILENT,bodyDescriptorBuilder);
mime4jParser.setContentDecoding(true);
mime4jParser.setContentHandler(contentHandler);

InputStream mailIn = 'Provide email mime stream here';
mime4jParser.parse(mailIn);

Email email = ((CustomContentHandler) contentHandler).getEmail();

List<Attachment> attachments =  email.getAttachments();

Attachment calendar = email.getCalendarBody();
Attachment htmlBody = email.getHTMLEmailBody();
Attachment plainText = email.getPlainTextEmailBody();

String to = email.getToEmailHeaderValue();
String cc = email.getCCEmailHeaderValue();
String from = email.getFromEmailHeaderValue();

Ответ 4

Привет @Jherico, относительно этого: @HendyIrawan есть метод getFrom() в классе Message. Он возвращает тип Address [], и члены этого массива обычно могут быть преобразованы в тип InternetAddress, если вы имеете дело с реальными почтовыми сообщениями. В этом классе есть методы для получения имени и части электронной почты адреса, соответствующего RFC822. -

Можете ли вы разработать немного больше. Я застрял здесь. Даже я хочу отделить дружеское имя и фактический адрес электронной почты.

заранее спасибо