2017-02-03 8 views
1

Вот проблема я столкнулся:Синтаксических Сырые Электронные письма от Amazon SES в Java

  1. Я получаю необработанное письмо от Amazon SES в ведро S3, вызвав функцию лямбды.
  2. Функция считывает данные (сырые) электронной почты из ведра с помощью:

    S3Object s3Object = s3Client.getObject (новый GetObjectRequest (srcBucket, srcKey));

  3. Необработанные электронный адрес затем преобразуется в InputStream и Java Mail (javax.mail) создается объект MimeMessage:

    MimeMessage mimeMessageObj = новый MimeMessage (newSession, inputStreamObj);

Вопрос заключается в том: Как вы разобрать всю информацию из сообщения (inlcuding вложения).

У MimeMessage есть специальные методы для этого (getSubject и т. Д.), Но они возвращают нули. Есть ли специальный синтаксический анализ, необходимый для заполнения этих полей? Я нашел множество примеров создания сообщений электронной почты с использованием этих специальных методов напрямую, но обращение вспять процесса для чтения сырой электронной почты не работает должным образом. Является ли ручной синтаксический анализ единственным вариантом? Я думаю, это было бы очень утомительно, и я склонен к ошибкам.

ответ

0

Если вы получаете нули, то сообщение на самом деле не является сообщением формата MIME. Убедитесь, что это так, и что в начале сообщения нет пустых строк.

0

Вы можете попробовать использовать MimeMessageParser из пакета org.apache.commons.mail.util.

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

MimeMessage mimeMessageObj = new MimeMessage(newSession, inputStreamObj); 
MimeMessageParser mimeParser = new MimeMessageParser(mimeMessageObj); 

try { 
    mimeParser.parse(); 
    List<javax.mail.Address> to = mimeParser.getTo(); 
    String from = mimeParser.getFrom(); 
    String subject = mimeParser.getSubject(); 
    String bodyPlain = mimeParser.getPlainContent(); 
    String bodyHtml = mimeParser.getHtmlContent(); 
    long timestamp = mime.getSentDate().getTime(); 
} catch (Exception e) { 
    System.out.println("Something went wrong"); 
    e.printStackTrace(); 
} 

Вот Maven зависимость вам понадобится:

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-email --> 
<dependency> 
    <groupId>org.apache.commons</groupId> 
    <artifactId>commons-email</artifactId> 
    <version>1.3</version> 
</dependency> 

 Смежные вопросы

  • Нет связанных вопросов^_^