使用SMTP适配器在BizTalk中发送带有多个pdf附件的HTML电子邮件

Pat*_*ers 4 biztalk smtp

在BT2006R2中,我有一个编排,它接收带有电子邮件属性的XML,例如:to,cc,subject,htmlbody的文件位置,带有pdf文件的1..n文件位置

我希望业务流程使用带有HTML电子邮件主体和1..n pdf文件作为附件的SMTP适配器发送1封电子邮件.

如何才能做到这一点 ?

Dav*_*all 9

你真的在这里问三个单独的问题.

  1. 如何在BizTalk中发送HTML电子邮件.
  2. 如何在BizTalk中向电子邮件添加附件.
  3. 如何动态读取文件到BizTalk进程.

我在下面解决每个问题 - 问题2的最简单解决方案实际上避免了必须处理问题3.

希望这会让你走上正确的道路来解决这个问题.可悲的是,它是如此广泛,以至于我不能给出一个"这就是你如何回答",但如果你遇到障碍,请回来发布更多问题.

如何在BizTalk中发送HTML电子邮件

我知道有两种方法可以实现这一目标.

一种是使用RawString类并将其直接分配给您的电子邮件正文.在Tomas Restropo的博客文章中充分展示了这一点.

第二种方法是使用MSDN上详述的XSLT转换管道组件.这可以通过允许您指定将简单测试消息正文转换为HTML正文的XSLT模板来实现.

我过去曾使用过这两种方法.每个都有自己的优点和缺点.模板方法的一个很好的特性是它可以稍微更多地配置运行时(但是如果你设计另一种方式,那只会略微).

如何在BizTalk中向电子邮件添加附件

同样,在BizTalk中实现此目的有两种主要方法.

第一种方法是使用SMTP.Attachmentscontext属性.在您的业务流程中的消息分配表达式形状中,您有以下代码:

MessageOut(SMTP.Attachments) = 
    "C:\\Attachments\MyFile.pdf|C:\\Attachments\AnotherFile.pdf";
Run Code Online (Sandbox Code Playgroud)

您只需添加一个文件列表,其中文件路径是管道分隔的.

这可以很好地满足您的要求 - 这是动态添加附件到电子邮件的最简单方法,并且避免需要将文件实际加载到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
Run Code Online (Sandbox Code Playgroud)

如何动态读取文件到BizTalk进程

这又是非常复杂的,所以我不会详细介绍.还有其他SO问题可以解决这个问题.

基本上,如果您使用多部分消息,则需要以某种方式将每个消息部分放入BizTalk中.

你有几个选择:

  • 您将收到的每个文件的静态列表都会发送到接收位置 - 这对您来说不太好,因为它听起来像PDF文件可能会更改
  • 主编排,读取您的控制文件,然后"编排"子编排的行为
  • 基于代码的解决方案 - 一个C#类,它接收您的文件列表并将它们作为消息返回到BizTalk(甚至将它们作为消息部分添加到另一个消息)
  • 某种自定义适配器解决方案 - 可能对您所需要的东西有很大的过度杀伤力.