2010-02-02 20 views

回答

9

你真的在這裏問三個單獨的問題。

  1. 如何在BizTalk中發送HTML電子郵件。
  2. 如何在BizTalk中的電子郵件中添加附件。
  3. 如何動態讀取文件到BizTalk進程。

我解決每個以下 - 最簡單的解決方案實際上避免了不得不解決的問題3.

希望這將讓你在正確的軌道解決這個上發出2。可悲的是,它太廣泛了,我不能給出一個「這就是你怎麼做的答案」,但如果你遇到困難,回來併發布更多的問題。

如何發送HTML郵件在BizTalk

有兩種方法,我知道要實現這一點。

一個是使用RawString類,並將其直接分配給您的電子郵件正文。這在blog post by Tomas Restropo中得到了很好的證明。

第二種方法是使用XSLT Transform Pipeline組件詳細的here on MSDN。這可以讓你指定XSLT模板,它將把簡單的測試消息體轉換成HTML體。

我在過去曾使用這兩種方法。每個人都有自己的長處和短處。模板方法的一個很好的功能是它稍微有更多的運行時可配置性(但只有稍微設計好其他方式)。

如何添加附件在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。

您有幾種選擇:

  • 靜態文件的列表中,您將收到每個要接收位置 - 因爲它聽起來像PDF文件可以改變
  • 主業務流程對你不那麼好,讀取您的控制文件,然後「編排」兒童業務流程的行爲
  • 基於代碼的解決方案 - 一種C#類,它接受您的文件列表並將它們作爲消息返回給BizTalk(甚至將它們作爲消息部分添加到另一個消息)
  • 有些一些自定義適配器解決方案 - 可能是你需要的巨大矯枉過正。
+0

大衛嗨,你在這裏做了一些功課;-)非常感謝。我已經在互聯網上做了一些更多的閱讀,現在我有一個很好的工作解決方案,通過使用html正文的rawstring並動態地添加一個輔助類(作爲部分)的附件。 –

+0

@帕特里克很高興聽到你有這個工作。 BT中的一些「簡單」事情就像發送帶有附件的格式良好的電子郵件一樣很難實現 - 這幾乎就像基本工具不斷受到高級功能的影響。 –

+0

我意識到這是舊的,但是當我昨天整天搜索一個類似的問題時,這篇文章不斷出現。我試圖將PDF附加到電子郵件中,並且從未獲得pdf。我不得不改變發送管道'傳遞通過傳輸'http://stackoverflow.com/questions/31550160/add-pdf-attachment-to-biztalk-email-service – Ju66ernaut