Как полностью экспортировать HTML-письмо с API Gmail в Java - PullRequest
0 голосов
/ 22 мая 2019

Я хочу извлечь конкретное сообщение со спамом с помощью API gmail и отобразить его в моем веб-приложении, но стилизация теряется во время экспорта. Проблема заключается в том, что стиль не встроен, и я не могу найти источник стиля.

Я использую Spring Boot и Gmail Java API для извлечения электронной почты. Я протестировал некоторые другие электронные письма, которые содержат встроенный стиль, и они работают. Я извлек html-код письма вручную и устал показывать его через html-файл, но он отображается только без стиля.


//How I get the message
Message message = service.users().messages().get(USER, messages.get(0).getId()).setFormat("full").execute();

//How I get the content
 private String getMessageContent(Message message) {
        StringBuilder stringBuilder = new StringBuilder();
        try {
            if(message.getPayload().getParts() != null) {
                handleEmailMainContent(message.getPayload().getParts(), stringBuilder);
                byte[] bodyBytes = Base64.decodeBase64(stringBuilder.toString());
                //System.out.println(new String(bodyBytes, "UTF-8"));
                String untrustedHTML = new String(bodyBytes, "UTF-8");
                // sanitize content before saving it
                System.out.println(untrustedHTML);
                return sanitizeContent(untrustedHTML);
            } else {
                return "";
            }
        } catch (UnsupportedEncodingException e) {
           System.out.println("UnsupportedEncoding: " + e.toString());
            return message.getSnippet();
        }
    }

    private void handleEmailMainContent(List<MessagePart> messageParts, StringBuilder stringBuilder) {
        for (MessagePart messagePart : messageParts) {
            switch (messagePart.getMimeType()) {
                case "text/plain":
                    handleMimeTypeTextPlain(messagePart, stringBuilder);
                    break;
                case "text/html":
                    handleMimeTypeTextHtml(messagePart, stringBuilder);
                    break;
                default:
                    break;
            }
        }
    }

private void handleMimeTypeTextPlain(MessagePart messagePart, StringBuilder stringBuilder) {
        stringBuilder.append(messagePart.getBody().getData());
        stringBuilder.append(System.lineSeparator());
    }

    private void handleMimeTypeTextHtml(MessagePart messagePart, StringBuilder stringBuilder) {
        stringBuilder.append(messagePart.getBody().getData());
        stringBuilder.append(System.lineSeparator());
    }

Фрагмент того, что я извлекаю (безанизированный)

[image: logo]
Become part of the Heally family on *Facebook*
<https://tech.us10.list-manage.com/track/click?u=699dcccc14610bc14c55eb9d6&id=fc3bc83b82&e=8396d913ca>
!
- LET'S TALK
Celebraing Mom
*...*
Moms run the world. They literally give us life, take on one of the hardest
roles, and do it all without an end to their workday or any time off. While
moms deserve to be celebrated year-round, Mother’s Day is a special time to
make sure they know they’re loved and appreciated.
LEARN MORE
<https://tech.us10.list-manage.com/track/click?u=699dcccc14610bc14c55eb9d6&id=b05060d980&e=8396d913ca>


Looking for CBD only Products?
PROMO CODE: *SAVECBD20*

Я очищаю HTML-код по соображениям безопасности, но я даже пробовал неанализованную версию, но безуспешно.

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

...