共用方式為


SendMail 自訂活動

SendMail 範例 (英文) 示範如何建立衍生自 AsyncCodeActivity 的自訂活動,以使用 SMTP 傳送郵件,以便在工作流程應用程式內使用。 自訂活動會使用 SmtpClient 的功能,以非同步方式傳送電子郵件及傳送具有驗證的郵件。 也會提供一些終端使用者功能,例如測試模式、語彙基元替換、檔案範本和測試置放路徑。

下表詳細說明 SendMail 活動的引數。

名稱 類型​​ 描述
Host String SMTP 伺服器主機的位址。
連接埠 String SMTP 服務在主機中的連接埠。
EnableSsl bool 指定 SmtpClient 是否使用 Secure Sockets Layer (SSL) 加密連接。
UserName String 設定認證來驗證寄件者 Credentials 屬性的使用者名稱。
密碼 String 設定認證來驗證寄件者 Credentials 屬性的密碼。
主旨 InArgument<T><string> 訊息的主旨。
Body InArgument<T><string> 訊息的本文。
附件 InArgument<T><string> 附件集合可用於儲存附加到此電子郵件訊息的資料。
MailAddress 此電子郵件訊息的寄件者地址。
InArgument<T><MailAddressCollection> 地址集合,其中包含此電子郵件訊息的收件者。
CC InArgument<T><MailAddressCollection> 地址集合,其中包含此電子郵件訊息的副本 (CC) 收件者。
BCC InArgument<T><MailAddressCollection> 地址集合,其中包含此電子郵件訊息的密件副本 (BCC) 收件者。
語彙基元 InArgument<T><IDictionary<string, string>> 本文內所要取代的語彙基元。 此功能可讓使用者在本文中指定某些值,而之後可由使用這個屬性所提供的語彙基元所取代。
BodyTemplateFilePath String 本文的範本路徑。 SendMail 活動會將這個檔案的內容複製到它的本文屬性。

此範本包含的語彙基元可由語彙基元屬性的內容所取代。
TestMailTo MailAddress 設定此屬性時,所有電子郵件都會傳送給其中指定的地址。

當測試工作流程時,並不適合使用這個屬性。 例如,當您想在不將電子郵件傳送給實際收件者的情況下,確定所有電子郵件都已傳送時。
TestDropPath String 設定此屬性時,所有電子郵件也會儲存在指定的檔案中。

此屬性適用於當您正在對工作流程進行測試或偵錯,以確定傳出電子郵件的格式和內容適合時。

方案內容

此方案包含兩個專案。

專案 描述 重要檔案
SendMail SendMail 活動 1.SendMail.cs:主要活動的實作
2.SendMailDesigner.xaml 和 SendMailDesigner.xaml.cs:SendMail 活動的設計工具
3.MailTemplateBody.htm:要外送之電子郵件的範本。
SendMailTestClient 測試 SendMail 活動的用戶端。 此專案會示範兩個方式來叫用 SendMail 活動:宣告方式和程式設計方式。 1.Sequence1.xaml:叫用 SendMail 活動的工作流程。
2.Program.cs:叫用 Sequence1,還要以程式設計方式建立使用 SendMail 的工作流程。

SendMail 活動的進一步組態設定

使用者可以執行 SendMail 活動的進一步組態設定,但是本範例並未顯示這個部分。 以下三節將示範如何進行這項處理。

使用本文內指定的語彙基元傳送電子郵件

此程式碼片段會示範如何使用本文的語彙基元來傳送電子郵件。 請注意本文屬性內是如何提供語彙基元。 這些語彙基元的值會提供給語彙基元屬性。

IDictionary<string, string> tokens = new Dictionary<string, string>();
tokens.Add("@name", "John Doe");
tokens.Add("@date", DateTime.Now.ToString());
tokens.Add("@server", "localhost");

new SendMail
{
    From = new LambdaValue<MailAddress>(ctx => new MailAddress("john.doe@contoso.com")),
    To = new LambdaValue<MailAddressCollection>(
                    ctx => new MailAddressCollection() { new MailAddress("someone@microsoft.com") }),
    Subject = "Test email",
    Body = "Hello @name. This is a test email sent from @server. Current date is @date",
    Host = "localhost",
    Port = 25,
    Tokens = new LambdaValue<IDictionary<string, string>>(ctx => tokens)
};

使用範本傳送電子郵件

此程式碼片段會示範如何使用本文的範本語彙基元來傳送電子郵件。 請注意,在設定 BodyTemplateFilePath 屬性時,不需要為 Body 屬性提供值 (範本檔案的內容將會複製到主體中)。

new SendMail
{
    From = new LambdaValue<MailAddress>(ctx => new MailAddress("john.doe@contoso.com")),
    To = new LambdaValue<MailAddressCollection>(
                    ctx => new MailAddressCollection() { new MailAddress("someone@microsoft.com") }),
    Subject = "Test email",
    Host = "localhost",
    Port = 25,
    Tokens = new LambdaValue<IDictionary<string, string>>(ctx => tokens),
    BodyTemplateFilePath = @"..\..\..\SendMail\Templates\MailTemplateBody.htm",
};

在測試模式下傳送郵件

此程式碼片段示範如何設定這兩個測試屬性:針對將傳送至 john.doe@contoso.con 的所有訊息設定 TestMailTo (不考慮收件者、副本、密件副本的值)。 設定 TestDropPath 之後,所有外送的電子郵件也會記錄在提供的路徑上。 這些屬性可以獨立設定 (屬性之間並沒有相關性)。

new SendMail
{
   From = new LambdaValue<MailAddress>(ctx => new MailAddress("john.doe@contoso.com")),
   To = new LambdaValue<MailAddressCollection>(
                    ctx => new MailAddressCollection() { new MailAddress("someone@microsoft.com") }),
   Subject = "Test email",
   Host = "localhost",
   Port = 25,
   Tokens = new LambdaValue<IDictionary<string, string>>(ctx => tokens),
   BodyTemplateFilePath = @"..\..\..\SendMail\Templates\MailTemplateBody.htm",
   TestMailTo= new LambdaValue<MailAddress>(ctx => new MailAddress("john.doe@contoso.com")),
   TestDropPath = @"c:\Samples\SendMail\TestDropPath\",
};

設定指示

這個範例需要 SMTP 伺服器的存取權。

如需設定 SMTP 伺服器的詳細資訊,請參閱下列連結。

協力廠商提供的 SMTP 模擬器可供您下載。

若要執行這個範例

  1. 使用 Visual Studio,開啟 SendMail.sln 解決方案檔。

  2. 確定您可以存取有效的 SMTP 伺服器。 請參閱設定指示。

  3. 使用您的伺服器位址及寄件者和收件者電子郵件地址來設定程式。

    若要正確執行此範例,您可能需要在 Program.cs 和 Sequence.xaml 中設定寄件者和收件者電子郵件地址的值及 SMTP 伺服器的位址。 您需要在這兩個位置中變更地址,因為此程式會以兩個不同的方式傳送郵件。

  4. 若要建置此方案,請按 CTRL+SHIFT+B。

  5. 若要執行此方案,請按下 CTRL+F5。