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

时间:2010-02-02 21:12:53

标签: smtp biztalk

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

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

如何做到这一点?

1 个答案:

答案 0 :(得分:9)

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

  1. 如何在BizTalk中发送HTML电子邮件。
  2. 如何在BizTalk中向电子邮件添加附件。
  3. 如何动态地将文件读入BizTalk进程。
  4. 我在下面解决每个问题 - 问题2的最简单解决方案实际上避免了必须处理问题3.

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

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

    我知道有两种方法可以达到这个目的。

    一种方法是使用RawString类并将其直接分配给您的电子邮件正文。在blog post by Tomas Restropo中已经很好地证明了这一点。

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

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

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

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

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

    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中。

    您有几个选择:

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