为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Apache Camel 邮件组件将正文作为附件发送?

为什么 Apache Camel 邮件组件将正文作为附件发送?

守候你守候我 2021-06-29 16:57:03
我正在使用 Apache Camel 2.22.0 并且有一个发送电子邮件的简单路由(带有一些属性引用):public class EmailFailureRoute extends RouteBuilder {@Overridepublic void configure() {    from("seda:mail")        .setHeader("To", simple("{{mail.failure.to}}"))        .setHeader("From", simple("{{mail.failure.from}}"))        .setHeader("Subject", constant("TEST!"))        .to("velocity://templates/failure-mail.vm")        .to("{{mail.smtpServer}}");  }}我希望得到的是一封普通电子邮件,邮件正文中包含来自 Velocity 模板的文本。我实际收到的是一封电子邮件,其中附有来自 Velocity 模板的文本。在 MS Outlook 中看起来像这样:为什么是附件?如何让邮件组件将 Velocity 模板的结果直接插入到电子邮件正文中?
查看完整描述

2 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

虽然我仍然不太明白这里发生了什么,但我确实有一个可行的解决方案。我可以更改电子邮件的内容类型的唯一方法是在路由到邮件端点之前在 Camel 消息上设置“Content-Type”标头:

.setHeader("Content-Type", constant("text/plain"))

我什至无法通过使用邮件组件上的“contentType”查询参数来更改内容类型。


查看完整回答
反对 回复 2021-07-07
?
当年话下

TA贡献1890条经验 获得超9个赞

你最近怎么样,经历了类似的事情并通过以下方式解决了我希望它会有所帮助


@Handler

public void attachmentValidate(@ExchangeProperty("MAIL_ATTACHMENTS") List<Attachment> attachments,

        Exchange exchange) throws Exception {

    Message in = exchange.getIn();

    if (attachments != null) {

        for (Attachment attachment : attachments) {

            FileNameMap fileNameMap = URLConnection.getFileNameMap();

            String mimeType = fileNameMap.getContentTypeFor(attachment.getName()

                    .substring(attachment.getName().indexOf('.'), attachment.getName().length()));

            if (StringUtils.isEmpty(mimeType)) {

                mimeType = "application/octet-stream";

            }

            byte[] decoded = Base64.getDecoder().decode(attachment.getValue());

            in.addAttachment(attachment.getName(), new DataHandler(new ByteArrayDataSource(decoded, mimeType)));

        }

    }

    exchange.setProperty("MAIL_ATTACHMENTS", attachments);

}


查看完整回答
反对 回复 2021-07-07
  • 2 回答
  • 0 关注
  • 227 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信