【发布时间】:2011-01-12 08:45:33
【问题描述】:
在 BT2006R2 中,我有一个编排,它接收具有电子邮件属性的 XML,例如:收件人、抄送、主题、htmlbody 的文件位置、带有 pdf 文件的 1..n 文件位置
我希望编排使用 SMTP 适配器发送 1 封电子邮件,其中包含 HTML 电子邮件正文和 1..n 个 pdf 文件作为附件。
如何做到这一点?
【问题讨论】:
在 BT2006R2 中,我有一个编排,它接收具有电子邮件属性的 XML,例如:收件人、抄送、主题、htmlbody 的文件位置、带有 pdf 文件的 1..n 文件位置
我希望编排使用 SMTP 适配器发送 1 封电子邮件,其中包含 HTML 电子邮件正文和 1..n 个 pdf 文件作为附件。
如何做到这一点?
【问题讨论】:
你真的在这里问了三个单独的问题。
我在下面逐一介绍 - 问题 2 最简单的解决方案实际上避免了处理问题 3。
希望这将使您走上解决此问题的正确轨道。可悲的是,它太宽泛了,以至于我无法给出一个单一的“这就是你如何回答”,但如果你遇到障碍,请回来发布更多问题。
如何在 BizTalk 中发送 HTML 电子邮件
我知道有两种方法可以实现这一点。
一种是使用 RawString 类并将其直接分配给您的电子邮件正文。这在blog post by Tomas Restropo 中得到了很好的证明。
第二种方法是使用XSLT Transform Pipeline 组件详解here on MSDN。这允许您指定将普通测试消息正文转换为 HTML 正文的 XSLT 模板。
我过去使用过这两种方法。每个都有其优点和缺点。模板方法的一个很好的特性是它在运行时可配置性稍强(但如果您设计得很好,则只有一点)。
如何在 BizTalk 中向电子邮件添加附件
同样,在 BizTalk 中有两种主要的实现方法。
第一种方法是使用SMTP.Attachments 上下文属性。在您的业务流程中的消息分配表达式形状中,您有如下代码:
MessageOut(SMTP.Attachments) =
"C:\\Attachments\MyFile.pdf|C:\\Attachments\AnotherFile.pdf";
您只需添加一个文件列表,其中文件路径用竖线分隔。
这可以很好地满足您的要求 - 这是向电子邮件动态添加附件的最简单方法,并且无需将文件实际加载到 BizTalk 中。
此外,上面的表达式形状是简单的代码,因此您可以根据需要使上面的内容动态化。
另一种方法是从 BizTalk 发送多部分消息。根据上下文设置,您可以将所有邮件部分作为附件发送,或将第一部分用作邮件正文。
创建多部分消息有点复杂,所以我不会深入讨论 - 通常你需要一个帮助类来为你的消息添加部分。
上下文属性(在消息分配形状中设置)是:
MessageOut(SMTP.MessagePartsAttachments) = n
// Where n can be one of three values
0 (same as not set) - Do not attach any biztalk message parts. This is a default setting.
1 - Attach only biztalk body part
2 - Attach all parts
如何将文件动态读入 BizTalk 进程
这又涉及到很多,所以我不会详细介绍。还有其他 SO 问题可以解决这个问题。
基本上,如果您使用多部分消息,则需要以某种方式将每个消息部分放入 BizTalk。
你有几个选择:
【讨论】: