Aracılığıyla paylaş


SendMail Özel Etkinliği

SendMail örneği, bir iş akışı uygulamasında kullanılmak üzere SMTP kullanarak posta göndermek üzere öğesinden AsyncCodeActivity türetilen özel bir etkinliğin nasıl oluşturulacağını gösterir. Özel etkinlik, e-postayı zaman uyumsuz olarak gönderme ve kimlik doğrulamasıyla posta gönderme özelliklerini SmtpClient kullanır. Ayrıca test modu, belirteç değiştirme, dosya şablonları ve test bırakma yolu gibi bazı son kullanıcı özellikleri sağlar.

Aşağıdaki tabloda SendMail faaliyeti için bağımsız değişkenler ayrıntılı olarak yer almaktadır.

İsim Türü Açıklama
Sunucu Dize SMTP sunucu adresi.
Liman Dize Sunucudaki SMTP hizmetinin portu.
EnableSsl Boole öğesinin SmtpClient bağlantıyı şifrelemek için Güvenli Yuva Katmanı (SSL) kullanıp kullanmadığını belirtir.
Kullanıcı adı Dize Göndericinin kimliğini doğrulamak için Credentials özelliğine kimlik bilgilerini ayarlamak üzere kullanıcı adı.
Şifre Dize Gönderen Credentials özelliğinin kimliğini doğrulamak için kimlik bilgilerini ayarlama parolası.
Konu InArgument<T> <dizgi> İletinin konusu.
Vücut InArgument<T> <dizgi> İletinin metni.
Ekleri InArgument<T> <dizgi> Bu e-posta iletisine eklenmiş verileri depolamak için kullanılan ek koleksiyonu.
Kaynak MailAddress Bu e-posta iletisi için Kimden adresi.
İçin InArgument<T><MailAddressCollection> Bu e-posta iletisinin alıcılarını içeren adres koleksiyonu.
CC InArgument<T><MailAddressCollection> Bu e-posta iletisi için karbon kopya (CC) alıcılarını içeren adres koleksiyonu.
Gizli Kopya InArgument<T><MailAddressCollection> Bu e-posta iletisi için BCC (gizli) alıcılarını içeren adres grubu.
Token'lar InArgument<T> <IDictionary<dizesi, dize>> Gövdede değiştirilmeye değer belirteçler. Bu özellik, kullanıcıların gövdede daha sonra bu özellik kullanılarak sağlanan belirteçlerle değiştirilebilecek bazı değerler belirtmesine olanak tanır.
BodyTemplateFilePath Dize Gövde için bir şablonun yolu. Etkinlik, SendMail bu dosyanın içeriğini gövde özelliğine kopyalar.

Şablon, belirteçler özelliğinin içeriğiyle değiştirilen belirteçler içerebilir.
TestMailTo MailAddress Bu özellik ayarlandığında, tüm e-postalar içinde belirtilen adrese gönderilir.

Bu özelliğin iş akışlarını test ederken kullanılması amaçlanmıştır. Örneğin, tüm e-postaların gerçek alıcılara gönderilmeden gönderildiğinden emin olmak istediğinizde.
TestDropPath Dize Bu özellik ayarlandığında, tüm e-postalar da belirtilen dosyaya kaydedilir.

Bu özellik, giden e-postaların biçiminin ve içeriğinin uygun olduğundan emin olmak için iş akışlarını test ederken veya hata ayıklarken kullanılmak üzere tasarlanmıştır.

Çözüm İçeriği

Çözüm iki proje içerir.

Proje Açıklama Önemli Dosyalar
SendMail SendMail etkinliği 1. SendMail.cs: ana etkinlik için uygulama
2. SendMailDesigner.xaml ve SendMailDesigner.xaml.cs: SendMail etkinliği tasarımcısı
3. MailTemplateBody.htm: gönderilecek e-posta şablonu.
SendMailTestClient İstemci, SendMail etkinliğini test edecek. Bu proje SendMail etkinliğini çağırmanın iki yolunu gösterir: bildirim temelli ve programlı olarak. 1. Sequence1.xaml: SendMail etkinliğini çağıran iş akışı.
2. Program.cs: Sequence1'i çağırır ve ayrıca SendMail kullanan program aracılığıyla bir iş akışı oluşturur.

SendMail etkinliğinin daha fazla yapılandırması

Örnekte gösterilmese de, kullanıcılar SendMail etkinliğinin ek yapılandırmasını gerçekleştirebilir. Sonraki üç bölümde bunun nasıl yapıldığı gösterilmektedir.

Gövdede belirtilen belirteçleri kullanarak e-posta gönderme

Bu kod parçacığı, gövdede belirteçleri olan e-postaları nasıl gönderebileceğinizi gösterir. Belirteçlerin gövde özelliğinde nasıl verildiğine dikkat edin. Bu belirteçlerin değerleri belirteçler özelliğine sağlanır.

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

Şablon kullanarak e-posta gönderme

Bu kod parçacığı, gövdedeki şablon belirteçlerini kullanarak e-posta göndermeyi gösterir. Özelliği ayarlarken BodyTemplateFilePath Body özelliğinin değerini sağlamamız gerekmeyen bir özellik olduğuna dikkat edin (şablon dosyasının içeriği gövdeye kopyalanır).

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

Test Modunda Posta Gönderme

Bu kod parçacığı, iki test özelliğinin nasıl ayarlanacağını gösterir: TestMailTo ayarlandığında, tüm iletiler john.doe@contoso.con adresine gönderilir (Kime, Bilgi, Gizli değerlerine bakılmaksızın). TestDropPath ayarlanarak tüm giden e-postalar da sağlanan yola kaydedilir. Bu özellikler bağımsız olarak ayarlanabilir (ilgili değildir).

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 Yönergeleri

Bu örnek için SMTP sunucusuna erişim gereklidir.

SMTP sunucusu ayarlama hakkında daha fazla bilgi için aşağıdaki bağlantılara bakın.

Üçüncü taraflar tarafından sağlanan SMTP öykünücüleri indirilebilir.

Bu örneği çalıştırmak için

  1. Visual Studio'yu kullanarak SendMail.sln çözüm dosyasını açın.

  2. Geçerli bir SMTP sunucusuna erişiminiz olduğundan emin olun. Kurulum yönergelerine bakın.

  3. Programı, sunucu adresiniz ile Kimden ve Kime e-posta adresleriyle yapılandırın.

    Bu örneği doğru bir şekilde çalıştırmak için, Program.cs ve Sequence.xaml içinde Kimden ve Kime e-posta adreslerinin değerlerini ve SMTP sunucusunun adresini yapılandırmanız gerekebilir. Program postayı iki farklı yolla gönderdiğinden, her iki konumda da adresi değiştirmeniz gerekir

  4. Çözümü oluşturmak için CTRL+SHIFT+B tuşlarına basın.

  5. Çözümü çalıştırmak için CTRL+F5 tuşlarına basın.