Freigeben über


Benutzerdefinierte SendMail-Aktivität

Das SendMail-Beispiel veranschaulicht, wie eine benutzerdefinierte Aktivität erstellt wird, die von der Übermittlung von E-Mails mithilfe von AsyncCodeActivity SMTP für die Verwendung in einer Workflowanwendung abgeleitet wird. Die benutzerdefinierte Aktivität verwendet die Funktionen von SmtpClient zum asynchronen Senden von E-Mails und zum Senden von E-Mails mit Authentifizierung. Außerdem werden Endbenutzerfunktionen wie Testmodus, Tokenersetzung, Dateivorlagen und Testablagepfad bereitgestellt.

In der folgenden Tabelle werden die Argumente für die SendMail Aktivität beschrieben.

Name Typ BESCHREIBUNG
Gastgeber Schnur Adresse des SMTP-Serverhosts.
Hafen Schnur Port des SMTP-Diensts im Host.
EnableSsl Boolesch Gibt an, ob die SmtpClient Secure Sockets Layer (SSL) zum Verschlüsseln der Verbindung verwendet wird.
Nutzername Schnur Der Benutzername zum Einrichten der Anmeldeinformationen und Authentifizieren der Credentials-Absendereigenschaft.
Passwort Schnur Das Kennwort zum Einrichten der Anmeldeinformationen und Authentifizieren der Credentials-Absendereigenschaft.
Betreff InArgument<T> <Schnur> Betreff der Nachricht.
Körper InArgument<T> <Schnur> Nachrichtentext
Anlagen InArgument<T> <Schnur> Anlagensammlung, die zum Speichern von Daten verwendet wird, die an diese E-Mail-Nachricht angefügt sind.
Von MailAddress Absenderadresse für die E-Mail-Nachricht.
Bis InArgument<T><MailAddressCollection> Adresssammlung, die die Empfänger dieser E-Mail-Nachricht enthält.
CC InArgument<T><MailAddressCollection> Adressenauflistung , die die CC-Empfänger für diese E-Mail-Nachricht enthält.
BCC InArgument<T><MailAddressCollection> Adressenauflistung, die die BCC-Empfänger für diese E-Mail-Nachricht enthält.
Tokenen InArgument<T> <IDictionary<Zeichenfolge, Zeichenfolge>> Diese Token können im Text ersetzt werden. Mit diesem Feature können Benutzer einige Werte im Textkörper angeben, als später durch die mit dieser Eigenschaft bereitgestellten Token ersetzt werden können.
BodyTemplateFilePath Schnur Der Pfad einer Vorlage für den Text. Mit der SendMail-Aktivität wird der Inhalt dieser Datei in die body-Eigenschaft kopiert.

Die Vorlage kann Token enthalten, die durch den Inhalt der Tokeneigenschaft ersetzt werden.
TestMailTo MailAddress Wenn diese Eigenschaft festgelegt ist, werden alle E-Mails an die darin angegebene Adresse gesendet.

Diese Eigenschaft soll beim Testen von Workflows verwendet werden. Wenn Sie beispielsweise sicherstellen möchten, dass alle E-Mails gesendet werden, ohne sie an die tatsächlichen Empfänger zu senden.
TestDropPath Schnur Wenn diese Eigenschaft festgelegt ist, werden alle E-Mails auch in der angegebenen Datei gespeichert.

Diese Eigenschaft soll verwendet werden, wenn Sie Workflows testen oder debuggen, um sicherzustellen, dass das Format und die Inhalte der ausgehenden E-Mails geeignet sind.

Lösungsinhalte

Die Lösung enthält zwei Projekte.

Projekt BESCHREIBUNG Wichtige Dateien
SendMail Die SendMail-Aktivität 1. SendMail.cs: Implementierung der Hauptaktivität
2. SendMailDesigner.xaml und SendMailDesigner.xaml.cs: Designer für die SendMail-Aktivität
3. MailTemplateBody.htm: Vorlage für die zu sendende E-Mail.
SendMailTestClient Client zum Testen der SendMail-Aktivität. Dieses Projekt veranschaulicht zwei Methoden zum Aufrufen der SendMail-Aktivität: deklarativ und programmgesteuert. 1. Sequence1.xaml: Workflow, der die SendMail-Aktivität aufruft.
2. Program.cs: ruft Sequence1 auf und erstellt auch programmgesteuert einen Workflow, der SendMail verwendet.

Weitere Konfiguration der SendMail-Aktivität

Obwohl im Beispiel nicht gezeigt, können Benutzer die Zusatzkonfiguration der SendMail-Aktivität ausführen. In den nächsten drei Abschnitten wird gezeigt, wie dies geschieht.

Senden einer E-Mail mithilfe von im Text angegebenen Token

Dieser Codeausschnitt veranschaulicht, wie Sie E-Mails mit Token im Textkörper senden können. Die Token werden in der body-Eigenschaft bereitgestellt. Die Werte für die Token werden in der Tokeneigenschaft bereitgestellt.

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

Senden einer E-Mail mithilfe einer Vorlage

Mit diesem Codeausschnitt wird veranschaulicht, wie Sie eine E-Mail-Nachricht mit Vorlagentoken im Text senden können. Beachten Sie, dass beim Festlegen der BodyTemplateFilePath-Eigenschaft kein Wert für die Text-Eigenschaft angegeben werden muss (der Inhalt der Vorlagendatei wird in den Text kopiert).

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

Senden von E-Mails im Testmodus

Mit diesem Codeausschnitt wird das Festlegen der beiden Testeigenschaften veranschaulicht: Durch Festlegen von TestMailTo für alle Nachrichten werden diese (ohne Beachtung der Werte von To, Cc und Bcc) an john.doe@contoso.con gesendet. Durch Festlegen von TestDropPath werden alle ausgehenden E-Mails auch im angegebenen Pfad aufgezeichnet. Diese Eigenschaften können unabhängig voneinander festgelegt werden (sie sind nicht verknüpft).

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

Setupanweisungen

Für dieses Beispiel ist der Zugriff auf einen SMTP-Server erforderlich.

Weitere Informationen zum Einrichten eines SMTP-Servers finden Sie unter den folgenden Links.

SMTP-Emulatoren, die von Drittanbietern bereitgestellt werden, stehen zum Download zur Verfügung.

So führen Sie dieses Beispiel aus

  1. Öffnen Sie mit Visual Studio die SendMail.sln Projektmappendatei.

  2. Stellen Sie sicher, dass Sie Zugriff auf einen gültigen SMTP-Server haben. Weitere Informationen finden Sie in den Einrichtungsanweisungen.

  3. Konfigurieren Sie das Programm mit Ihrer Serveradresse sowie den Absender- und Empfänger-E-Mail-Adressen.

    Um dieses Beispiel ordnungsgemäß auszuführen, müssen Sie möglicherweise den Wert von von und zu E-Mail-Adressen und die Adresse des SMTP-Servers in Program.cs und in Sequence.xaml konfigurieren. Sie müssen die Adresse an beiden Speicherorten ändern, da das Programm E-Mails auf zwei verschiedene Arten sendet.

  4. Drücken Sie STRG+UMSCHALT+B, um die Solution zu erstellen.

  5. Drücken Sie STRG+F5, um die Lösung auszuführen.