E-posta hesabı ve ilgili sürece karar verdikten sonra ilk olarak EBI Servis Shell config dosyasında aşağıdaki değişiklikleri uyguluyoruz.
1--config içerisine yeni bir section eklediğimiz için section bölümüne bu alanı eklememiz gerekiyor.
<section name="mailReader" type="EBI.EBIFlow.MailReader.Server.Configuration.Section,EBI.EBIFlow.MailReader.Server"/>
2. E-postadan okuma için yeni bir uygulama başlatılacağı için applications altına application bilgisini eklememiz gerekiyor.
<application namespace="EBI.EBIFlow.MailReader.Server.Application" type="EBI.EBIFlow.MailReader.Server.ApplicationFactory,EBI.EBIFlow.MailReader.Server" />
3-Mail yoluyla başlatmak istediğiniz süreci wflProcesses tablosundan Id sini not almanız gerekmekte, örnek süreç uygulama dizinin de \Assemblies\SampleProcesses\Mail Receiver.process bulunmaktadır.Biz burada örnek süreci kulanarak anlatım yapacağız.
4-mailReader içinde ilgili alanları konfigure etmeden önce sahip olduğu özellikleri
Özellikler
| Adı | Açıklama | |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| interval | E-posta okuma süresini saniye cinsenden belirlemek için kullanılır ve varsayılan değeri 60 saniyedir | |||||||||||||||||||||||||||||||
| sessionUser | EBIFlow web uygulamasına giriş yapacak kullanıcı ismini belirler. | |||||||||||||||||||||||||||||||
| sessionPassword | EBIFlow web uygulamasına giriş yapacak kullanıcı şifresini belirler. | |||||||||||||||||||||||||||||||
| logonProvider | EBIFlow uygulamasına giriş yapacak kullanıcı için kullanılacak logon sistemini belirler ve varsıylan değeri Dummy dir.
| |||||||||||||||||||||||||||||||
| defaultProcess | mailReader içersine birden fazla server eklemesi yapılabilir ve eklenen server lara başlatılacağı süreç set edilmediğinde bu bölümdeki süreci kullanır. | |||||||||||||||||||||||||||||||
| servers | Birden çok server sistemi burada barındırılır. | |||||||||||||||||||||||||||||||
| server | E-posta bilgilerini tutar
|
5-Özellikler bölümünde detaylı olarak açıklanan alanlarla oluşturulmuş örnek konfigurasyon aşağıdadır. Burada john.wick EBIFlow kullanıcısı ECZACIBASI domainine bağlı john.wick e-posta adresine gelmiş e-posta sonrası process bölümünde verilmiş Id ye sahip süreci wflProcess tablosundan bularak süreci başlatacak.Eğer process e süreç Id si verilmeseydi defaultProcess de bulunan süreç çalıştırılacaktı.
<mailReader interval="60" sessionUser="john.wick" defaultProcess="82B6D98B-D29D-4DF7-9DF5-F0A1D39C3F13">
<servers>
<server url="https://owa.sirketdomain.com.tr/EWS/Exchange.asmx" autoDiscoverUrl="" type="Exchange2007_SP1"
user="john.wick" password="epostasifresi" domain="ECZACIBASI"
timeout="0" process="82B6D98B-D29D-4DF7-9DF5-F0A1D39C3F13" maxitems="5" requestedHeaders="X-Originating-IP;Return-Path;X-MS-Exchange-Organization-AuthSource"/>
</servers>
</mailReader>
6-Tüm ayarları tamamladık. Örnek mail atıyoruz
7-Atılan e-posta sonrası ilgili mailReader uygulaması bizim belirttiğimiz değer olan 60 saniyede bir servisi kontrol edecek sonrasında atılan mail e ulaşıp süreci başlatıyor.
Süreç içerisinde ulaşılabilecek bilgiler
- Alıcı ismi
- Alıcı ile birlikte eklenen diğer kişilerin bilgileri
- Gönderen bilgisi
- Header bilgileri
- Konu
- İçerik bilgisi de html olarak gönderilip süreç içerisinde html olarak görüntülenecek.
- Ek dosya aynı isim ve formatta sisteme eklenmiş olarak görüntülenecek.
Süreç içerisine serviceData xml yolunu içersine ilgili bilgilerin geleceği yapı aşağıdaki gibidir.
<serviceData>
<email>
<sender />
<recepients>
<recepient />
</recepients>
<infos/>
<headers>
<header>
<name />
<value/>
</header>
</headers>
<subject />
<body />
</email>
<FileUploadInfo>
<File>
<FileName />
<Id />
<WorkItemId />
<Owner />
<Hash />
<Hash256 />
<Date />
<ContentType />
</File>
</FileUploadInfo>
</serviceData>
Dönen veri özellikleri
| Ad | Özellik | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
e-posta içerik bilgilerinin tutulduğu bölümdür.
| ||||||||||||||||||||
| FileUploadInfo | Ek dosya bilgilerinin tutulduğu bölümdür.File yolu altında tutar.
|
Kullandığımız örnek süreçte bulunan test maili için gelen veri xml aşağıdaki gibidir.
<serviceData>
<email>
<sender>john.wick@eczacibasi.com.tr</sender>
<recepients>
<recepient>john.wick@eczacibasi.com.tr</recepient>
</recepients>
<infos/>
<headers>
<header>
<name>X-Originating-IP</name>
<value>[10.10.10.10]</value>
</header>
<header>
<name>Return-Path</name>
<value>null</value>
</header>
<header>
<name>X-MS-Exchange-Organization-AuthSource</name>
<value>TAT13MBX01.eczacibasi.com.tr</value>
</header>
</headers>
<subject>Merhaba bu bir testtir</subject>
<body>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="Generator" content="Microsoft Word 15 (filtered medium)" />
</head>
<body lang="TR" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">
<span style="color:#1F497D;mso-fareast-language:TR">
Merhaba,<o:p></o:p>
</span>
</p>
<p class="MsoNormal">
<span style="color:#1F497D;mso-fareast-language:TR">
<o:p> </o:p>
</span>
</p>
<p class="MsoNormal">
<span style="color:#1F497D;mso-fareast-language:TR">
Bu bir testtir.
<o:p></o:p>
</span>
</p>
</p>
</div>
</body>
</body>
</email>
<FileUploadInfo>
<File>
<FileName>EmailMessage.eml</FileName>
<Id>2db442cb-c4f5-44e3-9a6e-1be1a2a6a9d1</Id>
<WorkItemId>7bdc9cb4-8496-47c7-939a-97bf34a4b5c4</WorkItemId>
<Owner display="JOHN WICK">d93094cf-efc2-43e5-af4f-5841bd06872b</Owner>
<Hash>m/EPDgGCWMwshiTk2aQwJ8pVTEI=</Hash>
<Hash256>EnHpvlFTGPH7D0ECwj9VpUDwgnwf/bAoWffJ72pynDA=</Hash256>
<Date>2017-03-11 21:16:15Z</Date>
<ContentType>message/rfc822</ContentType>
</File>
<File>
<FileName>Ekli Dsya.pptx</FileName>
<Id>cbac7b2a-1252-41b8-a3e7-3556e63268e2</Id>
<WorkItemId>7bdc9cb4-8496-47c7-939a-97bf34a4b5c4</WorkItemId>
<Owner display="JOHN WICK">d93094cf-efc2-43e5-af4f-5841bd06872b</Owner>
<Hash>40SwGiVxqA8Zx7iqMKrAs6c5z2o=</Hash>
<Hash256>DHYsheglT+OXYzYsflHMA6ZymdpFKXDJpR6IU5vj0PI=</Hash256>
<Date>2017-03-11 21:16:16Z</Date>
<ContentType>application/vnd.openxmlformats-officedocument.presentationml.presentation</ContentType>
</File>
</FileUploadInfo>
</serviceData>
Gelen verileri süreç içerisinde kullanımı için hazırlanan örnek süreç scriptleri aşağıdaki gibidir.
<If>
<Then>
<Condition>
<Not>
<IsEmpty>
<Value Culture="" Target="None">eval::/*/serviceData/email</Value>
</IsEmpty>
</Not>
</Condition>
<Perform>
<Set Node="/*/Mail/From">
<Value Culture="" Target="None">eval::/*/serviceData/email/sender</Value>
</Set>
<Set Node="/*/Mail/Subject">
<Value Culture="" Target="None">eval::/*/serviceData/email/subject</Value>
</Set>
<Set Node="/*/Mail/Body">
<Value Culture="" Target="None">eval::/*/serviceData/email/body</Value>
</Set>
<ForEach Node="/*/serviceData/email/recepients/recepient">
<Insert Into="/*/Mail/Recepient/Data">::/*/Mail/Recepient/Template</Insert>
<Set Node="/*/Mail/Recepient/Data/Template[last()]/email">
<Value Culture="" Target="None">eval::.</Value>
</Set>
</ForEach>
<ForEach Node="/*/serviceData/email/headers/header">
<Insert Into="/*/Mail/Header/Data">::/*/Mail/Header/Template</Insert>
<Set Node="/*/Mail/Header/Data/Template[last()]/Name">
<Value Culture="" Target="None">eval::./name</Value>
</Set>
<Set Node="/*/Mail/Header/Data/Template[last()]/Value">
<Value Culture="" Target="None">eval::./value</Value>
</Set>
</ForEach>
<ForEach Node="/*/serviceData/FileUploadInfo/File">
<SetVariable Name="$(Hash)">
<Value Culture="" Target="None">eval::./Hash</Value>
</SetVariable>
<SetVariable Name="$(Hash256)">
<Value Culture="" Target="None">eval::./Hash256</Value>
</SetVariable>
<SetVariable Name="$(FileName)">
<Value Culture="" Target="None">eval::./FileName</Value>
</SetVariable>
<SetVariable Name="$(ContentType)">
<Value Culture="" Target="None">eval::./ContentType</Value>
</SetVariable>
<SetVariable Name="$(Id)">
<Value Culture="" Target="None">eval::./Id</Value>
</SetVariable>
<SetVariable Name="$(WorkItemId)">
<Value Culture="" Target="None">eval::./WorkItemId</Value>
</SetVariable>
<SetVariable Name="$(OwnerId)">
<Value Culture="" Target="None">eval::./Owner</Value>
</SetVariable>
<SetVariable Name="$(OwnerName)">
<Value Culture="" Target="None">eval::./Owner/@display</Value>
</SetVariable>
<SetVariable Name="$(Date)">
<Value Culture="" Target="None">eval::./Date</Value>
</SetVariable>
<SetVariable Name="$(TemplateId)">
<Value Culture="" Target="None">NewGuid</Value>
</SetVariable>
<Insert Into="/*/Mail/Attachments/Details"><Template guid="$(TemplateId)">
<WorkItemId>$(WorkItemId)</WorkItemId>
<Owner display="$(OwnerName)">$(OwnerId)</Owner>
<Date>$(Date)</Date>
<FileName>$(FileName)</FileName>
<Id>$(Id)</Id>
<ContentType>$(ContentType)</ContentType>
<Hash>$(Hash)</Hash>
<Hash256>$(Hash256)</Hash256>
</Template></Insert>
</ForEach>
</Perform>
</Then>
</If>
Tüm bu işlemlerin sonunda başlatma adımı Onayla aksiyonu ile ilerletilerek sonraki adıma düşecektir. Burada onayla adımından sonra bir modül tanımlanarak içerisinde farklı yollar için yönetim yapılabilir.

