java.mail отвечай на почту и получай контент в виде строки - PullRequest
0 голосов
/ 01 сентября 2018

Я хотел бы ответить на электронное письмо и мое содержимое в виде строки, чтобы показать его на моей странице JSF ... Но я получил только следующее из моей функции (String getMessageContent): javax.mail.internet.MimeMultipart@48bb9483

Вот мой код для ответа на электронную почту:

public EmailHelperClass answerEmail(Message message, EmailSetting emailSetting) throws MessagingException, IOException {
    Message newReplyMessage = message.reply(true);
    EmailHelperClass email = new EmailHelperClass();

    // FROM
    email.setFrom(emailSetting.getSendAddress());

    // TO
    Address[] froms = message.getFrom();
    String from = froms == null ? null : ((InternetAddress) froms[0]).getAddress();

    List<String> toList = new ArrayList<String>();
    toList.add(from);
    email.setToList(toList);

    email.setMimeType("text/html");
    email.setSubject("RE: " + newReplyMessage.getSubject());

    // Create your new message part
    BodyPart messageBodyPart = new MimeBodyPart();
    messageBodyPart.setText("Oiginal message:nn");

    // Create a multi-part to combine the parts
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);

    // Create and fill part for the forwarded content
    messageBodyPart = new MimeBodyPart();
    messageBodyPart.setDataHandler(message.getDataHandler());

    // Add part to multi part
    multipart.addBodyPart(messageBodyPart);

    // Associate multi-part with message
    newReplyMessage.setContent(multipart);

    email.setText(emailReaderServiceBean.getMessageContent(newReplyMessage));

    return email;
}

Примечание: EmailSetting -> Включает информацию для подключения к провайдеру (имя пользователя, пароль и т. Д.)

EmailHelperClass включает в себя:

private String from;
private String[] to;
private String[] cc;
private String[] bcc;
private List<String> toList;
private List<String> ccList;
private List<String> bccList;
private String subject;
private String text;
private String mimeType;
private List<EmailAttachment> attachments = new ArrayList<EmailAttachment>();

А вот мой код для возврата контента:

 public String getMessageContent(Message message) throws MessagingException, IOException {

    if (message == null)
        return "";

    try {
        Object content = message.getContent();
        if (content instanceof Multipart) {
            StringBuffer messageContent = new StringBuffer();
            Multipart multipart = (Multipart) content;
            for (int i = 0; i < multipart.getCount(); i++) {
                BodyPart p = multipart.getBodyPart(i);
                if (p.isMimeType("text/plain")) {
                    // messageContent.append(p.getContent().toString());
                    messageContent = new StringBuffer(p.getContent().toString());
                }
                if (p.isMimeType("text/html")) {
                    // messageContent.append(p.getContent().toString());
                    messageContent = new StringBuffer(p.getContent().toString());
                }

            }
            return messageContent.toString();
        }
        return content.toString();

    } catch (IOException e) {
    } catch (Exception e) {
    }
    return "";

1 Ответ

0 голосов
/ 02 сентября 2018

ваш bodyPart - это еще один Multipart (part-in-a-part), поэтому вам нужно выполнить некоторую рекурсию (или, если вы уверены в том, что у вас есть детали внутри-частей, то выполните те же элементы управления еще раз, например, ниже)

  Multipart multipart = ((Multipart)content);
  int parts = multipart.getCount();
  for (int j=0; j<parts; ++j) {
    MimeBodyPart part = (MimeBodyPart)multipart.getBodyPart(j);
    if (part.getContent() instanceof Multipart) {
      // part-within-a-part, do some recursion...
        // recursion call
      // or if you are sure this part's content contains no more parts then
        Multipart multipart2 = ((Multipart)part.getContent());
        int parts2 = multipart2.getCount();
        for (int k=0; k<parts2; ++k) {

            MimeBodyPart part2 = (MimeBodyPart)multipart2.getBodyPart(k);

            String type = part2.getContentType();

            // your logic

        }

    } else {
      String type = part.getContentType();

      // your logic

посмотрите на здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...