Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
Öffnen Sie mit Visual Studio die SendMail.sln Projektmappendatei.
Stellen Sie sicher, dass Sie Zugriff auf einen gültigen SMTP-Server haben. Weitere Informationen finden Sie in den Einrichtungsanweisungen.
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.
Drücken Sie STRG+UMSCHALT+B, um die Solution zu erstellen.
Drücken Sie STRG+F5, um die Lösung auszuführen.