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
Öffnen Sie mit Visual Studio die Projektmappendatei SendMail.sln.
Stellen Sie sicher, dass sie auf einen funktionierenden SMTP-Server zugreifen können. Beachten Sie dazu die Setupanweisungen.
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.
Drücken Sie STRG+UMSCHALT+B, um die Projektmappe zu erstellen.
Drücken Sie STRG+F5, um die Projektmappe auszuführen.