All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mastfrog.email.server.DefaultHtmlMessageFormatter Maven / Gradle / Ivy

package com.mastfrog.email.server;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.mastfrog.settings.Settings;
import com.mastfrog.util.preconditions.Exceptions;
import com.mastfrog.util.streams.Streams;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;

@Singleton
final class DefaultHtmlMessageFormatter implements HtmlMessageFormatter {

    private final HtmlTemplateProvider provider;
    private final boolean escape;
    @Inject
    DefaultHtmlMessageFormatter(HtmlTemplateProvider prov, Settings settings) {
        this.provider = prov;
        escape = settings.getBoolean("email.escape.html", true);
    }

    private String escape(String s) {
        if (!escape) {
            return s;
        }
        return s.replace("&", "&")
                .replace("<", "<")
                .replace(">", ">")
                .replace("\n", "

") .replace("@", "@"); } @Override public String format(EmailAddress sender, String subject, String body, Map injected) { Template tpl = provider.template(null); Map model = new HashMap<>(injected); model.put("subject", escape(subject)); model.put("message", escape(body)); model.put("from", sender.toString()); try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { tpl.process(model, new OutputStreamWriter(out, "UTF-8")); String result = Streams.readString(new ByteArrayInputStream(out.toByteArray()), "UTF-8", 256); return result; } catch (TemplateException | IOException ex) { return Exceptions.chuck(ex); } } @Override public > String format(T template, EmailAddress sender, String subject, String body, Map injected) { Template tpl = provider.template(template); Map model = new HashMap<>(injected); model.put("subject", escape(subject)); model.put("message", escape(body)); model.put("from", sender.toString()); try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { tpl.process(model, new OutputStreamWriter(out, "UTF-8")); String result = Streams.readString(new ByteArrayInputStream(out.toByteArray()), "UTF-8", 256); return result; } catch (TemplateException | IOException ex) { return Exceptions.chuck(ex); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy