SendMail カスタム アクティビティ

SendMail サンプルでは、AsyncCodeActivity から派生するカスタム アクティビティを作成して、SMTP を使用して電子メールを送信し、ワークフロー アプリケーション内で使用する方法を示します。 このカスタム アクティビティでは、SmtpClient の機能を使用して、電子メールを非同期的に送信したり、認証付きで送信したりします。 また、テスト モード、トークン置換、ファイル テンプレート、テスト ドロップ パスなどのエンドユーザーの機能も提供しています。

次の表で、SendMail アクティビティの引数の詳細を説明します。

名前 種類 説明
Host 文字列 SMTP サーバー ホストのアドレス。
Port 文字列 ホストの SMTP サービスのポート。
EnableSsl [bool] SmtpClient が、接続を暗号化するために SSL (Secure Sockets Layer) を使用するかどうかを指定します。
UserName 文字列型 差出人の Credentials プロパティを認証する資格情報を設定するユーザー名。
Password (パスワード) 文字列 差出人の Credentials プロパティを認証する資格情報を設定するパスワード。
サブジェクト InArgument<T><string> メッセージの件名。
本文 InArgument<T><string> メッセージの本文。
[Attachments] InArgument<T><string> この電子メール メッセージに添付されるデータの格納に使用される添付データのコレクション。
ソース MailAddress この電子メール メッセージの差出人アドレス。
終了 InArgument<T><MailAddressCollection> この電子メール メッセージの受信者を格納するアドレスのコレクション。
CC InArgument<T><MailAddressCollection> この電子メール メッセージの CC (carbon copy) 受信者を格納するアドレスのコレクション。
BCC InArgument<T><MailAddressCollection> この電子メール メッセージの BCC (blind carbon copy) 受信者を格納するアドレスのコレクション。
トークン InArgument<T><IDictionary<string, string>> 本文で置換するトークン。 この機能を使用すると、本文にいくつかの値を指定した後、このプロパティを使用して提供されるトークンで置換できます。
BodyTemplateFilePath 文字列 本文のテンプレートのパス。 SendMail アクティビティは、このファイルの内容をその body プロパティにコピーします。

テンプレートは、tokens プロパティの内容によって置き換えられるトークンを含めることができます。
TestMailTo MailAddress このプロパティを設定すると、それで指定されたアドレスにすべての電子メールが送信されます。

このプロパティは、ワークフローをテストするときに使用するためのものです。 たとえば、実際の受信者に送信せずに、すべての電子メールが送信されることを確認します。
TestDropPath 文字列 このプロパティを設定すると、すべての電子メールが指定したファイルにも保存されます。

このプロパティは、ワークフローのテストやデバッグを行うときに使用したり、送信する電子メールの形式や内容が適切であることを確認したりするためのものです。

ソリューションのコンテンツ

ソリューションには、次の 2 つのプロジェクトが含まれています。

プロジェクト 説明 重要なファイル
SendMail SendMail アクティビティ 1. SendMail.cs: main アクティビティの実装
2. SendMailDesigner.xaml および SendMailDesigner.xaml.cs: SendMail アクティビティのデザイナー
3. MailTemplateBody.htm: 送信される電子メールのテンプレート。
SendMailTestClient SendMail アクティビティをテストするクライアント。 このプロジェクトでは、SendMail アクティビティを宣言的に起動する方法とプログラムで起動する方法を示します。 1. Sequence1.xaml: SendMail アクティビティを起動するワークフロー。
2. Program.cs: Sequence1 を呼び出し、SendMail を使用するワークフローもプログラムで作成します。

SendMail アクティビティの追加構成

サンプルには表示されませんが、SendMail アクティビティの追加構成を実行できます。 次の 3 つのセクションは、その方法を示しています。

本文で指定されたトークンを使用した電子メールの送信

次のコード スニペットでは、本文のトークンを使用して電子メールを送信する方法を示します。 トークンが body プロパティに指定されていることに注目してください。 それらのトークンの値は、tokens プロパティに指定されています。

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",
};

テスト モードでの電子メールの送信

次のコード スニペットでは、2 つのテスト プロパティを設定する方法を示します。すべてのメッセージに TestMailTo を設定すると、(To、Cc、Bcc の値に関係なく) john.doe@contoso.con に送信されます。 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. サーバー アドレスと電子メールの差出人アドレスおよび宛先アドレスを使用してプログラムを構成します。

    このサンプルを正しく実行するには、メールの差出人アドレスおよび宛先アドレスの値と SMTP サーバーのアドレスを Program.cs および Sequence.xaml 内で構成する必要がある場合があります。 プログラムでは電子メールが 2 つの方法で送信されるため、両方の場所でアドレスを変更する必要があります。

  4. ソリューションをビルドするには、Ctrl キーと Shift キーを押しながら B キーを押します。

  5. ソリューションを実行するには、Ctrl キーを押しながら F5 キーを押します。