次の方法で共有


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

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

次の表では、 SendMail アクティビティの引数について詳しく説明します。

名前 タイプ 説明
ホスト SMTP サーバー ホストのアドレス。
港 / ポート ホスト内の SMTP サービスのポート。
EnableSsl ブール (bool) SmtpClientが Secure Sockets Layer (SSL) を使用して接続を暗号化するかどうかを指定します。
UserName 送信者 Credentials プロパティを認証するための資格情報を設定するユーザー名。
パスワード 送信者 Credentials プロパティを認証するための資格情報を設定するパスワード。
サブジェクト InArgument<T> <ストリング> メッセージの件名。
InArgument<T> <ストリング> メッセージの本文。
添付ファイル InArgument<T> <ストリング> この電子メール メッセージに添付されたデータを格納するために使用される添付ファイル コレクション。
より MailAddress この電子メール メッセージの差出人アドレス。
移行先 InArgument<T><MailAddressCollection> この電子メール メッセージの受信者を含むアドレス コレクション。
CC InArgument<T><MailAddressCollection> この電子メール メッセージのカーボン コピー (CC) 受信者を含むアドレス コレクション。
BCC InArgument<T><MailAddressCollection> この電子メール メッセージのブラインド カーボン コピー (BCC) 受信者を含むアドレス コレクション。
トークン InArgument<T> <IDictionary<string, string>> 本文で置換するトークン。 この機能を使用すると、ユーザーは本文内にいくつかの値を指定でき、後でこのプロパティを使用して提供されるトークンによって置き換えることができます。
BodyTemplateFilePath 本文のテンプレートのパス。 SendMail アクティビティは、このファイルの内容を body プロパティにコピーします。

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

このプロパティは、ワークフローをテストするときに使用することを目的としています。 たとえば、すべてのメールが実際の受信者に送信されずに送信されるようにする場合などです。
TestDropPath このプロパティを設定すると、すべてのメールも指定したファイルに保存されます。

このプロパティは、送信メールの形式と内容が適切であることを確認するために、ワークフローをテストまたはデバッグするときに使用することを目的としています。

ソリューションの内容

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

プロジェクト 説明 重要なファイル
センドメール SendMail アクティビティ 1. SendMail.cs: メイン アクティビティの実装
2. SendMailDesigner.xaml と SendMailDesigner.xaml.cs: SendMail アクティビティのデザイナー
3. MailTemplateBody.htm: 送信する電子メールのテンプレート。
SendMailTestClient (メール送信テストクライアント) SendMail アクティビティをテストするクライアント。 このプロジェクトでは、SendMail アクティビティを呼び出す 2 つの方法を示します。宣言型とプログラムによる呼び出しです。 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. サーバー アドレスと From および To メール アドレスを使用してプログラムを構成します。

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

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

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