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

このサンプルでは、AsyncCodeActivity から派生するカスタム アクティビティを作成して、SMTP を使用して電子メールを送信し、ワークフロー アプリケーション内で使用する方法を示します。This sample demonstrates how to create a custom activity that derives from AsyncCodeActivity to send mail using SMTP for use within a workflow application. カスタム アクティビティの機能を使用してSmtpClient非同期的に電子メールを送信して、認証を使用したメールを送信します。The custom activity uses the capabilities of SmtpClient to send email asynchronously and to send mail with authentication. また、テスト モード、トークン置換、ファイル テンプレート、テスト ドロップ パスなどのエンドユーザーの機能も提供しています。It also provides some end-user features like test mode, token replacement, file templates, and test drop path.

次の表で、SendMail アクティビティの引数の詳細を説明します。The following table details the arguments for the SendMail activity.

名前Name 種類Type 説明Description
ホストHost StringString SMTP サーバー ホストのアドレス。Address of the SMTP server host.
ポートPort StringString ホストの SMTP サービスのポート。Port of the SMTP service in the host.
EnableSslEnableSsl boolbool SmtpClient が、接続を暗号化するために SSL (Secure Sockets Layer) を使用するかどうかを指定します。Specifies whether the SmtpClient uses Secure Sockets Layer (SSL) to encrypt the connection.
UserNameUserName StringString 差出人の Credentials プロパティを認証する資格情報を設定するユーザー名。Username to set up the credentials to authenticate the sender Credentials property.
[Password]Password StringString 差出人の Credentials プロパティを認証する資格情報を設定するパスワード。Password to set up the credentials to authenticate the sender Credentials property.
SubjectSubject InArgument<T><string>InArgument<T><string> メッセージの件名。Subject of the message.
本文Body InArgument<T><string>InArgument<T><string> メッセージの本文。Body of the message.
添付ファイルAttachments InArgument<T><string>InArgument<T><string> この電子メール メッセージに添付されるデータの格納に使用される添付データのコレクション。Attachment collection used to store data attached to this email message.
FromFrom MailAddress この電子メール メッセージのアドレス。From address for this email message.
目的To InArgument<T><MailAddressCollection> この電子メール メッセージの受信者を格納するアドレスのコレクション。Address collection that contains the recipients of this email message.
CCCC InArgument<T><MailAddressCollection> この電子メール メッセージのカーボン コピー (CC) 受信者を格納するコレクションをアドレスします。Address collection that contains the carbon copy (CC) recipients for this email message.
BCCBCC InArgument<T><MailAddressCollection> この電子メール メッセージのブラインド カーボン コピー (BCC) 受信者を格納するアドレスのコレクション。Address collection that contains the blind carbon copy (BCC) recipients for this email message.
トークンTokens InArgument<T>< IDictionary<, string >>InArgument<T><IDictionary<string, string>> 本文で置換するトークン。Tokens to replace in the body. この機能を使用すると、本文にいくつかの値を指定した後、このプロパティを使用して提供されるトークンで置換できます。This feature allows users to specify some values in the body than can be replaced later by the tokens provided using this property.
BodyTemplateFilePathBodyTemplateFilePath StringString 本文のテンプレートのパス。Path of a template for the body. SendMail アクティビティは、このファイルの内容をその body プロパティにコピーします。The SendMail activity copies the contents of this file to its body property.

テンプレートは、tokens プロパティの内容によって置き換えられるトークンを含めることができます。The template can contain tokens that are replaced by the contents of the tokens property.
TestMailToTestMailTo MailAddress このプロパティが設定されている場合は、すべての電子メールが指定されているアドレスに送信されます。When this property is set, all emails are sent to the address specified in it.

このプロパティは、ワークフローをテストするときに使用するためのものです。This property is intended to be used when testing workflows. たとえば、ことを確認する場合に、すべての電子メールが実際の受信者に送信せず送信されます。For example, when you want to make sure that all emails are sent without sending them to the actual recipients.
TestDropPathTestDropPath StringString このプロパティが設定されている場合、すべての電子メールは、指定したファイルにも保存されます。When this property is set, all emails are also saved in the specified file.

このプロパティは、送信メールの内容と形式が適切であるかどうかを確認する、ワークフローのデバッグまたはテストするときに使用されるものです。This property is intended to be used when you are testing or debugging workflows, to make sure that the format and contents of the outgoing emails is appropriate.

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

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

プロジェクトProject 説明Description 重要なファイルImportant Files
SendMailSendMail SendMail アクティビティThe SendMail activity 1.SendMail.cs: main アクティビティの実装1. SendMail.cs: implementation for the main activity
2.SendMailDesigner.xaml および SendMailDesigner.xaml.cs: SendMail アクティビティのデザイナー2. SendMailDesigner.xaml and SendMailDesigner.xaml.cs: designer for the SendMail activity
3.MailTemplateBody.htm: 送信される電子メールのテンプレート3. MailTemplateBody.htm: template for the email to be sent out.
SendMailTestClientSendMailTestClient SendMail アクティビティをテストするクライアント。Client to test the SendMail activity. このプロジェクトでは、SendMail アクティビティを宣言的に起動する方法とプログラムで起動する方法を示します。This project demonstrates two ways of invoking the SendMail activity: declaratively, and programmatically. 1.Sequence1.xaml: SendMail アクティビティを起動するワークフロー1. Sequence1.xaml: workflow that invokes the SendMail activity.
2.Program.cs: Sequence1 を呼び出し、SendMail を使用するワークフローもプログラムで作成します。2. Program.cs: invokes Sequence1 and also creates a workflow programmatically that uses SendMail.

SendMail アクティビティの追加構成Further configuration of the SendMail activity

サンプルには表示されませんが、SendMail アクティビティの追加構成を実行できます。Although not shown in the sample, users can perform addition configuration of the SendMail activity. 次の 3 つのセクションは、その方法を示しています。The next three sections demonstrate how this is done.

本文で指定されたトークンを使用した電子メールの送信Sending an email using tokens specified in the body

次のコード スニペットでは、本文のトークンを使用して電子メールを送信する方法を示します。This code snippet demonstrates how you can send email with tokens in the body. トークンが body プロパティに指定されていることに注目してください。Notice how the tokens are provided in the body property. それらのトークンの値は、tokens プロパティに指定されています。Values for those tokens are provided to the tokens property.

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)  
};  

テンプレートを使用した電子メールの送信Sending an email using a template

次のスニペットでは、本文のテンプレート トークンを使用して電子メールを送信する方法を示します。This snippet shows how to send an email using a template tokens in the body. BodyTemplateFilePath プロパティを設定するときに、Body プロパティの値を指定する必要がないことに注目してください (テンプレート ファイルのコンテンツは本文にコピーされます)。Notice that when setting the BodyTemplateFilePath property we don’t need to provide the value for Body property (the contents of the template file will be copied to the 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",   
};  

テスト モードでの電子メールの送信Sending Mails in Testing Mode

このコード スニペットは、2 つのテストのプロパティを設定する方法を示します。 設定してTestMailToすべてのメッセージには、に送信されますjohn.doe@contoso.con(To、Cc、Bcc の値を考慮) なし。This code snippet shows how to set the two testing properties: by setting TestMailTo to all messages will be sent to john.doe@contoso.con (without regard of the values of To, Cc, Bcc). TestDropPath を設定すると、送信するすべての電子メールは、指定したパスにも記録されます。By setting TestDropPath all outgoing emails will be also recorded in the provided path. これらのプロパティは、個別に設定できます (関連していません)。These properties can be set independently (they are not related).

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

セットアップ手順Set-Up Instructions

このサンプルでは SMTP サーバーにアクセスする必要があります。Access to a SMTP server is required for this sample.

SMTP サーバーの設定に関する詳細については、次のリンクを参照してください。For more information about setting up a SMTP server, see the following links.

ダウンロードには、サードパーティで提供されている SMTP エミュレーターを使用できます。SMTP emulators provided by third parties are available for download.

このサンプルを実行するにはTo run this sample
  1. Visual Studio 2010 を使用して、SendMail.sln ソリューション ファイルを開きます。Using Visual Studio 2010, open the SendMail.sln solution file.

  2. 有効な SMTP サーバーへのアクセス権があることを確認してください。Ensure that you have access to a valid SMTP server. セットアップ手順を参照してください。See the set-up instructions.

  3. サーバー アドレスとの電子メール アドレスには、プログラムを構成します。Configure the program with your server address, and From and To email addresses.

    このサンプルを正しく実行するには、Program.cs および Sequence.xaml の値からその電子メール アドレス、SMTP サーバーのアドレスを構成する必要があります。To correctly run this sample, you may need to configure the value of From and To email addresses and the address of the SMTP server in Program.cs and in Sequence.xaml. プログラムでは電子メールが 2 つの方法で送信されるため、両方の場所でアドレスを変更する必要があります。You will need to change the address in both locations since the program sends mail in two different ways

  4. ソリューションをビルドするには、Ctrl キーと Shift キーを押しながら B キーを押します。To build the solution, press CTRL+SHIFT+B.

  5. ソリューションを実行するには、Ctrl キーを押しながら F5 キーを押します。To run the solution, press CTRL+F5.

重要

サンプルは、既にコンピューターにインストールされている場合があります。The samples may already be installed on your machine. 続行する前に、次の (既定の) ディレクトリを確認してください。Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

このディレクトリが存在しない場合に移動Windows Communication Foundation (WCF) と .NET Framework 4 向けの Windows Workflow Foundation (WF) サンプルすべて Windows Communication Foundation (WCF) をダウンロードしてWFWFサンプル。If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. このサンプルは、次のディレクトリに格納されます。This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WF\Scenario\ActivityLibrary\SendMail