Freigeben über


Benutzerdefinierte SendMail-Aktivität

Das SendMail-Beispiel zeigt, wie Sie eine benutzerdefinierte Aktivität erstellen, die von AsyncCodeActivity zum Senden von E-Mails über SMTP zur Verwendung in einer Workflow-Anwendung abgeleitet ist. Die benutzerdefinierte Aktivität verwendet die Funktionen von SmtpClient, um E-Mail-Nachrichten asynchron und mit Authentifizierung zu senden. Außerdem werden Endbenutzerfunktionen wie Testmodus, Tokenersetzung, Dateivorlagen und Testablagepfad bereitgestellt.

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

Name Typ BESCHREIBUNG
Host String Die Adresse des SMTP-Serverhosts.
Port String Der Port des SMTP-Diensts auf dem Host.
EnableSsl bool Gibt an, ob der SmtpClient die Verbindung mit SSL (Secure Sockets Layer) verschlüsselt.
UserName String Der Benutzername zum Einrichten der Anmeldeinformationen und Authentifizieren der Credentials-Absendereigenschaft.
Kennwort String Das Kennwort zum Einrichten der Anmeldeinformationen und Authentifizieren der Credentials-Absendereigenschaft.
Subject InArgument<T><string> Der Betreff der Nachricht.
Body InArgument<T><string> Der Nachrichtentext.
Attachments InArgument<T><string> Adressenauflistung, die zum Speichern von an diese E-Mail-Nachricht angehängten Daten verwendet wird.
From MailAddress Absenderadresse für die E-Mail-Nachricht.
Beschreibung InArgument<T><MailAddressCollection> Adressenauflistung, 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.
Token InArgument<T><IDictionary<Zeichenfolge, Zeichenfolge>> Diese Token können im Text ersetzt werden. Mithilfe dieser Funktion können Benutzer bestimmte Werte im Text verwenden, die später durch Tokens ersetzt werden können, die mit dieser Eigenschaft angegeben werden.
BodyTemplateFilePath String 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 wurde, werden alle E-Mails an die darin angegebene Adresse gesendet.

Diese Eigenschaft ist für das Testen von Workflows vorgesehen. Beispielsweise können Sie auf diese Weise sicherstellen, dass alle E-Mails gesendet, nicht jedoch tatsächlich den Empfängern zugestellt werden.
TestDropPath String Wenn diese Eigenschaft festgelegt wurde, werden alle E-Mail-Nachrichten zusätzlich in der angegebenen Datei gespeichert.

Diese Eigenschaft ist für das Testen oder Debuggen von Workflows vorgesehen, um sicherzustellen, dass Format und Inhalt der ausgehenden E-Mail-Nachrichten geeignet sind.

Inhalt der Projektmappe

Die Projektmappe enthält zwei Projekte.

Projekt Beschreibung Wichtige Dateien
SendMail Die SendMail-Aktivität 1. SendMail.cs: Implementierung für die 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-Nachricht.
SendMailTestClient Ein Client zum Testen der SendMail-Aktivität. In diesem Projekt werden zwei Möglichkeiten zum Aufrufen der SendMail-Aktivität veranschaulicht: deklarativ und programmgesteuert. 1. Sequence1.xaml: Workflow zum Aufrufen der SendMail-Aktivität.
2. Program.cs: ruft Sequence1 auf und erstellt programmgesteuert einen Workflow mit SendMail.

Weitere Konfiguration der SendMail-Aktivität

Benutzer können weitere Konfigurationen für die SendMail-Aktivität angeben, die in diesem Beispiel nicht gezeigt werden. Dies wird in den folgenden drei Abschnitten veranschaulicht.

Senden einer E-Mail-Nachricht mit Token im Text

Mit diesem Codeausschnitt wird veranschaulicht, wie Sie eine E-Mail-Nachricht mit Token im Text 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-Nachricht mit 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-Mail-Nachrichten außerdem unter dem angegebenen Pfad gespeichert. 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

Um dieses Beispiel ausführen zu können, ist der Zugriff auf einen SMTP-Server erforderlich.

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

SMTP-Emulatoren können von Drittanbietern heruntergeladen werden.

So führen Sie dieses Beispiel aus

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

  2. Stellen Sie sicher, dass sie auf einen funktionierenden SMTP-Server zugreifen können. Beachten Sie dazu die Setupanweisungen.

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

    Um dieses Beispiel ordnungsgemäß ausführen zu können, müssen Sie möglicherweise noch den Wert für die E-Mail-Adresse von Absender und Empfänger sowie die Adresse des SMTP-Servers in Program.cs und Sequence.xaml konfigurieren. Die Adressen müssen an beiden Speicherorten geändert werden, da das Programm E-Mail-Nachrichten auf unterschiedliche Weise sendet.

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

  5. Drücken Sie STRG+F5, um die Projektmappe auszuführen.