SendMail egyéni tevékenység

A SendMail-minta bemutatja, hogyan hozhat létre olyan egyéni tevékenységet, amely abból AsyncCodeActivity ered, hogy smtp használatával küld e-maileket a munkafolyamat-alkalmazáson belül való használatra. Az egyéni tevékenység az e-mailek aszinkron küldésének és a hitelesítéssel történő e-mailek küldésének képességeivel SmtpClient rendelkezik. Emellett olyan végfelhasználói funkciókat is biztosít, mint a teszt mód, a tokenek cseréje, a fájlsablonok és a teszt elérési út.

Az alábbi táblázat a tevékenység argumentumait SendMail ismerteti.

Név Típus Leírás
Gazda Lánc Az SMTP-kiszolgáló gazdagépének címe.
Kikötő Lánc Az SMTP-szolgáltatás portja a gazdagépen.
EnableSsl Bool Megadja, hogy a SmtpClient kapcsolat titkosítása a Secure Sockets Layer (SSL) használatával legyen-e megadva.
UserName Lánc Felhasználónév a hitelesítő adatok beállításához a feladó Credentials tulajdonság hitelesítéséhez.
Jelszó Lánc Jelszó a hitelesítő adatok beállításához a feladó Credentials tulajdonság hitelesítéséhez.
Tárgy InArgument<T> <karaktersorozat> Az üzenet tárgya.
Törzs InArgument<T> <karaktersorozat> Az üzenet törzse.
Mellékletek InArgument<T> <karaktersorozat> Az e-mailhez csatolt adatok tárolására szolgáló mellékletgyűjtemény.
Ettől kezdve MailAddress Az e-mail üzenet feladójának címe.
InArgument<T><MailAddressCollection> Az e-mail címzettjeinek címgyűjteménye.
felirat InArgument<T><MailAddressCollection> Az e-mail üzenethez tartozó, másolatot kapó (CC) címzetteket tartalmazó címgyűjtemény.
BCC InArgument<T><MailAddressCollection> Olyan címgyűjtemény, amely tartalmazza az e-mail üzenet vakmásolati (BCC) címzettjeit.
tokenek IDictionary A törzsben lecserélendő tokenek. Ez a funkció lehetővé teszi a felhasználók számára, hogy a törzsben megadjanak bizonyos értékeket, amelyeket később lecserélhetnek az ezzel a tulajdonsággal biztosított tokenekkel.
BodyTemplateFilePath Lánc A törzs sablonjának elérési útja. A SendMail tevékenység ennek a fájlnak a tartalmát a törzstulajdonságára másolja.

A sablon tartalmazhat olyan tokeneket, amelyeket a tokenek tulajdonságának tartalma vált fel.
TestMailTo MailAddress Ha ez a tulajdonság be van állítva, a rendszer minden e-mailt a benne megadott címre küld.

Ez a tulajdonság a munkafolyamatok teszteléséhez használható. Ha például meg szeretné győződni arról, hogy az összes e-mailt a tényleges címzetteknek való küldés nélkül küldi el a rendszer.
TestDropPath Lánc Ha ez a tulajdonság be van állítva, a rendszer az összes e-mailt a megadott fájlba is menti.

Ez a tulajdonság a munkafolyamatok tesztelése vagy hibakeresése során használható, hogy a kimenő e-mailek formátuma és tartalma megfelelő legyen.

Megoldás tartalma

A megoldás két projektet tartalmaz.

Projekt Leírás Fontos fájlok
Levélküldés A SendMail tevékenység 1. SendMail.cs: a fő tevékenység megvalósítása
2. SendMailDesigner.xaml és SendMailDesigner.xaml.cs: a SendMail tevékenység tervezője
3. MailTemplateBody.htm: a küldendő e-mail sablonja.
SendMailTesztKliens Ügyfél a SendMail-tevékenység teszteléséhez. Ez a projekt két módszert mutat be a SendMail-tevékenység meghívására: deklaratív módon és programozott módon. 1. Sequence1.xaml: a SendMail tevékenységet meghívó munkafolyamat.
2. Program.cs: meghívja a Sequence1-et, és létrehoz egy, a SendMailt használó munkafolyamatot is programozott módon.

A SendMail-tevékenység további konfigurációja

Bár a mintában nem jelenik meg, a felhasználók elvégezhetik a SendMail-tevékenység konfigurálását. A következő három szakasz bemutatja, hogyan történik ez.

E-mail küldése a szövegben megadott tokenekkel

Ez a kódrészlet bemutatja, hogyan küldhet e-maileket tokenekkel az e-mail szövegében. Figyelje meg, ahogyan a tokenek meg vannak adva a törzselemben. A tokenek értékeit a tokenek tulajdonság adja meg.

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

E-mail küldése sablonnal

Ez a kódrészlet bemutatja, hogyan küldhet e-mailt sablontokenek használatával a törzsben. Figyelje meg, hogy a BodyTemplateFilePath tulajdonság beállításakor nem kell megadni a Body tulajdonság értékét (a sablonfájl tartalma a törzsbe lesz másolva).

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

Levelek küldése tesztelési módban

Ez a kódrészlet bemutatja, hogyan állíthatja be a két tesztelési tulajdonságot: az összes üzenet a TestMailTo címre lesz elküldve, függetlenül attól, hogy mi van beállítva a Címzett, Másolatot kap és Titkos másolat mezőkben. A TestDropPath beállításával az összes kimenő e-mail rögzítve lesz a megadott elérési úton is. Ezek a tulajdonságok egymástól függetlenül állíthatók be (nem kapcsolódnak egymáshoz).

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 utasítások

Ehhez a mintához hozzá kell férni egy SMTP-kiszolgálóhoz.

Az SMTP-kiszolgáló beállításával kapcsolatos további információkért tekintse meg az alábbi hivatkozásokat.

A harmadik felek által biztosított SMTP-emulátorok letölthetők.

A minta futtatása

  1. A Visual Studio használatával nyissa meg a SendMail.sln megoldásfájlt.

  2. Győződjön meg arról, hogy rendelkezik érvényes SMTP-kiszolgálóval. Tekintse meg a beállítási utasításokat.

  3. Konfigurálja a programot a kiszolgáló címével, valamint a Feladó és a Címzett e-mail-címekkel.

    A minta megfelelő futtatásához konfigurálnia kell a Feladó és a Címzett e-mail-címek értékét, valamint az SMTP-kiszolgáló címét a Program.cs és a Sequence.xaml fájlban. Mindkét helyen módosítania kell a címet, mivel a program kétféleképpen küld e-mailt

  4. A megoldás létrehozásához nyomja le a CTRL+SHIFT+B billentyűkombinációt.

  5. A megoldás futtatásához nyomja le a CTRL+F5 billentyűkombinációt.