Dela via


Anpassad sendmail-aktivitet

Exemplet SendMail visar hur du skapar en anpassad aktivitet som härleds från AsyncCodeActivity för att skicka e-post med SMTP för användning i ett arbetsflödesprogram. Den anpassade aktiviteten använder funktionerna SmtpClient för att skicka e-post asynkront och skicka e-post med autentisering. Den innehåller också vissa slutanvändarfunktioner som testläge, ersättning av token, filmallar och nedladdningssökväg för tester.

I följande tabell beskrivs argumenten SendMail för aktiviteten.

Namn Typ Beskrivning
värd Sträng Adressen till SMTP-servervärden.
Hamn Sträng Port för SMTP-tjänsten i värden.
EnableSsl Bool Anger om SmtpClient använder SSL (Secure Sockets Layer) för att kryptera anslutningen.
Användarnamn Sträng Användarnamn för att konfigurera autentiseringsuppgifterna för att autentisera avsändarens Credentials egenskap.
Lösenord Sträng Lösenord för att konfigurera autentiseringsuppgifterna för att autentisera avsändarens Credentials egenskap.
Ämne InArgument<T> <sträng> Ämne för meddelandet.
Kropp InArgument<T> <sträng> Meddelandets brödtext.
Bifogade filer InArgument<T> <sträng> Samling med bifogade filer som används för att lagra data som är kopplade till det här e-postmeddelandet.
Från MailAddress Avsändaradressen för det här e-postmeddelandet.
Till InArgument<T><MailAddressCollection> Adresssamling som innehåller mottagarna av det här e-postmeddelandet.
KUBIKCENTIMETER InArgument<T><MailAddressCollection> Adresssamling som innehåller mottagare av kopia (CC) för det här e-postmeddelandet.
BCC InArgument<T><MailAddressCollection> Adresssamling som innehåller mottagare av hemlig kopia (BCC) av det här e-postmeddelandet.
Tokener InArgument<T> <IDictionary-sträng<, sträng>> Token som ska ersättas i brödtexten. Med den här funktionen kan användare ange vissa värden i brödtexten som senare kan ersättas av de markörer som anges med den här egenskapen.
BodyTemplateFilePath Sträng Sökväg till en mall för brödtexten. Aktiviteten SendMail kopierar innehållet i den här filen till dess kroppsegenskap.

Mallen kan innehålla token som ersätts av innehållet i tokenegenskapen.
TestMailTo MailAddress När den här egenskapen har angetts skickas alla e-postmeddelanden till den adress som anges i den.

Den här egenskapen är avsedd att användas vid testning av arbetsflöden. När du till exempel vill se till att alla e-postmeddelanden skickas utan att skicka dem till de faktiska mottagarna.
TestDropPath Sträng När den här egenskapen har angetts sparas även alla e-postmeddelanden i den angivna filen.

Den här egenskapen är avsedd att användas när du testar eller felsöker arbetsflöden för att se till att formatet och innehållet i de utgående e-postmeddelandena är lämpligt.

Lösningsinnehåll

Lösningen innehåller två projekt.

Projekt Beskrivning Viktiga filer
Skicka e-post SendMail-aktiviteten 1. SendMail.cs: implementationen av huvudaktiviteten
2. SendMailDesigner.xaml och SendMailDesigner.xaml.cs: designer för SendMail-aktiviteten
3. MailTemplateBody.htm: mall för e-postmeddelandet som ska skickas ut.
SendMailTestClient Klient för att testa aktiviteten SendMail. Det här projektet visar två sätt att anropa SendMail-aktiviteten: deklarativt och programmatiskt. 1. Sequence1.xaml: arbetsflöde som anropar SendMail-aktiviteten.
2. Program.cs: anropar Sequence1 och skapar även ett arbetsflöde programmatiskt som använder SendMail.

Ytterligare konfiguration av SendMail-aktiviteten

Även om det inte visas i exemplet kan användarna utföra tilläggskonfigurationen av SendMail-aktiviteten. De kommande tre avsnitten visar hur detta går till.

Skicka ett e-postmeddelande med tokens som anges i brödtexten

Det här kodfragmentet visar hur du kan skicka e-post med token i meddelandets brödtext. Observera hur tokenarna anges i egenskapen för brödtexten. Värden för dessa token tillhandahålls till tokenegenskapen.

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

Skicka ett e-postmeddelande med hjälp av en mall

Det här kodfragmentet visar hur du skickar ett e-postmeddelande med hjälp av en malltoken i brödtexten. Observera att när du anger BodyTemplateFilePath egenskapen behöver vi inte ange värdet för egenskapen Body (innehållet i mallfilen kopieras till brödtexten).

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

Skicka e-postmeddelanden i testläge

Det här kodfragmentet visar hur du ställer in de två testegenskaperna: genom att ange TestMailTo för alla meddelanden skickas till (utan hänsyn till john.doe@contoso.con värdena för To, Cc, Bcc). Genom att ange TestDropPath registreras även alla utgående e-postmeddelanden i den angivna sökvägen. Dessa egenskaper kan anges oberoende av varandra (de är inte relaterade).

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 instruktioner

Åtkomst till en SMTP-server krävs för det här exemplet.

Mer information om hur du konfigurerar en SMTP-server finns i följande länkar.

SMTP-emulatorer som tillhandahålls av tredje part är tillgängliga för nedladdning.

Så här kör du det här exemplet

  1. Med hjälp av Visual Studio, öppna lösningsfilen SendMail.sln.

  2. Kontrollera att du har åtkomst till en giltig SMTP-server. Se konfigurationsanvisningarna.

  3. Konfigurera programmet med din serveradress och från- och till-e-postadresser.

    Om du vill köra det här exemplet korrekt kan du behöva konfigurera värdet för från- och till-e-postadresser och adressen till SMTP-servern i Program.cs och i Sequence.xaml. Du måste ändra adressen på båda platserna eftersom programmet skickar e-post på två olika sätt

  4. Tryck på CTRL+SKIFT+B för att skapa lösningen.

  5. Om du vill köra lösningen trycker du på CTRL+F5.