0

我在 Mule smtp 中使用 Velocity Transformer 电子邮件模板。有什么方法可以在我的类路径中的电子邮件模板中添加图像?例如..如果我的类路径中有一个图像说 abc.png,我可以在我的速度电子邮件模板中使用它,如 < image src= ......

4

3 回答 3

1

1)嵌入图像Base64编码在你的HTML例如

使用以下站点将图像转换为 base64: http ://www.dailycoding.com/Utils/Converter/ImageToBase64.aspx

于 2014-09-17T09:00:59.037 回答
1

您可以将出站附件添加到 Mule 消息,使用类路径资源作为其来源。这些 Mule 消息附件将由 SMTP 出站转换器转换为 MIME 部分。

从这里的讨论Embedding images into html email with java mail看来你需要像这样声明图像:

<img src=\"cid:uniqueImageID\"/>

您必须在 cid: 之后使用唯一 ID,这与 Content-ID 部分标头一致。Mule 允许您通过添加名为 attachmentName+"Headers" 的出站消息属性 java.util.Map 来指定自定义部分标题(attachmentName 是出站附件的名称)。

一个潜在的困难是转换器中的代码负责在仅调用ObjectToMimeMessage中转换javax.activation.DataHandler(来自 Mule 消息出站附件),但我认为不是图像正确显示所必需的。这就是说,我不是这里的专家,你可能知道更多关于正确生成带有附加图像的 MIME 电子邮件。javax.mail.BodyPartsetFileNamesetDisposition

于 2013-09-22T23:16:03.857 回答
0

我按照您的代码通过以下方式在速度转换器中添加图像路径,字符串徽标将从弹簧豆中获取值

public final class MessageTransformer extends AbstractMessageTransformer
{
    private VelocityEngine velocityEngine;
    private String         templateName;
    private Template       template;

   //This part is for getting the value from property file by declaring setter and getter for fileName and  subscriberName

    private String logo;
    public String getLogo() {
        return logo;
    }  
    public void setLogo(String logo) {
        this.logo = logo;
    }

    //This part is for getting template for email from classpath configured in mule flow
    public VelocityMessageTransformer()
    {
        registerSourceType(Object.class);
        setReturnDataType(new SimpleDataType<String>(String.class));
    }

    public void setVelocityEngine(final VelocityEngine velocityEngine)
    {
        this.velocityEngine = velocityEngine;
    }

    public void setTemplateName(final String templateName)
    {
        this.templateName = templateName;
    }

    @Override
    public void initialise() throws InitialisationException
    {
        try
        {
            template = velocityEngine.getTemplate(templateName);
        }
        catch (final Exception e)
        {
            throw new InitialisationException(e, this);
        }
    }

    @Override
    public Object transformMessage(final MuleMessage message, final String outputEncoding)throws TransformerException
    {


        try
        {
            final StringWriter result = new StringWriter();
            FileDataSource myFile = new FileDataSource (new File (logo)); // It contains path of image file
            message.setOutboundProperty("logo", myFile);
            // -------------------------------------------------------

            final Map<String, Object> context = new HashMap<String, Object>();
            context.put("message", message);
            context.put("payload", message.getPayload());
            context.put("logo", message.getOutboundProperty("logo"));
            template.merge(new VelocityContext(context), result); //Merging all the attributes
            System.out.println("MAIL WITH TEMPLATE SEND SUCCESSFULLY !!!");
            System.out.println( result.toString() );
            return result.toString();               
        }
        catch (final Exception e)
        {
            throw new TransformerException(
                           MessageFactory.createStaticMessage("Can not transform message with template: " + template)
                      , e);
        }
    }
}
于 2013-09-25T17:45:14.193 回答