代码之家  ›  专栏  ›  技术社区  ›  Patrick Peters

在带有多个带SMTP适配器的PDF附件的Biztalk中发送HTML电子邮件

  •  4
  • Patrick Peters  · 技术社区  · 15 年前

    在bt2006r2中,我有一个业务流程,它接收带有电子邮件属性的XML,如:to、cc、subject、htmlbody的filelocation、1..n带有PDF文件的filelocations。

    我希望业务流程使用SMTP适配器发送1封电子邮件,HTML电子邮件正文和1..n PDF文件作为附件。

    怎么能做到?

    1 回复  |  直到 11 年前
        1
  •  9
  •   SteveC    11 年前

    你真的在问三个独立的问题。

    1. 如何在Biztalk中发送HTML电子邮件。
    2. 如何在Biztalk中向电子邮件添加附件。
    3. 如何动态地将文件读入一个Biztalk进程。

    我在下面每一个问题上都做了说明——问题2最简单的解决方案实际上避免了处理问题3。

    希望这能让你找到解决这个问题的正确途径。可悲的是,它太宽泛了,我无法给出一个单一的“这就是你的答案”,但如果你遇到了障碍,请回来并发表更多的问题。

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

    我知道有两种方法可以做到这一点。

    一种是使用rawstring类并将其直接分配给您的电子邮件正文。这是很好的证明 blog post by Tomas Restropo .

    第二种方法是使用xslt转换管道组件detailed 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进程

    这又涉及了很多,所以我不会再详细讨论。还有其他的问题可以解决这个问题。

    本质上,如果您使用的是多部分消息,那么您需要以某种方式将每个消息部分放入Biztalk。

    您有几个选择:

    • 静态的文件列表,你将收到每个去一个接收位置-不太适合你,因为它听起来像PDF文件可以改变。
    • 主编排,读取控制文件,然后“编排”子编排的行为
    • 基于代码的解决方案-一个C类,它获取文件列表并将其作为消息返回到Biztalk(甚至将其作为消息部分添加到另一条消息中)
    • 某种定制适配器解决方案——可能对您需要的东西有很大的杀伤力。