我在 Mule smtp 中使用 Velocity Transformer 电子邮件模板。有什么方法可以在我的类路径中的电子邮件模板中添加图像?例如..如果我的类路径中有一个图像说 abc.png,我可以在我的速度电子邮件模板中使用它,如 < image src= ......
3 回答
1)嵌入图像Base64编码在你的HTML例如
使用以下站点将图像转换为 base64: http ://www.dailycoding.com/Utils/Converter/ImageToBase64.aspx
您可以将出站附件添加到 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.BodyPart
setFileName
setDisposition
我按照您的代码通过以下方式在速度转换器中添加图像路径,字符串徽标将从弹簧豆中获取值
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);
}
}
}